- 3.30 Qué es y cómo funciona una shell?
Una shell es un programa que interpreta los comandos que el usuario el
usuario tipea y los transforma en intrucciones para el sistema operativo
en
cuestion. Una shell es solo eso, una interface que permite al usuario
interaccionar con el sistema operativo, al igual que el sistema X-Window,
el
cual permite al usuario ejecutar commandos mediante el mouse y el teclado.
Hay varios tipos de shell, entre las mas populares, estan la Bourne
shell (sh), Korn shell (ksh), C shell (csh), Secure Shell (SSH). Como
siempre
es necesario aclarar que ninguna es mejor o peor que otra, sin embargo la
documentacion existente sobre la Bourne Shell es, sin lugar a duda la mas
numerosa. Ver /etc/shells para ver tipo y path de cada una de las shells
disponibles en tu sistema.
- 3.31 Problema muy común: Ayudaaaa!! bash command not
found!!!! pero si yo tengo instalado el programa!!!! Esto puede
deberse a 2 razones
1- Que estés tipeando el nombre incorrecto del binario
ejecutable de tu programa (recorda que es case sensitive o sea
que las
mayúsculas y minúsculas cuentan)
2- Que el directorio el donde se encuentra el binario ejecutable de tu
programa NO este en PATH, los
binarios de un programa se encuentran en /usr/bin /bin /usr/local/bin, etc
para
saber si estos directorios se encuentran en tu PATH tipea echo $PATH vas a
ver una lista de directorios, si por ejemplo /usr/local/bin no esta en esa
lista tipea export
PATH='/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/usr/local/sbin:/usr/games:/usr/X11R6/bin'
Ver punto siguiente. Si el binario a ejecutar (ejemplo: BitchX) se
encuentra en un directorio
no estándar, tal como /home/fulanito/programas entonces hacé: cd
/home/fulanito/programas y luego ./bitchx
- 3.32 Environment variables y aliasing en Bash
Cuando ejecutamos un programa se dice que este se ejecuta en un
determinado
"ambiente" y ese "ambiente" esta definido por el proceso que llama a dicho
programa. Las "variables de ambiente" almacenan información sobre tu
directorio
cuando te logueas, username, tipo de shell, tipo de terminal y otra
información
opcional que el usuario puede definir. Estas variables pueden ser
configuradas
de manera muy simple por el usuario, en este FAQ se ejemplifican las
variables
mas usadas, para obtener una lista completa de todas las variables de
ambiente
man bash y para ver la configuracion completa tipea
printenv
PATH mencionada anteriormente, sintaxis
export PATH='/usr/local/bin'
EDITOR sintaxis export EDITOR=vi
MAIL sintaxis export MAIL=/var/spool/mail/serena
DISPLAY sintaxis export DISPLAY=hostname:0.0
Cuando bash es invocado, como shell interactiva, lo primero que hace es
leer
y ejecutar los comandos localizados en el archivo /etc/profile luego de
leer
este archivo, busca los ficheros ~/.bash_profile, ~/.bash_login y
~/.profile
en este orden, leyendo y ejecutando solo el primero que encuentre. De
esta manera podemos agregar las variables de ambiente en ~/.bash_profile
por
ejemplo para que de esta manera, cada vez que nos logueemos en el sistema
e
invoquemos bash, este leea nuestras variables localizadas en este archivo.
Diferencias entre ~/.bash_profile y ~/.bashrc: Los archivos
~/.bash_profile, ~/.bash_login o ~/.profile (recordá que sólo uno de
estos
archivos es leído) sólo se ejecuta cuando nos logueamos (login shells),
mientras que ~/.bashrc (non-login shells) es leído sólo cuando ya estamos
logueados.
Aliasing: Seguramente te habrás preguntado alguna vez: "por qué tengo
que
tipear mount -t vfat /dev/fd0 /mnt cada vez que tengo que montar un
floppy,
quisiera tener una forma más fácil sin escribir ese comando tan largo...
Podemos editar el archivo ~/.bashrc agregando "aliases" que no son más que
abrebviaciones usadas para facilitar al usuario sus tareas
administrativas.
# ~/.bashrc: executed by bash(1) for non-login shells.
export PS1='\h:\w\$ '
umask 022 # Previene que otros usuarios modifiquen archivos a los que no
deberían tener acceso.
# Alias para el floppy
alias floppy ="mount -t vfat /dev/fd0 /mnt"
# Así definido este alias, lo único que tenemos que tipear es la palabra
# floppy en vez de todo el comando mount -t vfat /dev/fd0 /mnt
# Alias para ver archivos y directorios en colores con el comando 'ls'
export LS_OPTIONS='--color=auto'
eval 'dircolors'
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
- 3.33 Archivos de inicio del sistema (Equivalentes del Autoexec.bat
de DOS)
Como último paso en la secuencia de booteo del kernel se inicia un
proceso
denominado init (PID1), init es conocido como el padre de todos los
procesos dado que su principal función es crear y controlar procesos.
Cada
vez que un proceso hijo termina init guarda las razones por las que dicho
proceso terminó en /var/run/utmp y /var/log/wtmp Init lee el archivo
/etc/inittab
Este archivo varía en las diferentes distribuciones, no osbtante, estos
son los puntos
principales que uno debe comprender:
sintaxis
id:runlevels:action:process
id identifica una linea en un archivo, para getty especifica la
terminal en la que corre
runlevels
# Default runlevel. (RedHat System)
# 0 - halt (Do NOT set initdefault to this) halt es "power off" por lo que
# se deduce que NO se debe configurar este runlevel como initdefault
# 1 - Single user mode # tareas administrativas.
# 2 - Multiuser, without NFS (Equivalente al runlevel 3 de no poseer una
network)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11 # Necesita xdm, gdm o kdm para iniciar X.
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault: # el runlevel por defecto en redhat es el número 3 (full multiuser mode)
actionAcción a tomar. Ej respawn (respawn hace que el proceso corra en background)
process Comando a ejecutar
En una operación normal init se asegura que getty esté
funcionando normalmente para que los usuarios puedan loguearse en el
sistema.
Single user mode: Algunas tareas adminitrativas requieren este runlevel
Ej.
correr fsck en una particion /usr o recuperar la cuenta root. Para bootear
desde single user mode en el prompt de lilo tenés que tipear: linux
-s
Boot scripts
Distribución |
Directorio |
Comentario |
RedHat |
/etc/rc.d/ |
-- |
Debian |
/etc/init.d/ |
-- |
Slackware |
/etc/rc.d/ |
-- |
- 3.34 Syslog, cron y at
El kernel así como varios programas almacenan errores, warnings y otros
tipos de mensajes en el directorio /var/log Clasificación de logs por
orden de
importancia:
EMERG el sistema es inutilizable
ALERT debe tomarse una acción ya!
CRIT condición crítica
ERR condición de error
WARNING advertencia
NOTICE condición normal pero significante
INFO informacional
DEBUG debug
El archivo /etc/syslog.conf contiene la configuración de syslogd, si
vas a
editarlo, recordá usar TABs en lugar de espacios.
Cron es el daemon que ejecuta tareas administrativas establecidas
periódicamente, la sintaxis para agregar tareas es la siguiente:
"minuto" "hora" "día del mes" "mes" "día de la semana" "comandos"
Por ejemplo, si se desea borrar los archivos viejos del directorio /tmp
se
puede agregar ejecutá el comando crontab -e y agregá la línea:
0 9 1 * * find /tmp -atime 3 -exec rm -f {} \; # Se ejecutará el
primer día
de cada mes a las 9AM
at: A diferencia de cron, at se encarga de realizar tareas pre
establecidas pero a diferencia de cron no es periódico sino que ejecuta
una
tarea sólo una vez, ejemplo:
brocoli:/home/serena# at 6pm october 7
at> /usr/share/sounds/remind.wav
at> CTRL + D (para salir del prompt)
job 2 at 1999-10-07 18:00
- 3.35 Cómo averiguo qué procesos estan corriendo en
mi máquina?
Mientras que un programa está corriendo se lo denomina proceso.
Linux
asigna a cada uno de los procesos un número único denominado process
identification number (PID) Para ver los procesos tipeá ps
aux y si queres matar
algún PID, usá kill numero_de_pid
Con el comando killall nombre_del_programa matás todos los
procesos pertenecientes a dicho programa.
- 3.36 Cómo mato un proceso cuando kill numero_de_pid
no funciona?
Tipea kill -9 numero_de_pid (mas informacion: man kill)
- 3.37 Qué es un proceso "zombie"?
Es un proceso que no ocupa
memoria, ni CPU, ni IO ni disco. Lo único que ocupan es un "slot" en la
tabla de procesos. Dado que el kernel tiene un limite para el número de
procesos simultáneos (esten o no ocupando CPU), el tener procesos zombies
puede llegar a ser un problema.
- 3.38 Standard Input, Output, and Error
Cuando un proceso está siendo ejecutado, linux abre 3 archivos para
dicho
proceso, a saber:
- stdin (standard input): Por defecto los procesos leen stdin desde el
teclado.
- stdout (standard output): Por defecto los procesos escriben stdout a
la
pantalla.
- stderr (standard error): Por defecto los procesos escriben stdout a la
pantalla.
- 3.39 Qué son los archivos "core"?
Un archivo core es creado por la
mayoría de los programas cuando sufren un "crash" Contienen información
destinada a reparar el problema. Normalmente el programa (debugger)
utilizado
para leer estos archivos core es el gdb que analiza que programa creo este
archivo core y los motivos del crash.
Los archivos core pueden ser removidos si no se desea analizar
esta información. Una manera de prevenir la aparición de archivos core es
la
siguiente: en ~/.bash_profile agregá ulimit -c 0
- 3.40 Cuál es la diferencia entre la memoria shared,
buffered, swap, user
y free?
- Shared: Memoria que es o puede ser potencialmente compartida por
múltiples procesos, esto se aplica generalmente a ejecutables, librerias,
archivos que posean mmap() read only
- Swap: Parte del disco usada como memoria virtual. Dado que el límite
de cada partición swap
es 127M, podés crear múltiples particiones swap de ser necesario, para
crear otra partición
swap los pasos son los siguientes:
dd if=/dev/zero of=/extra-swap bs=1024 count=1024 # en este ejemplo el
espacio asignado a la swap es de 1044480 bytes
mkswap /extra-swap 1024
swapon /extra-swap # Activación
Por último agregá la siguiente línea en /etc/fstab
/swapfile none swap sw 0 0
- Buffers y Cached: Esta memoria va a ser usada una vez que la memoria
free se halla agotado
- Free: Memoria que es efectivamente gastada, esto significa que cuando
un proceso que estaba ocupando esta memoria termina o un archivo es
borrado, esta memoria vuelve a estar libre
- Used: Significa que esta memoria corresponde al proceso que la esta
usando
Para chequear el estado de la memoria libre y usada utilizá los
comandos
free, memstat, top y/o cat /proc/meminfo
|