inf-113 texto en borrador
TRANSCRIPT
Gnu/Linux Shell, Html, Css y JavaScript
Sin dejar de mencionar los sistemas operativos para móviles: Android, Windows Phone, …
Hay varios sistemas operativos: Google chrome OS, Windows, Mac Os X, Unix, GNU/Linux…
free like (minix) GNU/Linux
(Beastie) (Ñu) (Tux)
Y aún dentro de Linux hay varias distribuciones:
Todos ellos tienen ventajas y desventajas, críticos y defensores (por ej. Richard Stallman ha afirmado que Ubuntu es spyware, de FreeBSD se destaca su estabilidad y de GNU/Linux su soporte de hardwrae).
Richard Stallman (USA), creador del Proyecto GNU
(un S.O. libre) y fundador del movimiento
por el software libre (editor Emacs, compilador gcc).
Linus Torvald (Finlandia), creador del kernel
Linux.
Imagine programar, controlar, planificar y ejecutar la interacción directa con el hardware, repartiendo el tiempo de procesador entre ellos, grabar en los discos manipulando los cabezales, paginar la memoria, gestionar la jerarquía del sistema de archivos…
El kernel (el S.O.) hace ello.
Este es el famso e-mail de Linus Torvald al grupo comp.os.minix:
Hola a todos aquellos que usan Minix -
Estoy haciendo un sistema operativo (gratuito) (solamente una afición, no será
grande ni profesional como el GNU) para clones 386(486) AT.
Este ha estado gestándose desde abril, y está comenzando a estar listo.
Me gustaría recibir cualquier comentario sobre las cosas que gustan/disgustan
en minix, ya que mi SO (Sistema Operativo) se le parece un poco (la misma
disposición física del sistema de archivos, debido a motivos prácticos, entre
otras cosas).
Actualmente he portado bash(1.08) y gcc(1.40), y las cosas parecen funcionar.
Esto implica que conseguiré algo práctico dentro de unos meses, y me gustaría
saber qué características quiere la mayoría de la gente. Cualquier
sugerenciaes bienvenida, pero no prometeré que las pondré en práctica
PD. Sí – es libre de cualquier código de minix, y tiene un sistema de archivos
multi-hilo. NO es portable (usa conmutación de tareas 386 etc.), y
probablemente nunca será soportada por nada más que los discos duros AT,
porque es todo lo que tengo .
Linus Benedict Torvalds ([email protected])
La/el Shell es una interfaz entre el usuario y el S.O.
UNIX fue uno de los primeros S.O. en hacer la interfaz de usuario independiente del S.O.
Interpreta las órdenes de usuario y las envía al kernel para su ejecución.
La primel shell Unix (sh) fue escrita por Ken Thompson en 1971. En 1978 Stephen Bourne escribió el shell Bourne. Y en 1989 Brian Fox escribió el shell bash.
(ver /etc/shells)
Algunas órdenes (comandos) del shell bash:
Para averiguar órdenes (qué hace, dónde está el archivo, …)
Ejemplo
man comando Ayuda del comando especificado man ls, man –k printer
whatis algo Busca información sobre “algo” whatis remove
apropos algo Idem Idem
whereis nomorden Localiza archivos relacionados a nomorden whereis grep
Para ver archivos
cat arch1 […archN] (Concatena y) muestra archivos cat /etc/passwd, cat > nomarch
more arch1 […
archN]Muestra archivos una pantalla a la vez
more arch1 arch2, more arch*
:p :n barraespaciadora
less arch1 […archN]
Muestra archivos permitiendo ir hacia
arriba o hacia abajo (por ej. con las
flechas)
less arch1 arch2, less arch*
:p :n
tail arch1 […archN] Muestra archivos (su última parte) tail arch1 arch2, tail arch*
head arch1 […archN] Muestra archivos (su primera parte) head arch1 arch2, head arch*
Para moverse a través de los directorios (dirección absoluta/relativa)
cd dir Cambia de directorio cd /var/log, cd ..
Para trabajar con directorios y archivos
mkdir nomdir Crea un directorio mkdir scripts
touch nomarch
Cambia la fecha de un archivo
se puede usar para crear el archivo
touch archivo2
rmdir nomdir Borra un directorio vacío rmdir prog_dir
rm nomarch
Borra un archivo
Con la opción –r borra un directorio y todo su
contenido
rm archivo1.txt,
rm –r directorio2
mv arch1 ...archN dir Mueve el(los) archivo(s) a un directorio mv carta1 ../cartas
mv arch1 arch2 Renombra un archivo mv carta1 carta.bk
cp arch1...archN nomdir Copia archivos cp arch1 copiadea1
ls [nomdir] Lista el contenido del directorio ls -la /usr/bin, ls -d
pwd Muestra la ruta del directorio actual Pwd
chmod permisos arch Cambia los permisos de un archivochmod u+x
script1.sh
chown usuario:grupo arch Cambia el dueño un archivo chown nobody script
Acerca de usuarios
finger usuario Muestra información sobre un usuario en la red finger user113
id Número id de un usuario id user113, id
passwd Cambia la contraseña passwd
who Muestra los usuarios conectados al sistema who
w Muestra los usuarios conectados y qué hacen w
Para comparar, determinar propiedades y buscar archivos
du arch-o-dir Estima el espacio utilizado du –h arch1, du -hs .
diff [-e]arch1 arch2 Encuentra diferencias entre archivos diff arch1.c arch2.c
file arch Muestra el tipo de un archivo file –i archivo1
which progbin Busca binarios en el PATH del usuario which who
locate Busca archivos (vía BD) locate arch*
find Busca archivos find . -name ‘*.sh’ –print0
grep expr archivos Busca patrones en archivos grep –v 113 /etc/passwd
Para trabajar con/ver procesos
ps Muestra los procesos que se están ejecutando ps -A, ps –ef
kill [-señal] PID Matar un proceso (terminarlo) kill 1234
Comando varios
ln [-s] arch acceso Crea un acceso directo a un archivoln -s
/users/mike/.profile .
at Ejecuta un comando más tarde at 6pm Friday script1
cal mes año Muestra un calendario del mes/año cal 3 2013
date Muestra la hora y la fecha date
echo string Escribe mensaje en la salida estándar echo “Mensaje”
hostname Muestra información sobre el host hostname
uname Muestra información sobre el sistema uname -a
uptime Tiempo de encendido del sistema uptime
write user Envía un mensaje a otro usuario write aizen ^D
mesg Controla el acceso de mensajes mesg n
seq Imprime una secuencia de números seq 2 9, seq –sw; 13
Y aún otros comandos
sort Ordena la entrada en stdout sort arch1
cut Corta ciertas columnas de un archivo cut –d: -f1,5 /etc/passwd
pasteGraba las columnas de los archivos
uno al lado del otro
paste –d: arch1 arch2
Combinar órdenes en una única orden lógica: Metacaracteres sintácticos:
Secuenciación: ; Combinación (subshell): ()
Pipe, cauce o tubería:| Segundo plano o background: &
Or,And: listaord1 || listaord2 listaord1 && listaord2
-or:2 si 1 falla -and:2 si 1exitosa ||,&& solo la ultimaorden
Ejemplos:
cat /etc/passwd | grep 113 | sort
date; who | wc vs $ (date; who)|wc
Expansion
find . -name arch* no es lo mismo que find . -name ‘arch*‘
pues find . -name archivo1 archivo2 no es un comando correcto (archivo2 !?)
Algunas cosas “dignas” de mencionar
env o set (variables de ambiente)
Pag. 213 de Unix a base de ejemplos.PDF (netstat)
bash –x script1 (debug)
source script1 (“exporta variables”)
compress uncompress
tee p.37 apuntesBASH.pdf
jobs
pinky = finger
tar
egrep
sed
awk
editores
Cuándo utilizar el shell: ...muchos archivos ...tarea repetitiva
Scripts.sh (variables de usuario, variables especiales y sentencias de control)
La variable $?
which who
who -s who
echo $? Despliega 0 porque el último comando se ejecutó bien
who -s ju_noexiste
echo $? Despliega 1 porque el último comando falló
La variable $# y el if
cat script_if_y_numparam.sh#!/bin/bashif [ "$#" -ne 1 ]then echo "Debe incluir un parametro" exit 1fi
echo “ingreso un solo parametro, correcto!”
exit 0
Se puede hacer en el prompt (fíjese que el return se substituye por ;):
if grep inf113 /etc/passwd; then echo “estoy”; fi
if grep infff113 /etc/passwd; then echo “estoy”; else echo “no esta”; fi
cat script_casemenu.sh#!/bin/bashclearecho "Elija por favor"echo -e "1)Fecha de hoy 2)Usuarios conectados 3)Directorio actual: \c"
read ncase $n in 1) date;; 2) who|more;; 3) pwd;; *) echo "Opcion inexistente... Hasta luego";;esacechoexit 0
cat script_whilemenu.sh#!/bin/bashwhile true; do clear echo "Elija por favor" echo -e "1)Fecha de hoy 2)Usuarios conectados 3)Directorio actual: \c"
read n case $n in 1) date;; 2) who|more;; 3) pwd;; *) echo "Opcion inexistente... Hasta luego"; break;; esac echo echo "Digite enter o return " read ndone
cat script_ls_porvocales.sh#!/bin/bashvocales=aeiou
echo $vocalesechofor i in $(seq 0 4)do ls `echo ${vocales:$i:1}*` echo "que empiezan con ${vocales:$i:1}" echo doneexit 0
C:\Documents and Settings\Flia\Configuración local\Datos de programa\Google\Chrome\User Data\Default\User StyleSheets\Custom.css
chrome...UserContent.css
--------------------
utilizar el shell cuando: ...muchos archivos...tarea repetitiva
cd dir. absoluta/relativa
man x haceless so: buscar z: /z
Patrones (metacaracteres de sustitución): ? * [!a-z]*.sh ~ a{b,c,d}1.txt ("se expanden en...")
magic number: file * file -i *
combinar órdenes en unica orden lógica: metacaracteres sintácticos:
; | () & -background- ord1 || ord2 ord1 && ord2 -or:2 si 1 falla, and:2 si 1ex1tosa, ||.&&solo la ultimaorden-
$ date; who | wc vs $ (date; who)|wc
permisos en octal: que significan ?
Redirección de entrada, salida (y stderr) estándar:
Algunas órdenes requieren un nomarchivo -si no lo tienen- leen de la entrada estándar (teclado): Ej. cat
Otras usan sólo la entrada estándar: Ej. mail user113
De otras su salida estándar es la pantalla.Ej.: who cat arch1
Cuando algo sale mal (o se añadendatos extras) algunas órdenes indican esto en la stderr (pantalla).
Pero eso se puede cambiar!
stdin <: mail user113 < arch1
cut -d: -f1 < /etc/passwd | sort
stdout >: who > arch2 cat arch1.txt > /dev/null time ls > /dev/null
> arch2 (si existe zerea arch2 pero respeta sus permisos)
>>: ls >> archqueseamplia
stderr 2>: ls estearchnoexiste 2> arch3
2>>: ls estearchnoexiste 2> archqueseamplia
stdout y stderr >&: cat datos.txt >& arch4
>>&
|&: combina stderr y stdout ls equis |& sort > arch1
Combinaciones complejas: orden < envezdestdin > envezdestdout 2> archerrores
cat < archacopiar > archcopiado 2> archerrores
cat < /dev/null > arch2
sort < sinorden.txt > ordenado.txt
( orden > archsalida ) >& archerrores
redireccion conEOD <<: cat <<FinMsg (puede usarse en scripts)
p.43 de UNIX-a-Base-de-Ejemplos.pdf
compresion: gzip arch1 arch1.gz
history $HISTFILE
Metacaracteres de citación:
\ evita leer el sgte metacaracter
" evita leer cadena de metacaracteres (excepto !eventhistory, $var, `cmd` que se sustituyenporsusvalores
' evita considerar ordenes
´ se interpreta como orden (substitucion de ordenes)
arreglos:
matriz=(uno dos tres)
echo $matriz $matriz[2] ${matriz[2]}
variables con tipo (declare):
declare -i var1=5; declare -i var2=4; declare -i resul=$var1*$var2; echo $resul
Expresiones aritméticas: expansión y let y expr y bc:
echo "$(( 365 - $(date +%j) )) hast fin de año"
$((var+=2)) añade dos a la var $[3+4]
vale usar: <, >, <= ,>= ,== ,!= !, &&, ||
let a=4 *3; let x=" (9*5) / 7 "
expr (es un evaluador de expresiones no solo aritméticas)
bc (es una calculadora básica)
z=`expr $z + 3
echo "3 + 4"|bc
sentenciasOinstrucciones: if test while until for(incluir select)
mejor adduser que useradd pues es un comando de bajo nivel
ls/home
chown, chgrp sobre archivos
p.80 4.3:
---------
ps -la kill
usar top, vmstat, free, uptime, w
cat /proc/cpuinfo # informació n sobre el procesador
cat /proc/devices # sobre los dispositivos
cat /proc/interrupts
cat /proc/ioports # puertos de entrada/salida de dispositivos
alias
.doc + personalizar prompt
como se excribe la primeralinea de scripts whereis bash(!)
sin permisos a script1.sh hacer: source script1.sh bash script1.sh
variables $var es una simplificacion de ${var} que es p/strings una simplificacion de ${var:OFFSET:LENGTH} y quizas de ${var%er} ${var%%er} ${var#er} ${var##er}
MYVAR=foodforthought.jpg
echo ${MYVAR##*fo} ${MYVAR#*fo}
MYFOO="chickensoup.tar.gz"
echo ${MYFOO%%.*} ${MYFOO%.*}
Expansion indirecta: let ar=2; eval echo ${!ar} (agarra $2 -el segundo parametro enviado-)
Con ! se usa el VALOR de lo que sigue COMO NOMBRE DE VARIABLE que luego se expande con { }
echo ${!P*} (agarra PATH, PS1 etc) noeslomismoque echo $P*
paso de argumentos
variables de entorno: $# $* $@ $0 $1 $2 ... $9 ${10}
IFS=":"