Lo que ocurre internamente en la máquina cuando ejecutamos un
programa, ya sea uno para leer un archivo, montar o desmontar la unidad de
CDROM, en genereal la ejecutación de cualquier tipo de programa que
nos permita realizar una tarea x, se realiza un proceso bastante complejo
y para que estas se realicen se requiere de una serie de acciones internas
por parte del sistema operativo. Como si lo anteriormente dicho no fuera
bastante, también encesitamos una forma de poder comunicarnos con
nuestro sistema operativo para decirle que es lo que queremos y no queremos
que haga. Y es aquí donde entra la impresindible función de
un intérprete de comandos (o shell) para realizar esos trabajos. Un
intérprete de comandos o shell es el encargado de traducir los comandos
que los usuarios introducen, a instrucciones que el sistema operativo pueda
comprender para así realizarlas. El programa que se encuentra entre
el sistema operativo y el usuario el que nos hace la vida más fácil.
Si tú eres un usuario que tiene interes en profundizar en un sistem
Unix/Linux tarde o temprano ( mientras mas temprano mejor ) deberá
introducirce y familiarizarse con el shell de su sistema, el cual es y se
convertirá en una, no mejor dicho en la herramienta impresindible
en la administración diaria del sistema, tanto por su potencia como
versatilidad.
Y siempre ten presente esto: "Todo lo que
se puede hacer en modo gráfico, se puede hacer también en modo
texto, a base de comandos. Pero no todo lo que se puede hacer en modo texto,
se puede hacer en modo gráfico".
De aquí en adeltante nos concentraremos en el intérprete de
comandos Bourne Again shell ( mejor conocido como Bash ), ya que este es
uno de los interpretes más utilizados y extendidos usados por defecto
en Slackware y en muchas otras distribuciones linux. Esto se debe a que es
potente, fiable y también incorpora algunas característica
de Korn y C shells (ksh and csh).
Ahora me gustaría darles a conocer brevemente la historia sobre bash.
El Bourne Again shell (mejor conocido como Bash) fue creado con la finalidad
de utilizarlos en el proyecto GNU. La intención fue que este fuera
el intérprete de comandos estandar en el sistema GNU. El Bourne Again
shell "nació" oficialmente un domingo, 10 de enero de 1988. El responsable
de las primeras versiones de Bash fué Brian Fox y que posteriormente
continuó actualizándolo hasta 1993. En los inicios de 1989,
Chet Ramey comenzó a ayudar a Brian y fué el responsable de
muchos arreglos en el código y nuevas características.
Hoy en dia el mantenedor oficial de bash es Chet Ramey.
El inicio de sesión
Después de un momento de haber iniciado el sistema ( al final
de la carga de todos los datos del sistema ) usted a de estar mirando algo
como esto:
Welcome to Linux 2.4.20 (tty1)
darkstar login:
Primero aclararé unas cosillas. La primera línea nos da la
bienvenida a Linux y nos dice que estamos usando el kernel versión
2.4.20 y que además nos encontramos en el primer terminal de ocho.
En la segunda línea nos dice nuestro hostname el cual es darkstar
( este hostname el es por default, pero si nosotros indicamos otro durante
la instalación aparecerá ese) y la palabra login significa
que ahi debemos introducir el nombre del usuario el cual queremos iniciar
una sesión, ¿simple no ?
Ahora, como se supone es nuestro primer inicio de sesión después
de haber instalado el sistema debemos entrar como root ( o super usuario
). Luego de teclear root en la parte correspondiente al login nos pedirá
la password, la cual no se verá al momento de teclearla, pero sí
se está escribiendo ( esto es como una medida de seguridad) aquí
debemos introducir la password que le indicamos al sistema practicamente
al final de la instalación, pero si no le indicamos ninguna simplemente
presionamos <ENTER> y ya estaremos dentro.
Root: El Superusuario
Tanto en Unix como en otros sistemas operativos tales como Linux, hay una
gran variedad de usuarios los cuales son comandados por un usuario supremo
mejor conocido como root. Este usuario tiene la particularidad que es todo
poderoso ante el sistema y los usuarios que pertenecen a él. Es el
cabecilla de todos los usuarios de la máquina, que ejerce una labor
meramente administrativa, manteniendo la seguridad del sistema y la de sus
usuarios para que este funcione correctamente. Entonces podemos decir que
usted, sí usted es el root del sistema, lo que significa como han
podido notar un gran poder sobre el sistema, lo que conlleva una gran responsabilidad,
porque de ahora en adelante cualquier perjuicio o beneficio que tenga el
sistema o sus usuarios sera meramente responsabilidad de usted.
Por razones de seguridad lo recomendado es crear un usuario y cuando
se necesite hacer alguna actualización de software, hardware o algún
arreglo significativo para el funcionamiento del sistema la mejor opción
es ejecutar el comando su(1). Este comando nos pedirá la password
de root y así nosotros seremos un usuario con privilegios de root
en el sistema. Y para salir de root cuando antes éramos usuarios normales
simplement tecleamos exit(2) y dejarémos de ser usuarios con privilegios
en el sistema y quedaremos nuevamente como el usuario normal.
Ejecutando Programas
Es dificil obtener mucha complicidad sin
ejecutar un programa: you might be able to prop something up con tu computadora
o una antigua puerta abierta, y algo creara el ruido mas encantador cuando
se ejecute, pero de eso es lo que realmente se trata. Y creo que todos estarán
de acuerdo that use as a humming doorstop isn't what brought the personal
computer the popularity it now enjoys.
It's hard to get much accomplished without
running a program; you might be able to prop something up with your computer
or hold a door open, and some will make the most lovely humming noise when
running, but that's really about it. And I think we can all agree that its
use as a humming doorstop isn't what brought the personal computer the popularity
it now enjoys.
Entonces, ¿Recuerdas qué casi todo en Linux es un archivo?
Bien, eso va por los programas también. Cada orden que usted ejecuta
(que no está incluida en el shell) reside en algún archivo
en alguna parte. Usted ejecuta un programa simplemente especificando la ruta
completa hasta el.
Por ejemplo, ¿recuerda el comando su(1) de la sección anterior?,
b ien, realmente el archivo su reside en el directorio /bin/. Entonces usted
se estará preguntando, ¿ por qué entonces solo bsata
con escribir su para que este funcione?.Y bueno la respuesta a esta interrogante
es simplemente porque eso queda en la PATH , osea la ruta de entorno variable
PATH. La mayoria de los tipos de shell ya conocen la ruta o algo parecido
a la ruta PATH. Esto significa básicamente que contiene una lista
de directorios para buscar los programas que intentas ejecutar tan solo teclenado
el nombre. Así, cuando usted ejecuta el comando su, el shell busca
a través de su lista de directorios o PATH, verificando cada archivo
ejecutable que se llame su ejecutando el primero que encuentra. Esto es lo
que ocurre siempre que ejecutamos un programa simplemente escrbiiendo su
nombre (osea sin especificar la ruta completa hasta el prgorama en cuestión).
Ahora si tecleamos el nombre de un programa y resulta que se nos muestra
un error que de tipo "command not found", esto significa que el programa
que usted intenta ejecutar no se encuentra en su ruta indicada o en la PATH
o que simplemente no existe. Más adelante explicaremos la variable
de entrono con una mayor profundidad ( en la sección llamada The Bourne
Again Shell (bash) ).
También se puede especificar la ejecución de un programa anteponiendole
un punto y slash seguido del comando ( osea asi: ./comando ) donde "." es
la ruta corta para" el directorio en el que nos encontramos"- Osea que si
nos encontramos en el directorio /bin, ./su funcionará como una ruta
explicita completa.
Comodines
L a gran mayoría de las shell`s aceptan ciertos caracteres como sustitutos
o abreviaciones que significan "algo va aquí". Esos caracteres se
conocen como "wildcards" o comodines. Entre los más comunes tenemos:
*( asterisco ) y ? ( signo de pregunta). Por convención, ? solamente
sive para indicar un solo caracter desconocido. Por ejemplo, supongamos que
deceamos mover los archivos slack1.c, slack2.c y slack3.c que se encuentran
en el directorio /home/usuario/ al directorio /tmp/, utilizando el comando
mv sería asi: mv /home/usuario/slack1.c /tmn/ , mv /home/usuario/slack2.c
/tmn/ y mv /home/usuario/slack3.c /tmn/ . Como te haz de haber dado cuenta
no es complicado, pero aveces puede ser algo tedioso, entonces nos queda
mucho más facil de teclear mv /home/usuario/slack?.c /tmp/. Aquí
lo que ocurre es que el simbolo ? coincide con los caracteres 1,2 y 3, siendo
cada uno sustituido por el signo.
Ahora te haz de estar diciendo ¿que pasa si son muchos más
archivo que no son nisiquiera parecidos ?, entonces yo les digo: usamos el
comodín * ( asterisco). Como se mencionó unos renglones arriba,
* coincide con "cualquier caracter y número de caracteres incluyendo
0". Por ejemplo, si esos tres archivos ( slack1.c, slack2.c y slack3.c) fueran
los únicos en el directorio, nosotros podríamos haber teclear
mv * /tmp/ y eso seria todo. Suponga, sin embargo, que hay también
un archivo llamado example.txt y uno llamado hejaz.txt. Nosotros queremos
copiar example.txt pero no hejaz.txt; entonces tecleamos esto: mv example?
/tmp/ o esto otro :mv exa* /tmp.
Input/Output Redireccionamiento y tuberias
Ya que nos hemos introducido breve y basicamente el el interprete de comandos
bash, procederé a mostrarle otras de sus caracteristicas. Primero
veremos redireccionamiento input/output ( redireccionamiento de entrada/salida)
lo que se reduce brevemente a esto:
$ df -h > espacio_en_disco.txt
Lo que ocurre en esa línea es que, ejecutamos el comando dmesg,
el que nos muestra las particiones que tenemos montadas en el sistema y detalles
sobre su espacio . El signo ">" es el redireccionador que usamos para
que la salida ( u output) de df -h quede en el archivo espacio_en_disco.txt.
Ahora veremos otro ejemplo de otra de las caracteristicas de bash.
$ ps | less
Lo que este comando hace es tomar la salida (el output) de ps y se podría
decir que lo entuba, para que yo pueda ser leido y recorrerlo a mi antojo.
Ahora veremos un ejemplo de " >>" :
$ ps >> ps.txt
Este es uno de los redireccionadores más usados. Este hace lo misma
que ">", excepto que ">>" escribira la salida de ps en el archivo
psp.txt. Si este archivo existe, entonces ">>" escribirá el
output ( o salida) de ps al final del contenido del archivo ps.txt -
Tambien existe el operador "<" que significa "tome como entrada lo siguiente
", pero no se usa tan a menudo.
$ fromdos < dosfile.txt > unixfile.txt
Redireccionar se torna divertido cuando usted empieza a mezclar los operadores:
$ ps | tac > > ps.txt
Eso ejecutar ps, invertirá las líneas de su salida y añadirá
aquello al final del contenido del archivpo ps.txt. Estos operadores
pueden ser utilizados tantos como usted quiera, solo debe tener en cuenta
que estos se leen de izquierda a derecha.
Para una mayor información sobre bash(1) revise el manual de este.
Variables de Entorno
Una variable de entorno simplemente es un nombre asociado a una cadena de
caracteres. La utilidad puede ser variada, pero de esto depende de la variable.
Unas son útiles para no tener que escribir muchas opciones al ejecutar
un programa y otras las utiliza el propio shell (PATH, PS1,etc).
Linux es un sistema muy complejo complejo y hay que estar pendiente de muchas
cosas. Muchos y pequeños detalles que están en juego en su
interacción normal con variados programas. Supongo que nadie quiere
estar pasando una gran cantidad de opciones a cada uno de los programa que
ejecuta, diciendo que tipo de terminal está usando, el hostname de
la màquina, como debe lucir el prompt y así una infinidad de
detalles más.
Como un mecanismo de copiado, los usuarios tenemos a nuestra disposición
algo que se llama ambiente. El ambiente define las condiciones en las que
se ejecutan los programas, y algunas de estas definiciones son variables;
el usuario puede alterarlas y/o combinarlas, como solo se ofrece en un sistema
Linux. Gran parte de las shell`s tendrán variables de entorno ( pero,
sino es así puede que ese tipo de shell no sea muy útil que
digamos). En estos momentos daremos un vistazo al shell de forma global y
de las ordenes que mantiene usando sus variables de entorno.
Set
Su sintaxis es:
set varName ?value?
Este comando nos devuelve el valor de varName . Si value es especificado,
entonces set da el valor de varName a value, creando una nueva
variable si esta no existe con anterioridad, devolviendo así su valor.
Si varName comienza con
un parentesis abierto y termina con uno cerrado, entonces se refiere a un
elemento del arreglo: antes del primer caracter del paréntesis abierto
es el nombre del arreglo, y los caractéres entre el paréntesis
son el índice dentro del arreglo. Si no, varName se referirá a
una variable escalar.Normalmente, varName es incompetente (ya que
no incluye los nombres de cualquiera que contenga espacios en su nombre),
y la varaible de ese nombre en el actual namespace es leido o escrito.
El comando set por defecto nos muestra todas las variables de entorno actualmente
definidas y sus respectivos valores. Como la mayoría de los bash también
puede hacer otras cosas( con parámetros adicionales),sin embargo,
si quieres más información a respecto dejaremos que leas la
página bash(1) del manual. Un extracto de una configuración
de comandos set seria mas o menos así:
# set
PATH=/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
PIPESTATUS=([0]="0")
PPID=4978
PS1='\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/home/logan
QTDIR=/usr/local/lib/qt
REMOTEHOST=ninja.tdn
SHELL=/bin/bash
Aquí claramente se pueden apresiar las PATH definidas en el archivo.
Lo que significa que estemos donde estemos con solo teclear el nombre de
alguno de los binarios que se encuentren en esas rutas se ejecutarán
sin problema
unset
Su sintaxis es:
unset ?-nocomplain?
?--? ?name name name ...?
Este comando remueve una o varias variables. Cada "name" es el nombre de la variable,
especificado en cualquiera forma acpetable por el comando set. Si un "name" se refiere a un elemento
de un arreglo entonces este elemento es removido sin afectar el resto de
los demás arreglos. Si un "name" consiste en un nombre de
arreglo sin un indice como paréntesis, entonces el arreglo entero
es borrado. El comando unset devuelve
como resultado un comienzo de cadena. Si "-nocomplain" es especificado en
el primer argumento, cualquier error posible es descartado. Pero generalmente
utilizarás unset así:
$ unset VARIABLE
export
Su sintaxis es:
export [-nf] [name[=value] ...]
o
export -p
El comando export es verdaderamente
hábil. Usted puede darle un valor cualquiera a la variable de entorno
VARIABLE, si VARIABLE no existe entonces será creada. Ahora, si VARIABLE
ya tuviese un valor predefinido, entonces este valor será sustituido
por el indicado en export. Lo que
se vería más o menos así:
$ export VARIABLE=some_value
Esto, no es recomendable usarlo si usted quiere agregar una simple
nueva ruta a su PATH. Pero si usted quiere agrar una nueva ruta a su PATH
lo mejor es hacer algo así :
$ export PATH=$PATH:/some/new/directory
Note el uso de $PATH cuando usted quiere que el bash una variable (Remplazarla
con ese valor), coloque el simbolo $ en el comienzo del nombre de la variable.
Por ejemplo echo $PATH mostrara el valor de la variable PATH, que en mi caso
es:
$ echo $PATH
/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
Completacion con TAB
Una línea de comandos muchas veces, si esta es demaciada mecanografía
puede llegar a ser algo tedioso. Porque una mucha mecanografia es trabajo
y bueno, a nadie le gusta el trabajo. Pero para que ese trabajo de teclear
diferentes comandos con sus respectivas rutas y otros detalles bash nos ofrece
una gran ventaja y alivia, el cual podemos denominar "completación
con la tecla tab", sí como lo lee, bash nos proporciona esta gran
ventaja la cual consiste en basicamente que cuando estamos tecleando el nombre
de un archivo que por ejemplo se llama slackware y que se encuentra en la
raíz, entonce snosotros tecleamos /slack + TAB y nos autocompleta
/slackware. Si existen más archivos en la raíz que comiencen
por slack, entonces al presionar tab nos mostrará una lista de los
archivos y nosotros podremos teclear un par de caraacteres más que
diferencien esos archivos que comienzan igual y presionar tab nuevament ey
este se nos autocompletará. Como te haz podido dar cuenta estp de
la autocompletación es muy eficaz, no ahorra trabajo y hace que la
consola no sea tan tediosa.
Así que usted esta en la mitad de un trabajo y decide que necesita
hacer otra cosa. ¿Usted podría dejar lo que usted estar haciendo
y cambiar las tareas, pero esto un sistema multiusuario, correcto? ¿Y
usted puede entrar simultáneamente las veces que quiera, correcto?
¿Así que por que tiene que hacer una cosa a la vez?
Todos Nosotros no podemos tener multiples teclados, mouses y monitores en
una sola maquina; lo mas seguro es que ningun de nosotros los quiera. Claramente,
el hardware no es la solución. Eso nos deja el software, y Linux trabaja
para eso, proporcionando "terminales virtuales", o "VTs".
Apretando Alt y una tecla de función, usted puede cambiar entre los
términales virtuales; cada tecla de función corresponde a uno.
Slackware tiene inicios de sesión por defecto en 6 VTs. Alt+F2 lo
llevaran al segundo, Alt+F3 al tercero, etc.
El resto de las teclas de función esta reservado para las sesiones
de X. Cada sesión de X usa su propio VT, empezando con el séptimo
(Alt+F7) y subiendo. Estando en X, la combinación de teclas de Alt+Function
se reemplaza con Ctrl+Alt+Function; si usted está en X y quiere volver
a un inicio de sesión de texto (sin terminar su sesión de X),
Ctrl+Alt+F3 lo llevara a la tercera consola. (Alt+F7 lo devolverá,
asumiendo que está usando la primera sesión de X.)
mando , y los terminales virtuales. Usted debe sentirse cómodo
en trabajando en la línea de comandos, ejecutando programas, y usando
las tuberías y operadores de redireccionamineto para combinar los
comandos. Finalmente, usted debe tener una idea del poder del usuario root
y de porque es una mala idea estar como root.
Booteando | Indice | Estructura del Filesystem |