martes, 23 de octubre de 2007
SSH (Secure Shell)
$ who
$ w
- Para saber cuantas sesiones estan abiertas:
$who -q
$who | grep wc
- Para desconectar un usuario usamos ps:
$ps aux | grep usuario
# kill -TERM id_del_proceso
miércoles, 17 de octubre de 2007
Compresión y Descompresión de Archivos en Linux
Empaquetar tar cvf archivo.tar /archivo/mayo/*
Desempaquetar tar xvf archivo.tar
Ver el contenido (sin extraer) tar tvf archivo.tar
.tar.gz - .tar.z - .tgz (tar con gzip)
Empaquetar y comprimir tar czvf archivo.tar.gz /archivo/mayo/*
Desempaquetar y descomprimir tar xzvf archivo.tar.gz
Ver el contenido (sin extraer) tar tzvf archivo.tar.gz
.gz (gzip)
Comprimir gzip -q archivo
(El archivo lo comprime y lo renombra como "archivo.gz")
Descomprimir gzip -d archivo.gz
(El archivo lo descomprime y lo deja como "archivo")
Nota: gzip solo comprime archivos, no directorios
.bz2 (bzip2)
Comprimir bzip2 archivo
bunzip2 archivo
(El archivo lo comprime y lo renombra como "archivo.bz2")
Descomprimir bzip2 -d archivo.bz2
bunzip2 archivo.bz2
(El archivo lo descomprime y lo deja como "archivo")
Nota: bzip2 solo comprime archivos, no directorios
.tar.bz2 (tar con bzip2)
Comprimir tar -c archivos | bzip2 > archivo.tar.bz2
Descomprimir bzip2 -dc archivo.tar.bz2 | tar -xv
tar jvxf archivo.tar.bz2 (versiones recientes de tar)
Ver contenido bzip2 -dc archivo.tar.bz2 | tar -tv
.zip (zip)
Comprimir zip archivo.zip /mayo/archivos
Descomprimir unzip archivo.zip
Ver contenido unzip -v archivo.zip
.lha (lha)
Comprimir lha archivo.lha /mayo/archivos
Descomprimir lha -x archivo.lha
Ver contenido lha -v archivo.lha
lha -l archivo.lha
.zoo (zoo)
Comprimir zoo -a archivo.zoo /mayo/archivos
Descomprimir zoo -x archivo.zoo
Ver contenido zoo -v archivo.zoo
zoo -L archivo.zoo
.rar (rar)
Comprimir rar -a archivo.rar /mayo/archivos
Descomprimir rar -x archivo.rar
Ver contenido rar -v archivo.rar
rar -l archivo.rar
lunes, 15 de octubre de 2007
Bases de Datos MYSQL
aptitude install mysql-server-5.0 mysql-client-5.0
Archivo de configuracion de mysql esta en:
/etc/mysql/my.cnf
renombrar la linea
bind-address = 127.0.0.1
para poderse conectar desde cualquier lado, tambien se puede colocar la ip desde donde queremos que se conecte solamente
mysql-query-browser: cliente grafico para conetarse a las bases de datos, tambien se puede usar phpmyadmin, abrimos un navegador colocamos el nombre o la ip del servidor seguido de /phpmyadmin
El usuario root de mysql por defecto tiene la clave en blanco por lo que es primordial colocarle una inmediatamente despues de instalar mysql
Coloque una clave para el usuario root
de MySQL cuando ingrese desde localhost
en la consola (no recomendado) con:/usr/local/bin/mysqladmin -u root password 'nueva-clave'
Recordemos limpiar el historial para que no quede ese ultimo comando grabado y se pueda ver la contraseña:
history -c
- Desde el mysql (Recomendado):
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> UPDATE user SET Password=PASSWORD('password') WHERE user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql>
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> quit
bye
Ahora que asignamos una contraseña al usuario root comprobaremos que ya no puede acceder sin la contraseña:
$mysql -u root
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
Para poder acceder como usuario "root" haremos uso del parametro "-p" para usar validación por contraseña:$mysql -u root -p
Enter password:
De esta manera solo podras acceder como root con una contraseña
Ahora comprobamos con esto:
mysql> use mysql;Como podemos ver, el usuario "root" desde 'localhost' necesita contraseña (la cual se muestra cifrada) para acceder, lo cual es recomendable.
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql> SELECT host,user,password FROM user;
+-----------+------+------------------+
| host | user | password |
+-----------+------+------------------+
| localhost | root | 565491d704013245 |
+-----------+------+------------------+
1 row in set (0.00 sec)
mysql>
Nuevamente refrescamos los privilegios así:
mysql> FLUSH PRIVILEGES;Y salimos:
Query OK, 0 rows affected (0.00 sec)
mysql> quit
bye
Ahora mencionaremos una medida mas de seguridad la cual también es recomendable y consiste en cambiar el nombre por default de la cuenta administrador de mysql (root), a algun nombre diferente que pueda ser mas dificil de adivinar. Este cambio hara mas dificil utilizar un ataque de fuerza bruta o con diccionario a la cuenta de administrador. En tal caso el intruso tendra que adivinar el password, pero primero el nombre de la cuenta de administrador, esto se hace así:
mysql> use mysql;
mysql> update user set user="mydbadmin" where user="root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Ahora como ultimo test apagaremos el servicio mysqld así:
# /etc/rc.d/rc.mysqld stop
Y comprobaremos que lo podamos reiniciar con:# /etc/rc.d/rc.mysqld start
Bien, ahora nuestro servidor MySQL ya está correctamente instalado y configurado con las medidas de seguridad apropiadas.
Finalmente debemos de eliminar el contenido del historial de MySQL (~/.mysql_history), en el cual todos los comandos SQL ejecutados han sido almacenados (especialmente passwords, los cuales son almacenados en texto plano).
$ cat /dev/null > ~/.mysql_history
NOTA: Como podemos ver en el comando anterior, fue ejecutado como usuario normal, ya que las tareas de cambiar contraseñas fueron hechas con un usuario normal.
*NOTA: este procedimiento deberá de ser aplicado para todas las cuentas con las que se ha estado trabajando (si es que si hicieron las pruebas con un usuario normal y con el usuario root del sistema).
Crear una cuenta de usuario en la base de datos:
mysql> GRANT ALL ON basededatos.* TO ‘user’@'hosts’ IDENTIFIED BY ‘pass’;
donde host puede ser la ip de la maquina que se va a conectar
Algunas operaciones usuales del administrador son:
SHOW DATABASES;
muestra todas las bases disponibles.
USE base1;
permite usar la base base1.
SHOW TABLES;
que muestra todas las tablas de la base activa.
DESCRIBE tabla;que presentan estructura de la tabla.
SHOW CREATE TABLE tabla;
Crear base de Datos:
create database nombre_de_bdd
Remplazar base de datos:
~# mysql -u root -p nombre_bdd < /ruta/nueva_bdd/ bdd.sql
Realizar dump (respaldo de la bdd):
mysqldump -u root -p nombre_bdd > nombre_del_respaldo.sql
y posteriormente restaurarla con:
Para sacar una copia de respaldo de todas las bases de datos con:
# mysqldump --force -p --all-databases > /respaldomysql/dump-1nov2007.sql
y posteriormente restaurarla con:
El manual de MySQL: http://www.mysql.com/documentation/mysql/bychapter/index.html
Ayuda para cambiar clave de root en sistemas Linux:
DETECCIÓN DE HARDWARE
- Para detectar hardware con lspci y obtener un resumen:
$lspci
- Para obtener mas informacion use los indicadores -v y -vv:
$lspci -v
$lspci -vv
#update-pciids
$dmesg | less
- Para encontrar dispositivos específicos como dispositivos usb use:
$dmesg | grep -i usb
- Para saber cuanta memoria física hay en el sistema use:
$dmesg | grep -i memory
- Para obtener los dispositivos IDE que estan usando el subsistema de emulación SCSI:
$dmesg | grep -i scsi
- Para ver los puertos serie use:
$dmesg | grep -i tty
- Para ver el procesador o procesadores use:
$dmesg | grep -i cpu
- También podemos usar la utilidad hwinfo para mostrar todos los dispositivos del sistema, necesitamos instalarlo primero:
$aptitude install hwinfo
$hwinfo
- Para ver el CPU:
$cat /proc/cpuinfo
- Para ver la memoria:
$cat /proc/meninfo
- Para ver el disco duro /proc/ide/hda o hdb
- Para conocer la geometría del disco, tanto física como lógica:
$cat /proc/ide/ide0/hda/geometry
- Para identificar un disco:
$cat /proc/ide/ide0/hda/model
- Para mostrar las versiones de los controladores de todas las unidades IDE use:
$cat /proc/ide/drivers
- Para ver las capacidades de las unidades de CD :
$cat /proc/sys/dev/cdrom/info
$cat /proc/scsi/scsi
- El siguiente comando emite el sonido del CPU en funcionamiento, no tiene aplicación practica:
$cat /proc/kcore > /dev/dsp
- Para ver todas las particiones de un disco y ver la capacidad total del disco use:
#fdisk -l
- Para mostrar la tabla de particiones de un disco determinado use:
#fdisk -l /dev/hda
- Para ver el espacio usado y el disponible del disco use:
$df -h
sábado, 13 de octubre de 2007
MAN (Paginas de manuales o man pages) E INFO (Paginas de información o info pages)
Visores gráficos para las paginas de manual e información:
Konqueror: Navegador web y de archivos de KDE. Simplemente escriba:
man:algo o info:/algo , en la barra de direcciones.
Yelp: Visor de GNOME
Pinfo: Basado en ncurses para ver paginas de manual e info desde la consola.
*RTFM (read the fine man page, lee la pagina de manual adecuada).
Linux ve todas las paginas de manual de un sistema como si fueran parte de un unico manual. Este se divide en secciones:
1 Programas ejecutables o comandos del interprete de ordenes (shell).
2 Llamadas de sistema.
3 Llamadas de bibliotecas.
4 Archivos especiales (alojados normalmente en /dev)
5 Formatos de archivo y convenciones
6 Juegos
7 Miscelanea
8 Comandos de adminsitración del sistema
9 Rutinas no estandar del nucleo
n Documentacion nueva, que podria ser trasladada posteriormente
l Documentación local especifica de si sistema
Referencias a paginas numeradas de manual, ejm:
grep(1) hace referencia a man grep en la seccion 1:
$man 1 grep
Para enumerar todas las secciones de las man pages de un comando o programa:
$man -f nombre_comando_programa
Cada man pages esta dividida en secciones, generalmente son: NOMBRE, SINOPSIS, DESCRIPCION, OPCIONES, ARCHIVOS, EJEMPLOS, VEA TAMBIEN, BUGS, AUTOR/TRADUCCION
La sintaxis de los comandos es:
nombre_comando [indicadores opcionales] cualquier otro elemento necesario
Texto en negrita: Escriba esto exactamente como se muestra.
Texto en cursiva: Denota argumento, o sea se debe remplazar con el valor que quiera. Depende del visro que use puede verse subrayado o en negritas.
[-abc] : Todo entre corchetes es opcional y se puede combinar
[-a | -b | -c] : No se pueden combinar entre si
argumento... Los puntos suspensivos indican que se pueden introducir varios argumentos, los delimitantes son espacios pero a veces se usan comas.
[expresión]... pueden facilitarse varias expresiones
Las opciones cortas pueden escribirse:
-abc o -a -b -c
Las opciones largas se introducen individualmente con doble guión:
--opcion1 –opcion2 –opcion3
Ejm: quiere encontrar un programa que cuente las palabras contenidas en un archivo, use la busqueda de palabras clave con apropos o man -k:
$apropos cout words
$man -k count words
A veces la base de datos de man puede quedar corrupta, para encontrar paginas de manual perdidas intente buscar con whereis -m:
$whereis -m cat
cat:/usr/man/man1/cat.1.gz
luego leala con man:
$man /usr/man/man1/cat.1.gz
si no funciona se puede intentar reconstruir la base de datos con mandb:
#mandb
si no funciona se puede usar locate y egrep para realizar una busqueda por todo el sistema:
$locate /cat. | egrep -w 'cat\.[1-9] [a-zA-Z]*[.gz]?[_F_]' o $locate/cat.
Si el visor man no funciona se puede usar zcat y nroff:
$zcat /usr/man/man1/cat.1.gz | nroff -man | less
Ultimo recurso: leer la pagina de manual en bruto con zless:
$zless /usr/man/man1/cat.1.gz
Si desea agregar una pagina de manual que no se encuentra en la ruta normal por ejemplo /opt/man, edite /etc/manpath.conf y añada la ruta:
MANDATORY_MANPATH /opt/man
si se tienen subdirectorios se colocan en este orden:
MANDATORY_MANPATH /opt/man/local
MANDATORY_MANPATH /opt/man
primero los subdirectorios y de ultimo el directorio padre.
Para mostrar los directorios de manual actuales use:
$manpath
Para ver las PAGINAS DE INFORMACION (info pages)
$info nombre_comando_programa
Para imprimir manpages:
$man -t nombre_comando_programa | lpr
-t se encarga de darle el formato adecuado.
- Para imprimirlo por una impresora de red:
$man -t nombre_comando_programa | lpr -P printername
Para ver las impresoras disponibles:
$lpstat -p -d
Manual de usarios de CUPS:
http://localhost:631/help
Para imprimir infopages:
$info nombre_comando_programa | lpr -o cpi=12 -o page-left=54 -o page-right=54 \ -o page-top=54 -o page-bottom=54
tambien se puede usar:
$info nombre_comando_programa | lpr
pero saldra sin formato apropiado.
Para imprimir paginas selectivas hay que exportarlas a un archivo:
$man nombre_comando_programa | col -b > archivo.txt
$info nombre_comando_programa | col -b > archivo.txt
el comando col -b elimina saltos de linea inversos o retrocesos.
- Para encontrar todos los archivos leame, de cambios, how to, guias, ejemplos, muestras y cualquier otra documentacion relevante a algun porgrama instalado use findoc, programa en python de Akkana Peck
ADMINISTRACIÓN DE PAQUETES EN DEBIAN
http://www.debian.org/
Descarga de Debian Testing:
http://www.debian.org/devel/debian-installer/
Descarga de Debian Stable:
http://www.debian.org/releases/etch/debian-installer/
Espejo oficial Debian:
http://www.debian.org/mirror
Lista de mirrors oficiales:
mirrors
Guia de Instalación de Debian:
http://www.debian.org/releases/stable/installmanual
Depositos apt no oficiales:
http://www.apt-get.org
Página de búsqueda e información de paquetes Debian Individuales:
http://www.debian.org/distrib/packages
Pagina de backports:
http://www.backports.org
Actualizaciones de seguridad únicamente disponibles en:
http://www.debian.org/security
Instalación de Linux en Laptops:
http://www.linux-laptop.net/
A continuación unos tips para utilizar apt, también se puede usar aptitude
- Para añadir archivos desde un CD-ROM usar:
#apt-cdrom add
- Para identificar un disco o CD usar:
#apt-cdrom ident
- Para reinstalar un paquete sobreescribiendo los archivos usar:
#apt-get install --reinstall nombre_paquete
- Para descargar únicamente sin instalar o desempaquetar usar:
#apt-get -d install nombre_paquete
puede añadir --dry-run para probarlo antes de ejecutarlo:
#apt-get -d install nombre_paquete --dry-run
- Para eliminar paquetes:
#apt-get remove nombre_paquete
- Para probar el comando de eliminación usar:
#apt-get remove nombre_paquete --dry-run
-Para eliminar todo rastro del paquete incluyendo archivos de configuración usar:
#apt-get --purge remove nombre_paquete
#cd /usr/src
#apt-get build-dep nombre_paquete
Luego construir el paquete con:
#apt-get -b source paquete
Luego instalarlo con:
#dpkg - i nombre_paquete.deb
Una alternativa a construir el paquete es el uso de backports que son binarios de Debian compilados apropiadamente preparados para su uso, tambien se puede instalar un programa que no se encuentre en los repositorios construyendo un deb usando chekinstall, utilidad que crea paquetes RPM, deb y slackware.
No existe comando independiente para actualizar paquetes, apt-get install busca siempre la versión mas reciente.
- Para actualizar un sistema Debian usar:
#apt-get update (actualiza la lsita de paquetes)
- Para actualizar todos los paquetes instalados sin eliminar ningún paquete para resolver dependencias usar:
#apt-get -u upgrade (realizar siempre primero el update)
- Para actualizar todos los paquetes (incluso la versión) que hay instalados, eliminando o instalando paquetes según se necesite para satisfacer todas las dependencias usar:
#apt-get -u dist-upgrade
El indicador -u le da una oportunidad de revisar todos los cambios antes de que se produzcan.
$dpkg -l | tee dpkglist
$dpkg -l nombre_paquete
- Para encontrar únicamente paquetes ajustados a un término de búsqueda usar:
$dpkg -l | grep nombre_paquete
- Para enumerar los archivos que pertenecen a un paquete use:
$dpkg -L nombre_paquete
- Para saber a que paquete pertenece un archivo use:
$dpkg -S nombre_archivo
- Para obtener toda la información relativa a un paquete usar:
$dpkg -s nombre_paquete
Para crear una lista de archivos de una instalación fuente para facilitar la desinstalación:
#find / | grep -v -e ^/proc/ -e ^/tmp/ -e ^/dev/ > nombre_paquet_preinstall.list
Compile e instale el nuevo programa, generando a continuacion la lista posterior a la instalación:
#find / | grep -v -e ^/proc/ -e ^/tmp/ -e ^/dev/ > nombre_paquet_postnstall.list
la opcion -v de grep activa las explicaciones detalladas -e ^ significa que debe excluirse el directorio a continuación.
A continuación cree la lista de archivos instalados por el paquete haciendo un diff de las 2 listas previas:
$diff nombre_paquet_preinstall.list nombre_paquet_postnstall.list > paquet_instalado.list
- Para instalar desde el codigo fuente paso por paso desempaquete el tarball porcesando a continuacion el programa con configure, make, make install
#cd /usr/src/descargas
#tar zxvf paquete.tar.gz
#cd paquete
#ls -l
#less README
#less INFO
#./configure --help
#./configure
#make
#make install | tee paquete_makeinstall
Otros programas estan archivados con bunzip2 en lugar de gzip para desempaquetarlo use:
#tar jxvf paquete.tar.bz2
- Para desinstalar un programa instalado a partir de los fuentes use:
#make uninstall
solo funcionara en caso que el autor del programa haya incluido la opcion make uninstall, tambien se puede redirigir la salida del comando hacia un archivo para verificar que se desinstalo todo.
USO DE CHECKINSTALL PARA CREAR PAQUETES A PARTIR DE LOS FUENTES
Checkinstall aloja los archivos README y el resto de la documentacion del programa en el directorio doc-pak.
#mkdir /doc-pak
#tar zxvf paquete.tar.gz
#cd paquete
#./configure
#make
#checkinstall -D
Se construira e instalara un paquete .deb, se puede verificar con:
$dpkg -l | grep paquete
para crear un paquete slackware:
#checkinstall -S
para crear un paquete RPM:
#checkinstall -R
Para eliminar un paquete de checkinstall simplemente use el administrador de paquetes de su sistema.