domingo, 31 de marzo de 2013

Permisos de archivos

Los permisos de acceso son las protecciones que se le pueden asignar a un archivo. Estas protecciones pueden proteger los archivos de cualquier usuario de que sean leídos a escritos por gente no autorizada, incluso se pueden proteger los archivos de que sean alterados por su mismo propietario (por ejemplo para evitar que los borre accidentalmente).

Hay tres tipos de usuarios que pueden acceder a un archivo:

u (user, owner) el dueño del archivo.
g (group) el grupo al que pertenece el dueño del archivo.
o (other) todos los demás.

Un usuario puede intentar acceder a un archivo sencillo de tres maneras intentando leerlo, escribir en el o ejecutarlo, estos tres accesos son:

r (read) lectura; examinar, copiar datos de un archivo.
w (write) escritura; modificar, borrar un archivo.
x (excute) ejecutar; usar el archivo como un comando.

El dueño de un archivo controla que usuarios tienen permiso de acceso y de que manera pueden hacerlo: el comando ls -l  despliega los permisos de acceso asociados a un archivo, el primer campo de 10 caracteres describe los permisos asociados a ese archivo, un campo típico se ilustra a continuación.

rwx r-x r-w

De las nueve columnas, las tres primeras representan los derechos del usuario, los siguientes tres son los derechos del grupo, y los últimos tres son los derechos de todos los demás. Una letra en el campo significa que el permiso no esta concedido.

Ciclo for


Un ciclo es la repetición de un conjunto de instrucciones. Dicho ciclo culmina cuando se cumple una condición de término. El grupo de instrucciones se pueden ejecutar un número conocido o desconocido de veces.



Ciclo For: En este ciclo el número de veces que se repite el conjunto de instrucciones es conocido, y el control de la repetición es asumido por un conjunto de variables de control. El esquema siguiente representa esta estructura en diagrama de flujo y pseudocódigo. Las variables de control se inicializan en un determinado valor, el cual aumenta o disminuye de acuerdo un salto definido, hasta llegar a un valor final.

Ejemplo

#!/bin/sh
clear
echo "Digite un numero"
read num
for i in $(seq 1 12); do
echo $num"x"$i"="$(($num*$i))
done

la salida que tendrá será la siguiente:

sh tabla


Digíte un número: 5

5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
5 x 10 = 50
5 x 11 = 55
5 x 12 = 60

sábado, 30 de marzo de 2013

Sentencia If

La sentencia if se utiliza para comprobar una condición y si la condición es verdadera entonces procesaremos un bloque de sentencias (llamado bloque if), u otro bloque de sentencias alternativas (llamado bloque else). La cláusula else es opcional.

Por ejemplo:

#!/bin/sh
read < Expresión a leer>
if [ Expresión a evaluar ]; then
echo "Lo que haya que hacer si la expresión evaluada devuelve Verdadero"
fi

Esta forma la utilizamos cuando tenemos dos condiciones a realizar, si una es Verdadera y la otra si es Falsa

ejemplo:

#!/bin/bash
read -p "Ingresa tu edad: " edad
if [ $edad -ge 18 ]; then
echo "es mayor de edad"
else
echo "es menor de edad"
fi

Esta forma la utilizamos cuando tenemos dos preguntas a evaluar

ejemplo:


#!/bin/sh
read -p "Ingrese un numero: " i
if [ $i -eq 100 ]; then
echo $i "es igual que 100"
elif [ $i -gt 100 ]; then
echo $i "es mayor que 100"
else
echo $i "es nemor que 100"
fi


Clik aquí para descargar programas con el if


viernes, 29 de marzo de 2013

Programa que imprime una fecha en programación Shell


#!/bin/bash
clear
read -p "introduce el día " dia
read -p "introduce el mes " mes
read -p "introduce el año " ano
bisierto=$(($ano%4))
if [ $mes -gt 12 -o $ano -lt 0 ]; then
echo "Error la fecha no es correcta"
elif [ $dia -gt 31 -o $dia -lt 1 ]; then
echo "Error de día"
elif [ $mes -eq 1 ]; then
echo $dia" de Enero de "$ano
elif [ $mes -eq 3 ]; then
echo $dia" de Marzo de "$ano
elif [ $mes -eq 5 ]; then
echo $dia" de Mayo de "$ano
elif [ $mes -eq 7 ]; then
echo $dia" de Julio de "$ano
elif [ $mes -eq 8 ]; then
echo $dia" de Agosto de "$ano
elif [ $mes -eq 10 ]; then
echo $dia" de Octubre de "$ano
elif [ $mes -eq 12 ]; then
echo $dia" de Diciembre de "$ano
elif [ $dia -gt 30 -o $dia -lt 1 ]; then
echo "Error de día"
elif [ $mes -eq 4 ]; then
echo $dia" de Abril de "$ano
elif [ $mes -eq 6 ]; then
echo $dia" de Junio de "$ano
elif [ $mes -eq 9 ]; then
echo $dia" de Septiembre de "$ano
elif [ $mes -eq 11 ]; then
echo $dia" de Noviembre de "$ano
elif [ $dia -gt 29 -o $dia -lt 1 -o $bisierto -eq 0 ]; then
echo $dia" de Febrero de "$ano
elif [ $mes -eq 2 ]; then
echo "Erro de día"
elif [ $dia -gt 28 -o $dia -lt 1 ]; then
echo "Error de día"
elif [ $mes -eq 2 ]; then
echo $dia" de Febrero de "$ano
fi

jueves, 28 de marzo de 2013

Comandos de Linux


Comandos internos de Bash
Un comando interno de bash es un comando que bash implementa y que ejecuta sin llamar a comandos externos. Por ejemplo, echo es un comando interno de bash y cuando se llama desde un script no se ejecuta el fichero /bin/echo.
Esta es una lista de algunos de los comandos internos más utilizados:
echo
Envía una cadena a la salida estándar, normalmente la consola o una tubería.
read
Lee una cadena de la entrada estándar y la asigna a una variable:
echo -n "Introduzca un valor para var1: "
read var1
echo "var1 = $var1"
cd
Cambia de directorio
pwd
Devuelve el nombre del directorio actual, equivale a leer el valor de la variable $PWD.
pushd popd dirs
pushd apila un directorio en la pila de directorios. popd lo desapila y cambia a ese directorio. dirs muestra el contenido de la pila. Estos comandos son muy útiles cuando un script tiene que navegar por un arbol de directorios.
let
Realiza operaciones aritméticas:
let a=$b+7
export
Hace que el valor de una variable esté disponible para todos los procesos hijos de la shell.
. source
Estos dos comandos hacen que la shell cargue otro fichero. Es equivalente a #include en C/C++.
exit
Finaliza la ejecución del script, recibe como argumento un entero que será el valor de retorno del script.
ps
Ofrece un listado de los procesos que hay corriendo en la máquina, con diversa información sobre los mismos.
fg
Devuelve un proceso que estaba ejecutándose en segundo plano al primer plano.
wait
Detiene la ejecución hasta que los procesos que hay en segundo plano terminan.
kill
Envía una señal a un proceso, normalmente para terminarlo.

Comandos y filtros externos
En los scripts de shell es muy comúm hacer un uso extensivo de un conjunto de filtros y comandos externos que realizan tareas específicas con una enorme potencia. Muchos de estos comandos son filtros de texto que reciben un flujo de texto (normalmente por la entrada estándar) y lo modifican de alguna forma, devolviendo el flujo modificado a la salida estándar.
Comandos comunes
ls
Lista los contenidos de un directorio.
cat
Imprime los contenidos de un fichero en la salida estándar. Se suele combinar con redirecciones para filtrar los contenidos. tac (cat al revés) imprime los contenidos en orden inverso.
cp
Copia un fichero, grupo de ficheros o directorios.
mv
Mueve un fichero, ficheros o directorio a otra ruta.
rm
Elimina un fichero o ficheros.
mkdir
Crea un directorio.
rmdir
Elimina un directorio.
chmod
Cambia los permisos de un directorio.
ln
Crea un enlace a un fichero o directorio.
find
Busca ficheros según su nombre dentro de un arbol de directorios.
Filtros de texto
sort
Ordena el las línas de texto por orden ascendente o descendente.
uniq
Elimina las lineas repetidas.
expand
Convierte los tabs en espacios.
unexpand
Convierte los espacios en tabs.
cut
Extrae campos de las lineas.
colrm
Elimina columnas de las lineas.
paste
Junta los ficheros por columnas.
head
Imprime sólo las primeras líneas de la entrada.
tail
Imprime sólo las últimas líneas de la entrada.
grep
Imprime sólo las líneas que coincidan con cierto patrón, el patrón puede ser una simple cadena o una expresión regular.
Comandos que trabajan con ficheros
tar
Archiva grupos de ficheros en uno solo. Se suele combinar con gzip o bzip2 para crear paquetes comprimidos de varios ficheros.
gzip gunzip
Comprimen y descomprimen ficheros.
bzip2 bunzip2
Comprimen y descomprimen ficheros.
strings
Busca cadenas dentro de ficheros binarios.
basename
Devuelve el nombre de un fichero por sí sólo, sin información sobre su ruta.
dirname
Devuelve la ruta de un fichero, quitando su nombre y dejando solamente el directorio.
install
Copia un fichero, permitiendo especificar permisos y dueño del mismo. Útil para instalar software. 

martes, 19 de marzo de 2013

Breve historia de Linux

Historia de Linux
Linux, el núcleo o kernel de GNU/Linux, se desarrolló originalmente como un proyecto que Linus Torvalds emprendió en su tiempo libre.
Se inspiró en Minix, un sistema Unix básico desarrollado por Andy Tanenbaum. Las primeras discusiones acerca del núcleo Linux tuvieron lugar en el grupo de noticias de Usenet comp.os.minix.
Estas discusiones se centraban sobre todo en el desarrollo de un sistema pequeño y académico de Unix para usuarios de Minix que querí­an algo más. 
El primitivo desarrollo del núcleo Linux se centró en las caracterí­sticas multitarea del interfaz en modo protegido del 80386, escrito en código ensamblador.
Nunca se hizo un anuncio de la versión 0.01. Las fuentes del 0.01 ni siquiera eran ejecutables.
Contení­an sólo los rudimentos básicos de las fuentes del núcleo y daban por supuesto que se tení­a acceso a una máquina con Minix para compilarlas y experimentar con ellas. 
El 5 de octubre de 1991 Linus anunció la primera versión "oficial" del núcleo Linux, la versión 0.02.
En este punto, Linus podí­a ejecutar bash (el GNU Bourne Again Shell) y gcc (el compilador C GNU) pero no mucho más. De nuevo, estaba pensado como un sistema para hackers. 
La orientación principal fue el desarrollo del núcleo; el soporte de usuarios, la documentación y la distribución todaví­a no habí­an sido atendidos. Aún hoy, la comunidad parece que trata estas cosas como secundarias frente a la "programación de verdad" (el desarrollo del núcleo).

Versiones comerciales
Las versiones comerciales tiene licencia de AT&T y de BSD Actualmente existe en el mercado siguientes versiones: HP Vx - ATX - Solaris - SCO - comprado por Microsoft.

Arquitectura
1) El Kernel administra memoria, procesos y la entrada y salida.
2) El Shell es el intérprete de comandos.
3) Hardware: cada vez que se egrega hardware el kernel se recopila y es transparete.

Caráteristicas del sistema Unix
A) Multiusuario.
B) Multitarea.
C) Multiproceso.
D) Comunicación de datos.
E) Administrador de red nativo.
F) Biblioteca de rutina en C.

Requerimiento de Hardware
a. PC 386 o superior
b. RAM 8 MB

Sistema de Archivos
a. Estructura de árbol
b. estructura de Archivos y Directorios