Skip to content

El shell bash

mayo 27, 2008

El shell bash

Uno de los intérpretes de comandos que maneja el sistema, deriva de un shell que se llamaba el Bourne Shell … es un intérprete de lìnea de comando, toda la linea se puede usar por tres elementos básicos:

cmd opc arg

comando opciones argumento

ls -al /

Todo unix se maneja por procesos, cuando arrancamos al inicio hay un proceso padre que se llama init, de éste derivan los otros, cuando nos loggeamos a una terminal el proceso (padre) init tiene que hacer una llamada al sistema conocida como fork() (bifurcar), lo que hace el sistema fork() es crear una copia del padre, deriva de las propiedades operativas de init, como usuario no nos sirve el puro init si no necesitamos un shell y por eso llama a un exec() (recubrir).

El exec() reemplaza el código del programa de ejecución, cuando abrimos una sesión ése codigo es igual al shell que se quiere correr (lo lee del disco duro). Cuando lo reemplaza lo que tenemos a la salida es un proceso bash. Cada que se ejecute algo en bash (en pantalla se ve komo una consola con prompt), como correr un proceso, el bash hace una llamada a fork() y crea una copia de si mismo (otro bash) el cual crea otra llamada que se llama exec() quien llama al código del proceso que se quiera ejecutar (lo lee del disco duro) y en un subproceso hijo se ejecuta. Cuando ese proceso se muere llama a otra llamada de sistema que se llama exit() el cual le regresa el control al bash.

Cuando se reemplaza con el exec se pierde el proceso anterior (ejemplo, el init() hijo).

El bash es un hijo de init, init es el primero que se prende y el ultimo que se apaga, pid=0 o 1.

Para ver todos los procesos ps -aux | grep init

El proc es un seudofile system, en el estan todos los procesos de la máquina, hay una carpeta por cada número de proceso (PID).

W

pstree

pstree > arbol

less arbol

pid de mi bash: 3645

kill -9 3645

Expansion de caracteres desde comodines

ls -d *

y ls -d *

VARIABLES

Cuando uno entra al sistema hay todo un sistema de variables en el path… las variables creadas por usuario en minúsculas y las del sistema en mayúsculas, si creamos variables los nombres pueden ser alfanumericos y el primero no ser digito, longitud arbitraria.

Sus valores se fijan con “=”

No dejar espacios antes despues de “=”

Si necesitas espacios dentro del valor podemos usar comillas

‘ ‘ -> simples, no leen variables

“ “ -> dobles, si leen las variables externas

\ -> “escape” , quita el significado especial

Para recuperar las variables se antepone el signo $

COMILLAS INVERSAS

Las comitas inversas ejecutan lo que esta dentro de ellas

[root@localhost /]# eq=`hostname`

[root@localhost /]# echo $eq

localhost.localdomain

who | cut -f1 -d “ “

who -> usuarios loggeados en el sistema

mail `who | cut -f1 -d “ “`

EXPORTACION DE VARIABLES

Las variables no se heredan a los hijos, se tiene que exportar

[root@localhost /]# echo $nombre

cristina

You have new mail in /var/spool/mail/root

[root@localhost /]# bash

[root@localhost /]# echo $nombre

[root@localhost /]# exit (regresar al bash anterior)

exit

[root@localhost /]#

Para heredarlas se puede hacerlo usando export, pero si el hijo modifica una variable el valor modificado no se le regresa al shell, el padre tiene de dos, si no recupera nada o se queda con el original.

[root@localhost /]# telefono=abcdef

[root@localhost /]# echo $telefono

abcdef

[root@localhost /]# export telefono=123456

[root@localhost /]# bash

[root@localhost /]# echo $telefono

123456

[root@localhost /]# telefono=uia2008

[root@localhost /]# echo $telefono

uia2008

[root@localhost /]# exit

exit

[root@localhost /]# echo $telefono

123456

env-> muestra todas las variables exportadas con sus valores

[root@localhost /]# env

SSH_AGENT_PID=3247

HOSTNAME=localhost.localdomain

DESKTOP_STARTUP_ID=

SHELL=/bin/bash

TERM=xterm

HISTSIZE=1000

GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2

WINDOWID=50331729

OLDPWD=/home

USER=root

LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:

GNOME_KEYRING_SOCKET=/tmp/keyring-RWHEgU/socket

SSH_AUTH_SOCK=/tmp/ssh-lSFpjL3192/agent.3192

SESSION_MANAGER=local/localhost.localdomain:/tmp/.ICE-unix/3192

MAIL=/var/spool/mail/root

DESKTOP_SESSION=default

PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

GDM_XSERVER_LOCATION=local

INPUTRC=/etc/inputrc

PWD=/

XMODIFIERS=@im=none

LANG=en_US.UTF-8

GDMSESSION=default

SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass

HOME=/root

SHLVL=2

GNOME_DESKTOP_SESSION_ID=Default

LOGNAME=root

telefono=123456

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-XQ7yCuI96a,guid=7d14b3475b4c5c8d4ec069cbc350cd00

LESSOPEN=|/usr/bin/lesspipe.sh %s

DISPLAY=:0.0

G_BROKEN_FILENAMES=1

COLORTERM=gnome-terminal

XAUTHORITY=/tmp/.gdmLUJR6T

_=/bin/env

./file-> ejecuta todos los comandos contenidos en file

Si tengo un programa binario a forma de correrlo es ./nombre_del_archivo

export -> exporta el valor de una variable

set -> cambia provisionalmente el valor de una variable

unset -> quita las variables definidas

CAT Y ECHO PARA HISTFILE

[root@localhost /]# cat $HISTFILE

sudo gedit /boot/grub/menu.lst

gedit

yum install -y beryl-gnome

yum install -y beryl-gnome

Cat group

cd /home

ls

mkdir temporal

ls

cat meminfo

cat cpuinfo

ls

cat uptime

uptime

top

ls /sbin

date

tail -f messages

service httpd start

service mysqld start

service sendmail stop

ls -al

ls

ls -a

ls -al

ls /

ls -lFr /

cd /etc; pwd

ls

cd ..; ls

cd .. ls

cd ..; ls -l

cd /etc; pwd

exit

echo $telefono

telefono=uia2008

echo $telefono

exit

[root@localhost /]# echo $HISTFILE

/root/.bash_history

[root@localhost /]# echo $HISTFILE

/root/.bash_history

[root@localhost /]# echo $HISTSIZE

1000

[root@localhost /]# echo $MAIL

/var/spool/mail/root

[root@localhost /]# echo $PPID

3430

[root@localhost /]# echo $OSTYPE

linux-gnu

[root@localhost /]# ECHO $PATH

bash: ECHO: command not found

[root@localhost /]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

[root@localhost /]# echo $PS1

[\u@\h \W]\$

[root@localhost etc]# echo $UID

0

arriba de 500 son usuarios, lo demás está designado a procesos

No comments yet

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: