This FAQ is dedicated to Prof. Dr. Klaus Schilling.
-- "And I want it to be a multitasking, extensible System with cursor-addressable charactercell-only user interface, not more and not less. (of course I want to use the 'less' command, so don't mistake it as a pun)"
Index Home Index Buscador Parte II


iconAdministración (Parte II)

  • 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


Trademarks are owned by their owners.

Although the information given in this document is believed to be correct, the author will accept no liability for the content of this document. Use the tips and examples given herein at your own risk.

Copyright © 1998, 1999 by Brocoli & $erena. This document may be distributed only subject to the terms and conditions set forth in the LDP license.