Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Primeraaproximación LInux

Descargar como ppt, pdf o txt
Descargar como ppt, pdf o txt
Está en la página 1de 83

Primera aproximación al

concepto de software libre


•A la hora de publicar su trabajo los programadores pueden elegir entre
comunicar el código fuente o mantenerlo en secreto. Además pueden elegir
entre una multitud de licencias para regular su uso, copia, distribución,
modificación, etc. Son las condiciones de estas licencias las que determinan si
un programa es software libre o no.
•Las licencias libres permiten que el software pueda ser usado, copiado,
estudiado, modificado y distribuido sin necesidad de autorización y sin
restricción alguna.
•La licencia libre por excelencia es la Licencia Pública General (GPL) http://
web.gnu.org/philosophy/free-sw.es.html
•El precio no es lo que determina si un software es o no libre. Software libre no
quiere decir Software gratuito. Aunque la mayoría del software libre es gratuito
existe software libre comercial que requiere un pago por su obtención.
•Por otra parte existe software no libre que es gratuito como es el caso del
freeware, el shareware o las versiones de demostración de software
propietario que se distribuye en las revistas o en la web, generalmente a
cambio de facilitar nuestros datos personales.
Breve historia de
GNU/Linux
• Linux es un sistema operativo gratuito y de libre distribución
inspirado en el sistema Unix, escrito por Linus Torvalds con
la ayuda de miles de programadores en Internet.
• Unix es un sistema operativo desarrollado en 1970, una de
cuyas mayores ventajas es que es fácilmente portable a
diferentes tipos de ordenadores, por lo que existen versiones
de Unix para casi todos los tipos de ordenadores, desde PC y
Mac hasta estaciones de trabajo y superordenadores.
• Richard Matthew Stallman (http://www.stallman.org/) en 1984
decidió iniciar el proyecto de crear un sistema operativo similar
a UNIX™, pero con una licencia que permitiese el acceso al
código fuente, además de la libre distribución y copia; llamó al
proyecto GNU (http://www.gnu.org), acrónimo recursivo que
significa "GNU is Not Unix", y cuyo emblema sería un ñú. Para
proteger al nuevo sistema se creó la licencia GNU/GPL (Licencia
Pública General GNU) y el copyleft (opuesto al copyright), que
garantiza la libertad de uso, copia y modificación, y obliga a
distribuir el código fuente junto con los binarios.
•EN 1990 el sistema GNU estaba casi completo pero faltaba un
componente esencial: el núcleo (kernel).

•Linus Torvalds y el kernel Linux


•En 1991 Linus Torvalds un estudiante finlandés de 21 años
desarrolló un núcleo compatible con Unix y lo denominó Linux. En
enero de 1992 se publicó la versión 0.02, y poco tiempo después, en
marzo de 1994 se liberó la versión 1.0.0, ya lista para sistemas en
producción. A partir de esta versión al combinar Linux con el sistema
no completo GNU resultó un sistema operativo libre completo cuyo
nombre correcto es GNU/Linux, y no simplemente Linux.

•En 1996 vería la luz el kernel 2.0.0 ya asociado con la mascota del
pingüino (llamada Tux). En la actualidad el kernel Linux
(http://www.linux.org) va por la versión 2.6.17, está disponible para
un gran variedad de arquitecturas y goza de un gran prestigio en la
comunidad informática como fiable, sólido y seguro.
El número de versión asociado al núcleo tiene un sentido muy
particular ya que está ligado a su desarrollo. En cada momento
tenemos siempre dos versiones del núcleo: versión de producción y
versión de desarrollo.
La versión de producción es la versión estable en el momento. Esta
versión es la que se debería utilizar para un uso normal del sistema.
Por su parte la versión de desarrollo es experimental y es la que
usan los programadores para crear y verificar nuevas características.
Estos núcleos sueles ser inestables y no deberían ser usadas en
equipos en producción.

Las versiones del kernel se numeran con 3 cifras de la siguiente


manera: XX.YY.ZZ, donde:

XX: indica la serie principal del kernel. Hasta el momento sólo


existe la serie 2. Este número cambia cuando la manera de
funcionamiento del kernel ha sufrido una modificación importante.

YY: Indica si la versión es de desarrollo o producción. Un


número impar indica que es de desarrollo, uno par, que es de
producción.

ZZ: Indica revisiones menores dentro de una versión en las


que se han corregido fallos de programación
Distribuciones GNU/Linux
Para que un sistema operativo funcione sin problemas y sea fácil
de instalar es necesario un trabajo de coordinación de sus
distintos componentes: kernel, librerías, aplicaciones de usuario,
entorno gráfico, etc. Este trabajo de configuración y
mantenimiento se realiza en los sistemas operativos libres bajo
el soporte de las llamadas distribuciones.

Una distribución es por tanto un sistema GNU/Linux


que integra un kernel, un conjunto de aplicaciones de
sistema y una colección de programas de usuario listo
para instalar.
Actualmente existen más de 300 distribuciones de GNU/Linux
Distribuciones
http://www.debian.org. Debian ofrece también la base
tecnológica y la inspiración filosófica para otras
distribuciones que derivan de ella (http://
www.debian.org/misc/children-distros) como Knoppix
(http://www.knoppix.org/) o Ubuntu
(http://www.ubuntu.com/) de gran popularidad y
facilidad de uso.

El 8 de julio de 2004 el sudafricano Mark Shuttleworth


y la empresa Canonical Ltd. anunciaron la creación de
la distribución Ubuntu (http://www.ubuntu.com/). A lo
largo de 2005 esta distribución, basada en Debian y en
el escritorio GNOME, ha ido sumando usuarios hasta
Ubuntu convertirse a día de hoy en una de las mejores y más
populares versiones de GNU/Linux. Software

https://help.ubuntu.com/ubuntu/about-ubuntu/C/about-buntu.html
• Distribuciones basadas en Ubuntu
Ubuntu ha servido de base para el desarrollo de otras distribuciones
algunas de las cuales han pasado a ser variantes oficiales.
Variantes oficiales
• Kubuntu http://www.kubuntu.org/, lo mismo que
Ubuntu pero con el escritorio KDE en lugar de GNOME
• Xubuntu http://www.xubuntu.org/, lo mismo que Ubuntu
pero con el entorno de escritorio XFce, más ligero que KDE
o GNOME y que permite por tanto su utilización en máquinas con
pocos recursos.
• ● Edubuntu http://www.edubuntu.org/, es una
distribución pensada para el entorno escolar y se basa en
la tecnología de clientes ligeros que permite reutilizar
ordenadores antiguos: un único servidor central al que se
conectan varios clientes.

•.
• RedHat (http://www.redhat.com) creada por la
compañía RedHat. Ofreció soporte hasta la versión 9
momento en que decidió concentrar sus esfuerzos en el desarrollo
de la versión corporativa RedHat Enterprise Linux y delegó la
versión común a Fedora Core, un proyecto abierto e independiente
de Red Hat. Actualmente RedHat Enterprise Linux es una
distribución comercial que incluye partes no libres.
• Fedora Core http://fedora.redhat.com/, es una
distribución enteramente libre desarrollada por la
comunidad de RedHat. Fedora es generalista y está enfocada a
una amplia variedad de usuarios. Su principal patrocinador es la
compañía Red Hat.
• Mandriva Linux, http://www.mandriva.com/ antes
conocida como Mandrake y rebautizada tras una fusión
empresarial. Originalmente era una derivación francesa de
RedHat.
Slackware http://www.slackware.com/ fue
creada en 1993 y es la más veterana de las
distribuciones GNu/Linux. Su meta ha sido siempre la
simplicidad y la estabilidad. La interface del programa de
instalación es de texto, y necesita un mayor conocimiento
de Linux que la mayoría de las otras distribuciones.

Suse http://www.novell.com/linux/. Es una de


las principales distribuciones GNU/Linux existentes
a nivel mundial, nacida en Alemania. Entre las principales
virtudes de esta distribución se encuentra el que sea una
de las más sencillas de instalar y administrar, ya que
cuenta con varios asistentes gráficos para completar
diversas tareas. Actualmente es propiedad de Novell que
ha anunciado la intención de crear la comunidad abierta
OpenSuse que complementaría los desarrollos de SuSe
Linux Enterprise, en una estrategia similar a la seguida
por Red Hat con Fedora.
Actividad 2
Como complemento a este capítulo le invitamos a
leer el artículo “15 mitos sobre GNU/Linux”:

http://www.mononeurona.org/index.php?idp=124

Donde se aclaran algunas confusiones, a


veces interesadas, sobre este sistema
operativo Software
• Linux es un sistema operativo
multitarea y multiusuario. Esto quiere
decir que es capaz de ejecutar varios
programas (o tareas) de forma
simultánea y albergar a varios usuarios
de forma simultánea.
• Por lo tanto, todos los usuarios de Linux
deben tener una cuenta de usuario en el
sistema que establezca los privilegios
del mismo. A su vez Linux organiza a
los usuarios en grupos de forma que se
puedan establecer privilegios a un
determinado grupo de trabajo, para el
acceso a determinados archivos o
servicios del sistema.
Iniciación a Linux
Existen tres formas de acceder a un sistema Linux:
• A través de una consola de texto, el usuario se
conecta directamente al ordenador que tiene
instalado Linux y accede mediante un sistema
no gráfico.
• Desde un gestor de sesiones gráfico (X Window),
el usuario se conecta directamente al ordenador
que tiene instalado Linux y accede al sistema
mediante un programa gráfico.
• Desde un ordenador remoto mediante telnet o
secure shell (ssh)
Entrada y salida del sistema
En cualquiera de los casos en la pantalla aparecerá (más o
menos) lo siguiente:
Login: (Se teclea el nombre del usuario)
Password: (Se teclea la contraseña, que no se ve en la
pantalla)
Por motivos de seguridad la contraseña debe cumplir ciertas
condiciones tales como:
• Contener al menos seis caracteres.
• Contener al menos un carácter numérico o especial y dos
alfabéticos.
• Ser diferente del nombre de login.
La primera vez que se accede al sistema la contraseña
empleada será la proporcionada por el administrador del
sistema. Existen diversas formas para terminar la sesión de
trabajo en Linux, dependiendo de si estamos en modo
gráfico o de texto.
• La primera vez que se accede al sistema la
contraseña empleada será la proporcionada por el
administrador del sistema. Existen diversas formas
para terminar la sesión de trabajo en Linux,
dependiendo de si estamos en modo gráfico o de
texto.
En modo texto:
• Presionar las teclas <ctrl> d
• Escribir el comando exit.
La salida de X Window depende del gestor de
ventanas que se esté ejecutando y se
explicará más adelante.
Por ejemplo, veremos algo similar a esto:
Ubuntu 6.06 LTS fuji tty2
fuji login:
En este texto se nos informa de la distribucion que se esta
ejecutando (Ubuntu 6.06 LTS), el nombre de la maquina (en
este caso fuji) y el numero de la consola (tty2).

• A continuación nos invita a escribir nuestro nombre de usuario,


tras lo cual nos pedira la contraseña correspondiente,
introduzcala y pulse Intro.
• Si tecleamos nuestro nombre de usuario y nuestra contraseña el
sistema nos reconocera como usuarios validos y nos dará acceso a
los recursos conforme a los privilegios que tengamos asignados,
proporcionándonos un interprete de comandos, también conocido
como shell.
• La shell es un programa que nos permite comunicarnos con
el sistema operativo traduciendo las ordenes introducidas por
el usuario a un lenguaje comprensible para la computadora. La
shell nos permitira entonces interactuar con el sistema
operativo.
Una vez que hemos ingresado en el sistema, se nos
ofrece el prompt del interprete de comandos para
indicarnos que se encuentra preparado para recibir
ordenes:
grimaldos@fuji:~$

• Este prompt es tambien personalizable. Por


defecto viene configurado para mostrar el nombre
del usuario registrado (en este caso grimaldos), el
nombre de la maquina (en este caso fuji), el
directorio en el que estamos situados (el simbolo ~
representa el directorio personal de trabajo, en
este caso /home/grimaldos/) y el caracter $
indica que se trata de un usuario normal del
sistema. Si el usuario registrado fuera el root el
simbolo seria #.
Una sesión Linux
• Acceder al sistema
• Identificarse correctamente ante el
sistema
• Introducir correctamente clave de
acceso
• Cambiar la clave de acceso
• Abandonar el sistema
• Ejecutar órdenes simples
• login: solicita in nombre de acceso al
sistema. El nombre introducido debe
ser reconocido por el sistema.
• passwd: solicita la contraseña asociada
al nombre de usuario. Orden que
permite cambiar la contraseña actual;
se exige introducir la clave antigua.
• $: prompt del sistema.
• exit: provoca la salida del sistema; si el
terminal permanece encendido se
muestra otra solicitud “login”.
• who: muestra en pantalla la relación
de usuarios conectados actualmente
con el terminal asociado y la fecha y
hora de conexión.
– Opción: who am i, muestra el nombre del
propio usuario y su terminal asociado.
• date: muestra la fecha y hora actual.
• cal: muestra el calendario en pantalla.
– Opción: cal mes año
cal año
• logname: muestra el nombre de usuario o
“login” con el que se ha accedido al sistema
• uname: muestra el nombre del sistema
operativo linux, y (con la opción –a) la
versión, release, el tipo de máquina…
• tty: muestra el controlador de terminal
asociado y su ruta de acceso.
• echo: muestra en pantalla el mensaje
especificado a continuación.
– Sintaxis: echo mensaje
• banner: muestra en pantalla con
caracteres ampliados al mensaje
especificado
– Sintaxis: banner mensaje
• clear: limpia la pantalla
• help: muestra información breve
sobre la orden especificada incluyendo
descripción, sintaxis y opciones.
– Sintaxis: help orden
• man: muestra información breve
sobre la orden especificada incluyendo
con observaciones, referencias a otras
órdenes…
Apagar / reiniciar
• Para apagar rápidamente el sistema:
halt
• Para apagar inmediatamente el sistema:
shutdown -h now
• Para apagar el sistema de forma temporizada:
shutdown -h 5 (en 5 minutos)
shutdown -h 14:35 (a las 14:35)
• Para reiniciar rápidamente el sistema:
reboot
• Para reiniciar inmediatamente el sistema:
shutdown -r now
El sistema de ficheros
En GNU/Linux todo son ficheros, esto es, cualquier elemento presente
en el sistema es tratado como un fichero desde nuestros archivos
personales hasta los dispositivos hardware como la impresora, el
ratón, los dispositivos de almacenamiento, etc. Estos ficheros están
organizados en lo que se conoce como un
Ssistema de ficheros.
En los sistemas Unix, y por lo tanto en Linux, existe una única raíz
llamada / de la que cuelgan todos los ficheros y directorios, y que
es independiente de qué dispositivos estén conectados al ordenador.
EEl camino o path de un fichero o directorio es la secuencia de
directorios que se ha de recorrer para acceder a un determinado
fichero separados por /.
● /bin, contiene los ejecutables (binarios) esenciales para el
sistema. Si observamos su contenido encontraremos los
comandos más básicos.
● /boot, aquí están los archivos usados por el sistema durante
el arranque, incluida la imagen del núcleo.
● /dev, almacena los controladores (device drivers o device
files) para el acceso a los dispositivos físicos del disco, como el
ratón, las tarjetas, el escáner, etc.
● /var, suele contener información variable, tanto generada
por el propio sistema como por los usuarios. Contiene algunos
subdirectorios interesantes:
● /var/lock, alberga los ficheros de bloqueo para indicar al
sistema que un determinado dispositivo es inaccesible cuando
está siendo usado por alguna aplicación.
● /var/log, es la bitácora del sistema, puesto que aquí se
almacenan los registros detallados de toda la actividad
desarrollada en el transcurso de una sesión de trabajo.
● /var/spool/, contiene información preparada para ser
transferida, por ejemplo, los trabajos de impresión o los
mensajes de correo.
● /lib, contiene las librerías usadas por diferentes aplicaciones,
evitando que cada programa incluya las suyas propias con la
consiguiente redundancia de ficheros.
● /etc, es el directorio destinado para almacenar todos los archivos
de configuración del sistema,
● /home, contiene el árbol de directorios propio de cada usuario del
sistema. Encontraremos un subdirectorio para cada usuario, lo que en el
entorno gráfico se llama Carpeta personal. Es una buena costumbre situar
este directorio en una partición independiente para salvaguardar los datos
en caso de catástrofe o para reinstalar completamente un sistema distinto
respetando el trabajo anterior.
● /sbin, aloja comandos esenciales de administración del sistema,
normalmente reservados al administrador.
● /usr, donde se almacenan las aplicaciones y recursos disponibles
para todos los usuarios del sistema. Destacaremos:
● /usr/bin, contiene la mayoría de programas y comandos a disposición
de los usuarios.
● /usr/share, suele contener datos compartidos independientes de la
máquina, como la documentación de los programas o colecciones de
imágenes para el escritorio.

/tmp, es un directorio temporal usado generalmente
por las aplicaciones para almacenar algunos
ficheros en tiempo de ejecución.
● /media Cuando montamos un CDRom, una memoria
usb o un disquete se crea aquí
automáticamente un subdirectorio
● /media/cdrom0 para la primera unidad de cdrom
● /media/usbdisk para la memoria usb
● /media/floppy para el disquete
El shell
Comandos y Argumentos
•La forma general de un comando de shell tiene la forma:

commando [-opciones] [argumentos]

Donde commando determina que operación realizará el


shell y debe ir en minúsculas, las opciones (precedidas
del signo -) y argumentos añaden preferencias. Muchas
veces el commando especifica el nombre de archivo de un
programa, el cual debe ser iniciado, comando externo.

•Los ejecutables se guardan en las carpetas /bin, /usr/bin


o /usr/local/bin. Las aplicaciones de administración de
sistema en /sbin o /usr/sbin.
• Para cada usuario nuevo se genera un
copia del shell en cada sesión.
• Cada usuario puede “lanzar” nuevos shel
o subshell con las órdenes sh (shell de
Bourne), ksh (shell de Korn), csh (shell
C)….Para salir del shell y regresar al
anterior se utiliza la orden exit.
• El shell genera un subshell para ejecución
de cada orden; tras completarse vuelve
al shell padre.
• Si se precede una orden por un punto
(seguido de un espacio) o entre llaves, no
se crea “shell hijo”
• Metacaracteres:
–? Sustituye a cualquier carácter (1 solo)
–* Sustituye cualquier carácter o grupo de
caracteres salvo separadores.
– [..] sustituye cualquier valor incluido entre
los corchetes:
• Ejemplos: a[123] representa: a1, a2, a3
• Admite rangos especificando los extremos
separados por un guión, los extremos deben de ser
un solo caracter:
– a[1-5] representa a1, a2, a3, a4, a5
– a[10-25] solo incluye el 1, 5 y los caracteres
entre 0 y 2, es decir: 0, 1, 2, 5
– Un signo ! Tras el corchete significa inversión:
» A[!12] agrupa los nombres que
empiecen por a y otro carácter distinto de
1 ó 2.
• Agrupamiento de órdenes:
– ord1;ord2;ord3
se ejecutan de manera sucesiva
– (ord1;ord2;ord3)
Igual que el anterior pero puede considerarse
como un conjunto en determinadas
situaciones.
ejemplo:
– (ord1;ord2;ord3)>archivo
redirige la salida de las tres órdenes al
archivo
– (ord1;ord2;ord3)&
ejecuta las tres órdenes en segundo plano
liberando el terminal para otras tareas.
• Eliminación de significados
especiales:
–\ inhibe la interpretación del siguiente
carácter (solo uno).
– ‘..’ comillas simples. Impide que el shell
interprete todo lo incluido entre las
comillas.
– “..” comillas dobles. Evita interpretación de
los caracteres salvo $, \,’’,’
(comillas simples y dobles)
– `..` acentos graves. Provoca la ejcución de
la orden incluida.
Sistema de archivos
● Linux distingue entre mayusculas y minusculas.
Prueba, prueba y pruEba son archivos distintos.
• Los archivos que empiezan por '.' son ocultos.
• Los archivos tienen asociados unos permisos:

Estos permisos se puede expresar como números octales. Por


ejemplo:
Listar archivos: ls
Cambiar de directorio: cd
Crear directorios: mkdir
Borrar ficheros/directorios: rm
Copiar ficheros: cp
Mover ficheros: mv
Mostrar ficheros: less, cat y more
cat nombreArchivo
• Características: muestra todo el
contenido del fichero en la salida
estándar.
more nombreArchivo
• Características: muestra todo el
contenido del fichero en la salida
estándar, filtrando la salida de forma
paginada.
Visualizar líneas de archivos:
tail y head
tail [-n|+n] nombreArchivo
• La orden tail permite visualizar el final de un
fichero; las –n últimas líneas o a partir de +n
líneas. Por defecto visualiza las 10 últimas
líneas.
• Ejemplo: lista las 10 últimas líneas del
fichero .profile.
$ tail .profile
• Si queremos listar las últimas 5 líneas:
$ tail -5 .profile
• y si queremos visualizar a partir de la línea 5:
$ tail +5 .profile
head [-n] nombreArchivo
• La orden head permite visualizar el
comianzo de un fichero; las -n primeras
líneas. Por defecto visualiza las 10
primeras líneas.
• Ejemplo: lista las 10 primeras líneas del
fichero .profile.
$ head .profile
• Si queremos listar las primeras 5 líneas:
$ head -5 .profile
Enlaces de archivos: ln
• Enlaces duros o hard links
Para dar un ejemplo, si se quisiera hacer un enlace del
archivo hola el comando es:
ln hola saludo
Si hora hacemos un listado mostrando los inodos
$ ls -il
total 2
14438 -r-------- 2 shrek user 64 Apr 29 14:04 hola
14438 -r-------- 2 shrek user 64 Apr 29 14:04 saludo

Como se ve el número de nombres que los archivos


tienen ahora es 2 dado que hemos creado otro
nombre que es un enlace al contenido que tenía el
archivo hola en el disco. Ambos archivos apuntan
al mismo sitio. Por esto, un archivo no se borra
hasta que se haya borrado el último de sus
nombres.
• Enlaces simbólicos
A diferencia con los enlaces duros, estos enlaces solo dan
otro nombre a un archivo pero no hacen un enlace al nivel
de inodo. Se puede hacer una comparación con los
"Accesos directos" de Windows. La orden que genera un
enlace simbólico es ln –s:

$ ln -s hola saludos
$ ls -il
total 2
14438 -r-------- 1 shrek user 64 Apr 29 14:04 hola
14446 lrwxrwxrwx 1 shrek user 4 May 7 08:33 saludos -> hola

Como se ve, el enlace nos muestra a que archivo esta apuntando.


Los bit de permisos aparecen todos encendidos dado que no son
usados. Los permisos que se utilizan son los del archivo al que se
esta apuntando. Si nos fijamos bien, en la primera posición de los
permisos veremos una letra l. Esto nos indica que es un enlace
simbólico. Otra particularidad es que se pueden crear enlaces
simbólicos de archivos que no existen; pero lo mismo no es cierto
para los enlaces duros. Con los enlaces simbólicos se puede saber
a que archivo están apuntando, no así con los duros. Los enlaces
simbólicos son ampliamente usados para las librerías compartidas.
Búsqueda de patrones en ficheros:
grep
grep [-opcion] expresión_regular [fichero1]
[fichero2] ..
Las opciones principales son:
c lo único que se hace es escribir el número de las líneas que
satisfacen la condición.
i no se distinguen mayúsculas y minúsculas.
l se escriben los nombres de los ficheros que contienen líneas
buscadas.
n cada línea es precedida por su número en el fichero.
s no se vuelcan los mensajes que indican que un fichero no se
puede abrir.
v se muestran sólo las líneas que no satisfacen el criterio de
selección.
Si el patrón a buscar tiene espacios en blancos debe de ir
entre dobles comillas.
El shell puede interpretar los siguientes meta
caracteres para que designan a nombres de archivos y
conjunto de ellos.
Redireccionamiento
El SHELL proporciona tres flujos estándares:
– stdin El flujo estándar de entrada
– stdout El flujo estándar de salida
– stderr El flujo estándar de errores
• Por defecto, los programas leen su entrada desde el
flujo stdin y escribe su salida al flujo stdout. Porque
ambos flujos son normalmente asociados a las consolas
(teclado y pantalla de consola respectivamente).
• El flujo stderr es asociado a la pantalla de la consola.
Aunque el SHELL asocia por defecto los tres flujos de entrada/salida con la
consola, se pueden especificar redirectores de entrada/salida que por
ejemplo asocie una entrada o una salida con un archivo.

> file Redirecciona el flujo de salida estándar al archivo especificado.

2> file Redirecciona el flujo de error estándar al archivo especificado.


> > file Redirecciona el flujo de salida estándar al archivo especificado,
añadiendo salida al archivo si el archivo existe.

2> > file Redirecciona el flujo de error estándar al archivo especificado,


añadiendo salida al archivo si el archivo existe.

&> file Redirecciona el flujo de salida y error estándar al archivo


especificado.

< file Redirecciona el flujo de entrada estándar al archivo especificado.

< < text Lee el flujo de entrada estándar hasta encontrar el patrón text,
en cuyo es interpreta como el final del flujo.

cmd1 | cmd2 Se toma la entrada estándar del cmd2 desde la salida


estándar de cmd1 (también conocido como canal de redirección)
Permisos de archivos, sus
dueños y grupos

Los permisos están divididos en tres tipos:


lectura, escritura y ejecución (rwx)
Estos permisos pueden estar fijados para tres clases de usuario: el
propietario del archivo, el grupo al que pertenece el archivo y para
todo el resto de los usuarios.
El permiso de lectura permite a un usuario leer el contenido del
archivo o en el caso de que el archivo sea un directorio, la posibilidad
de ver el contenido del mismo. El permiso de escritura permite al
usuario modificar y escribir el archivo. En el caso de un directorio
permite la crear nuevos archivos en él o borrar archivos existentes.
El permiso de ejecución permite al usuario ejecutar el archivo, si
tiene algo para ejecutarse. Para los directorios permite al usuario
cambiarse a él con el comando cd.
Como se interpretan los permisos
Para poder interpretar los permisos de archivos nada mejor que
utilizar el comando ls -la

Como se puede apreciar en este listado, también están el directorio actual,


representado por un punto . y el directorio padre por dos puntos ,..;que
también poseen permisos y atributos que son mostrados.
Cambiando permisos
• Utilización del comando chmod de forma
Simbólica.
– se emplea utilizando símbolos como a,u,g,o
que representan a todos (a "all"), al usuario
(u), al grupo (g) y a todos los demás (o).
– Existen símbolos para agregar (+) quitar (-) o
dejar invariantes los permisos (=). Además
tendrán que usarse los símbolos característicos
para cada tipo de permiso. Para el permiso de
lectura (r), para el permiso de escritura (w) y
para el permiso de ejecución (x). Solo el dueño
del archivo puede cambiarlo con él; excepción
del root que también lo puede hacer.
• Utilización del comando chmod de forma Octal.
•Quitar a todos los grupos y usuarios los permisos de lectura
chmod a-r lista

•Quitar al grupo y resto de usuarios el permiso de escritura


chmod og-w lista

•Cambia los permisos del archivo prueba de tu home para que pueda ser
leido, escrito y ejecutado por todos los usuarios:
chmod 777 $HOME/prueba
Cambiando grupos y usuarios
• Para esto se usa el comando chown y su
sintaxis es similar a la de chmod pero con
la variante que se dan los nombres del
usuario y del grupo.

NOTA: el comando id muestra el UID (UserId) y el GID (GroupId)


Ejemplos:

• Cambia el propietario del archivo prueba de tu


home para que el nuevo dueño sea nobody:
chown nobody $HOME/prueba

• Cambia los permisos del directorio dprueba de


tu home y de su contenido para que el nuevo
dueno sea nobody y el grupo nogroup:
chown -R nobody:nogroup HOME/dprueba

En el caso que solo se quiera cambiar el grupo y no el usuario, se tendrá que poner un
punto delante del nombre del grupo, omitiendo poner el nombre del algún usuario.
O si se quiere, se podrá poner el nombre de usuario que estaba anteriormente.
EJERCICIO
• Crear un fichero llamado borrar:
$ touch borrar
• Verificar los permisos y los propietarios y grupo.
$ ls -la bo*
• Asignar los permisos necesarios para que podamos borrar el
fichero si lo cambiamos de propietario.
$ chmod g+w borrar
• Pasar la propiedad del fichero borrar a root:
$ chown root borrar
• Verificar que se ha realizado los cambios:
$ ls -la bo*
• Intentar ponerle al fichero los todos los permisos a todo el
mundo:
$ chmod a+wrx borrar
• Borrar el fichero: $ rm borrar
umask
• Esta es la abreviatura de user file-creation mode mask o
máscara del modo de creación de archivos de usuario y es un
número octal de cuatro dígitos que se utilizan para fijar los
permisos de los archivos recién creados.
• Esto puede ocasionar confusión pero en realidad es una
utilidad que permite el uso del sistema por múltiples usuarios
sin que peligre la privacidad.
• En la mayoría de los Unix los archivos que son creados por el
usuario, poseen permisos 0666 que dan permiso de lectura y
escritura a cualquier usuario.
• En relación con los programas, estos se crean con 0777
donde cualquier usuario puede leer, escribir y ejecutar el
programa.
• Normalmente el administrador del sistema aplica una
máscara al usuario en el archivo .bash_profile y esta es
usada para la creación de archivos haciendo una operación
simple "AND" bit por bit con el complemento del valor umask
bit por bit.
• La función umask esta integrada al intérprete de comandos.
Para ejemplificar el proceso tomemos un archivo creado por
el usuario.
Accesos del Accesos del Accesos de
umask usuario grupo los otros

0000 Todos Todos Todos

0002 Todos Todos Lectura y


ejecución
0007 Todos Todos Ninguno

0022 Todos Lectura y Lectura y


ejecución ejecución
0027 Todos Lectura y Ninguno
ejecución
0077 Todos Ninguno Ninguno
Sintaxis: umask mascara_padron
• Octal:
rw- r-- - w- permisos deseadas para los
nuevos archivos
--x -wx r-x permisos a suprimir
001011101 permisos a suprimir en
binario
1 3 5 mascara en octal

[alumno@maquina alumno]$ umask 135


• Símbólica:

umask quién operador permisos_acceso

• Quién: u , g, o y a
• Operador: +, - ó =
• permisos_acceso: r, w y x
• Ejemplos:
$ umask u=rwx,g=r,o=r
$ umask a-rwx,u+rw,g+r
Los bits SUID, SGID y sticky
• Habitualmente, los permisos de los archivos en Unix se corresponden
con un número en octal que varía entre 000 y 777; sin embargo, existen
unos permisos especiales que hacen variar ese número entre 0000 y
7777: se trata de los bits de permanencia (1000), SGID (2000) y
SUID (4000).
El bit de SUID o setuid se activa sobre un fichero añadiéndole 4000 a la
representación octal de los permisos del archivo y otorgándole además
permiso de ejecución al propietario del mismo; al hacer esto, en lugar de
la x en la primera terna de los permisos, aparecerá una s o una S si no
hemos otorgado el permiso de ejecución correspondiente (en este caso
el bit no tiene efecto):
anita:~# chmod 4777 /tmp/file1
anita:~# chmod 4444 /tmp/file2
anita:~# ls -l /tmp/file1

-rwsrwxrwx 1 root other 0 Feb 9 17:51 /tmp/file1*

anita:~# ls -l /tmp/file2

-r-Sr--r-- 1 root other 0 Feb 9 17:51 /tmp/file2*


Sticky bit o Permanencia
• En los antiguos sistemas Unix, la memoria
era algo esencial y escasa dado su costo.
Para poder aprovechar más ésta, se
empleo una tecnología que mantenía parte
de programas esenciales en el área swap
de memoria para que pudieran ser usados
más rápidamente.
• Los archivos así marcados mediante el
Sticky Bit o Permnencia eran los que valía
la pena mantener ya que esas partes del
programa que se guardaban en memoria
también podían ser usadas por otros.
FIND
Sintaxis:

find rutas búsqueda-expresiones acción-expresiones

• El comando find busca en estructuras


completas de directorio empezando con
las rutas y ejecuta acciones especificadas
por la acción-expresión en todos los
archivos con atributos igualando el
busqueda-expresiones.
• Por ejemplo:

$ find . -name '*.config' -print


./prog1.config
./stat/mean.config
./stat/var.config
./math/matrix.config

• Busca la estructura completa de directorio empezando


por el directorio actual (especificado en este caso por
un punto, .) por archivos con nombres que terminen en
.config e imprime el nombre de cada archivo
encontrado. En este ejemplo, -name '*.config' es una
expresión de búsqueda (búsqueda-expresiones) y –
print es una accion-expresión.
• Cualquier número de expresiones de búsqueda y accion
puede ser usada con un solo comando find.
Expresiones de búsqueda
Metacaracteres Soportados
El comando find soporta varios metacaracteres o comodines cuando
busca con el criterio de nombre.
(e.j. usando opción -name 'patrón' búsqueda-expresión).
Expresiones de Acción
Operadores
Expresiones de Búsqueda pueden ser combinadas para crear expresiones
compuestas usando operadores. Los operadores nos permiten efectuar
búsquedas más elaboradas o complejas. Se listan en la siguiente tabla en el
orden que ellas son evaluadas.
Expresiones Avanzadas
Estas expresiones son útiles para usuarios
avanzados o administradores de sistemas.
Ejemplos
• Buscar en todo el directorio home
incluyendo todos los subdirectorios por
un archivo de nombre perdido.txt y
imprime la ruta a perdido.txt en la
pantalla.
$ find ~ -name 'perdido.txt' -print
Note que la tilde (~) especifica su directorio
home.
• Busque todos los archivos empezando
desde el directorio actual que su
nombre empieza con carta y tiene un
carácter más.
$ find . -name 'carta?' -print
Esta sentencia encontraría archivos
nombrados carta1, cartad y cartas, pero
no a carta o carta12.
Note que el punto (.) especifica el
directorio actual.
• Busque todos los archivos empezando con el
directorio actual que su nombre empieza con
una letra mayúscula y termina con un número.
$ find . -name '[A-Z]*[0-9]' –print

• Busque todos los archivos empezando con el


directorio /usr/local/install de nombre
R(r)eadme
$find /usr/local/install -name '[R,r]eadme' -print
Esto también se puede lograr con la expresión
compuesta.
$find /usr/local/install \( -name 'readme' -o -name 'Readme' \)
-print
• Busque todos los archivos empezando
con el directorio actual que su nombre no
termine en .bak.
$ find . -name '*[!.bak]' -print
También se puede lograr con el operador
lógico NOT.

• Busque todos los archivos empezando


desde el directorio home de nombre
Espec*ial.
$ find ~ -name 'Espec\*ial' -print
Note que el backslash (\) le dice a find que
no trate a el asterisco (*) como un meta
carácter.
• Busque los archivos empezando desde el
directorio home creados en los últimos
cinco días.
$ find ~ -ctime -5 –print
• Cree listado de los directorios empezando
por /home y guárdelo al archivo lista-
directorio.
$find ~ -type d -print > lista-directorio
• Busque todos los archivos empezando en
el directorio home que su nombre
termine en .config que fue modificado
hace un día.
$find ~ -name '*.config' -mtime -1
-print
• Elimine todos los archivos y
subdirectorios empezando con el
directorio dir-viejo. Haga que el usuario
le confirme antes de ejecutar el comando
de remover rm.
$ find ~ -name dir-viejo -depth -ok
rm \{\} \;
• La opción -depth aquí es requerida. De
otra forma, el find hiciera el intento de
remover los directorios antes de vaciarlos
y el comando rm fallará.
• Busque todos los archivos empezando con su
directorio home con permisos de lectura/read y
escritura/write para el usuario y permisos de
lectura/read solamente para el grupo y los
otros.
$ find ~ -perm 644 –print

En este ejemplo los permisos los especificamos


usando los números octales.
• El modo simbólico para especificar la lista de
los permisos.
$ find ~ -perm u=rw,go=r -print
• Busque todos los archivos en mi directorio
home donde el grupo o los otros tienen
permisos de escritura y use el comando chmod
para remover ese permiso.
$ find ~ \(-perm -020 -o -perm -002 \)
-exec chmod go-w \{\} \;

$ find ~ \( -perm -g=w -o -perm -o=w \)


-exec chmod go-w \{\} \;

El primer ejemplo usamos números octales y el


segundo usa modo simbólico de especificar la
lista de permisos a el comando find.
Ejemplos Avanzados
• Busque todos los archivos empezando
en el directorio /usr/home que no
pertenecen a un grupo listado en el
archivo /etc/groups.
# find /usr/home -nogroup -print
• Note que el símbolo de número (#) se
usa para denotar el prompt de Unix
porque se necesita ejecutar desde la
cuenta del superusuario.
• Busque todos los archivos empezando
en el directorio /usr/home que le
pertenecen al usuario miguel y
cámbiele el dueño al archivo a root
usando el comando chown.

#find /usr/home -user miguel -exec


chown root \{\} \;
Locate
• El comando locate es muy parecido al comando
find, y sirve también para realizar búsquedas
de ficheros. La diferencia con respecto a find es
que la búsqueda no se hace en el disco duro del
sistema, sino en una base de datos indexada, lo
que aumenta significativamente la velocidad de
respuesta. Casi todas las distribuciones
GNU/Linux ejecutan a determinada hora un
comando que permite actualizar esta base de
datos. También podemos actualizar
manualmente la base de datos con el comando
updatedb.
Sintaxis:
locate <fichero>

También podría gustarte