lunes, 29 de junio de 2015

SISTEMA OPERATIVO GNU/LINUX


CONOCIENDO LINUX

Linux es un sistema operativo libre, basado en Unix.4 Es uno de los principales ejemplos de software libre y de código abierto.5 Linux está licenciado bajo la GPL v2 y está desarrollado por colaboradores de todo el mundo. 
El núcleo Linux fue concebido por el entonces estudiante de ciencias de la computación finlandés Linus Torvalds en 1991.6 Linux consiguió rápidamente desarrolladores y usuarios que adoptaron códigos de otros proyectos de software libre para usarlo con el nuevo sistema operativo.7 El núcleo Linux ha recibido contribuciones de miles de programadores de todo el mundo.8 Normalmente Linux se utiliza junto a un empaquetado de software, llamado distribución GNU/Linux y servidores.
ESTRUCTURA DEL KERNEL DE LINUX
Originalmente Linux era monolítico, es decir que todas las funcionalidades estaban incluidas en el código del núcleo y era necesario recompilarlo para soportar un nuevo dispositivo, etc.
Sin embargo, esta idea no encaja bien con la enorme diversidad de componentes hardware que existen hoy en día. Que todas las personas tengan los mismos componentes es raro, por esta razón Linux, como buen sistema operativo Unix pretende obtener todo el partido de la máquina en la que se está ejecutando.
Debido a todo esto, el diseño fue migrando paulatinamente a un modelo basado en módulos. Se procura así que el núcleo sea lo más ligero posible y cuando sea necesario añadir una nueva funcionalidad como soportar una nueva tarjeta de sonido, sólo haya que compilar el módulo y añadirlo al núcleo.
El Kernel está compuesto por cinco subsistemas.
1) Process Scheduler o Programador de Procesos
2) Memory Manager o Administrador de Memoria
3) Virtual File System o Sistema de Archivos Virtual
4) Network Interface o Interfaz de Red
5) Inter-Process Comunication o Comunicación Entre Procesos
Estos componentes son independientes entre sí.
1) Process Scheduler o Programador de Procesos

a) Permitirle a los procesos crear nuevas copias de sí mismos (forking)
b) Determinar qué proceso tendrá acceso a la CPU
c) Recibir interrupciones y desviarlas hacia el subsistema respectivo
d) Enviar mensajes a los procesos de usuario
e) Manejar el reloj de Hardware (Hardware Timer)
f) Liberar recursos cuando un programa los haya desocupado.
El Process Scheduler también soporta módulos cargados dinámicamente. Una de las funcionabilidades más importantes de esto último son el Virtual File System y Network Interface. También provee dos interfaces. Uno, provee una interface de
llamada a sistema limitada que los procesos pueden llamar. Dos, provee una interface para el resto del espacio del Kernel.
En tiempo de booteo, Linux posee sólo un proceso, init(), que a su vez realiza copias de sí mismo a través de llamadas fork(). Cuando un proceso termina, ejecuta la llamada a _exit().
Ademas posee llamados a señales a través de signal(). Esta llamada permite a un proceso asociar un manejador de funcion (function handler) con una señal en particular. Las señales pueden considerarse como una forma de IPC o intercomunicación de procesos.
Acerca del timer, Linux maneja un timer interno que se inicia cada 10 milisegundos. Esto permite que los procesos se reasignen (Scheduling) cada 10 ms. Esta unidad se llama “clock tick” que sirve para medir la cantidad de ticks que un proceso en particular puede continuar ejecutándose sin forzar su reasignación. Cada proceso se asigna con un identificador único, llamado Process ID o pid, que es asignado a la lista de procesos o tabla de procesos.
Finalmente, una estructura de modulos es usada para representar los modulos cargados en tiempo de ejecución. Esta estructura posee campos que son usados para implementar una lista de estructura de modulos.
2) Memory Manager o Administrador de Memoria

El Memory Manager o administrador de memoria permite lo siguiente:
a) Gran espacio de direcciones: Los programas pueden requerir más memoria que la que físicamente existe
b) Protección: La memoria asignada un proceso es privada para tal.
c) Mapas de Memoria: Se puede mapear un archivo dentro de un area de memoria virtual y acceder al archivo como si fuera memoria
d) Acceso Limpio a la Memoria Física: el MM asegura que los procesos puedan usar transparentemente todos los recursos de la máquina, asegurando además un rendimiento aceptable
e) Memoria Compartida: Permite que los procesos puedan compartir trozos de la memoria asignada. El Administrador de memoria posee dos interfaces : una
interfaz con llamada a sistema que es usada por los procesos de usuario (User Space) y una interface que es usada por los otros subsistemas (Kernel Space).Algunas de las llamadas de usuario incluyen malloc() y free(). Las llamadas de kernel incluyen kmalloc() y kfree(). Ya que Linux soporta múltiples arquitecturas, es necesario entonces que existan rutinas específicas para abstraer los detalles del uso del hardware en una sola interface.
El Memory Manager usa el administrador de memoria de hardware para mapear direcciones virtuales a direcciones físicas. Gracias a esto, los procesos no están conscientes de cuanta memoria física está asociada a una dirección virtual. Esto permite al MM poder mover trozos de memoria virtual dentro de la memoria física. Además, permite que dos procesos puedan compartir dos trozos de memoria física si las regiones de memoria virtual asignadas a ellas son mapeadas en la misma dirección física. Otro concepto importante es el Swapping o intercambio, que es intercambiar (swap) memoria ocupada por procesos en un archivo. Esto le permite al Kernel poder ejecutar mayor cantidad de procesos que usen mayor cantidad de memoria física existente. El MM posee un demonio, kswapd, para ejecutar la tarea de intercambiar zonas de memoria en archivos y viceversa. Este demonio chequea periódicamente si no existen direcciones físicas mapeadas recientemente. Estas direcciones son vaciadas de la memoria física, y además de esto, el MM minimiza la cantidad de actividad de disco necesaria para hacer este intercambio.
El administrador de memoria del hardware detecta cuando un proceso de usuario tiene acceso a una porción de memoria no mapeada en una dirección virtual y avisa al Kernel de esta falla. Existen dos alternativas para solucionar esto: a) o la página de memoria es volcada a un archivo y viceversa b) o el proceso está haciendo referencia a una zona de memoria no permitida Si el administrador de memoria detecta un acceso no permitido (a la memoria) notifica al proceso con una señal. Si el proceso no sabe cómo manejar esta señal, el proceso es finalizado.
3) Virtual File System o Sistema de Archivos Virtual

Un importante desarrollo tuvo lugar cuando se añadió el sistema de ficheros EXT, en aquel momento el sistema de ficheros real se separó del sistema operativo y servicios del sistema a favor de un interfaz conocido como el sistema de Ficheros Virtual, o VFS.
VFS permite a Linux soportar muchos, incluso muy diferentes, sistemas de ficheros y cada uno presentando un interfaz software común al VFS. Todos los
detalles del sistema de ficheros de Linux son traducidos mediante software de forma que todo el sistema de ficheros parece idéntico al resto del kernel de Linux y a los programas que se ejecutan en el sistema. La capa del sistema de Ficheros Virtual de Linux permite al usuario montar de forma transparente diferentes sistemas de ficheros al mismo tiempo.
El VFS de Linux mantiene una antememoria (cache) con información de cada sistema de ficheros montado y en uso, siempre se debe tener mucho cuidado al actualizar correctamente el sistema de ficheros ya que los datos contenidos en las antememorias se modifican cuando se crean, escriben y borran ficheros y directorios.
La antememoria o caché más importantes es el Buffer Cache, que está integrado entre cada sistema de ficheros y su dispositivo de bloque. Tal y como se accede a los bloques se ponen en el Buffer Cache y se almacenan en varias colas dependiendo de sus estados. El Buffer Cache no sólo mantiene buffers de datos, también ayuda a administrar el interfaz asíncrono con los controladores de dispositivos de bloque.
Como ventajas podemos citar la estructura de datos en memoria con los bloques más frecuentemente utilizados y las lecturas adelantadas.
Linux implementa el denominado Virtual File System Cache, (VFS Caché) para acelerar substancialmente el sistema de ficheros. El argumento "filename" es utilizado por el VFS para buscar en una estructura denominada Directory Entry Caché (dentry caché o dcache), donde se almacenan referencias a los directorios utilizados Una entrada del dcaché contiene un puntero a un inodo y solo residen en memoria, mientras que los inodos tienen existencia en el disco físico. El VFS implementa un buffer caché que controla los accesos a disco, realizando operaciones de lectura en avance (look-ahead) Existe caché de directorios, de inodos y de bloques de disco.
4) Network Interface o Interfaz de Red

El sistema de red de Linux permite la conectividad entre distintas máquinas de una red y un modelo de conexión via sockets.
Existen dos tipos de sockets, los BSD y los INET.
Linux posee dos protocolos de transporte con distintos tipos de modelo de comunicación y calidad de servicio. Están los mensajes no confiables, basados en el protocolo UDP y los mensajes confiables basados en TCP. Estos dos están
implementados sobre el protocolo de transporte y el protocolo IP. El protocolo IP está por encima de los drivers. A los drivers se les provee distintas formas de comunicación: SLIP (Serial Link IP), PLIP (Parallel Line IP) y Ethernet. Un protocolo de resolución de direcciones media entre el protocolo IP y los drivers de Ethernet. Su tarea es resolver direcciones IP lógicas y convertirlas en direcciones físicas ethernet (de capa 3 a capa 2).
Los servicios de red son usados por los otros subsistemas y por el usuario a traves de la interfaz de sockets, que son creados y manipulados a traves de socketcall(). Los datos son leidos y escritos a través de read() y write() como si fuera un descriptor de archivo.
El modelo BSD de sockets es presentado a los procesos de usuario. El modelo es orientado a la conexión, se permite hacer streaming (flujo) y se permiten buffers. La implementacion BSD está por sobre la INET. BSD maneja las tareas de forma similar al VFS (Virtual File System) y administra una estructura de datos general para las conexiones. Su propósito es la portabilidad a través de la abstracción de los detalles, a través de una simple interfaz. La interfaz BSD es usada por Unix y Windows.
El modelo INET administra los puntos finales de la comunicación para los protocolos TCP y UDP. La lectura/escritura de red comienza por leer o escribir en un socket. Esto invoca a una llamada de sistema que es manejada por el VFS (o sea, las llamadas a archivo o sockets es simétrica). Desde ahí, se determina que la llamada BSD sock_write() es la que implementa la llamada al filesystem. Esta rutina maneja detalles administrativos (permisos) y pasa el control a inet_write(), para después llamar a una funcion de transporte, como tcp_write().
Las rutinas de escritura de la capa de transporte son las responsables de fragmentar los datos entrantes en paquetes de transporte. Estas rutinas pasan el control a ip_build_header() que construye una cabecera IP para ser insertada en el paquete a enviar. Luego, tcp_build_header() es llamada para crear una cabecera TCP. Una vez hecho esto, se envian los datos directamente al driver de red.
5) Inter-Process Comunication o Comunicación Entre Procesos
El IPC es un mecanismo en el cual los procesos que se están ejecutando posean medios para compartir recursos, sincronizarse y compartir datos entre ellos. Linux implementa todas las formas de IPC a través de recursos compartidos, estructuras de datos de Kernel y colas de espera.
Estas formas de IPC son a través de
a) Señales b) Colas de Espera c) Bloqueos de Archivos d) Pipes y Named Pipes, que permiten una transferencia de datos bidireccional y orientada a la conexión entre dos procesos, explícitamente seteando los pipes o comunicándolos a través de named pipes en el sistema de archivos (N. del E.:piensen en ls -als | more como una forma de piping) e) Unix Domain Sockets, otro medio de transferencia, más usado en el modelo INET f) IPC de System V compuesta por: g) Semáforos h) Colas de Mensaje i) Memoria Compartida
Una señal es una notificación enviada a un proceso por el kernel o por otro proceso. Las señales se envían a través de send_sig(). El numero de señal se da como parámetro, como también el proceso destino. Los procesos pueden registrar sus propias señales, a través de la función signal(). Los bloqueos de archivo están soportados directamente por el kernel. Para bloquear un archivo, puede usarse open() simplemente.
Pipes (tuberías) pueden ser usadas con pipe(), para filesystems read() o write() y para named pipes open(). Para Unix Domain Sockets, toda la funcionabilidad está encapsulada en socketcall().
En IPC de System V, existe una interfaz común para los tres métodos, ipc().
Las colas de espera son solo listas con los procesos que esperan por un evento del kernel, como la finalización de una lectura de DMA. Un proceso puede entrar voluntariamente a una cola de espera con sleep_on() o interruptable_sleep_on() y despertar con wake_up() o wake_up_interruptable() (que remueve los procesos de esta cola).
Los bloqueos de archivos ocurren para prevenir que dos procesos puedan acceder al mismo archivo. Esta exclusión puede ser hecha al archivo completa o a una porción del archivo.
INTÉRPRETES DE COMANDOS PARA UNIX O LINUX
Los intérpretes de comandos es un archivo ejecutable (shell) que debe interpretar los comandos, transmitirlos al sistema y devolver el resultado.
Linux ofrece la posibilidad de usar varias shells:
sh (llamado "Bourne shell")
ksh ("Korn shell")
csh ("C Shell")
bash ("Bourne again shell")
Tcsh ("Tenex C shell") versión de C Shell para Linux con funcionalidades similares a bash.
zsh ("Zero shell"). pequeño intérprete similar al Bourne Shell.
Las dos shell más populares en Unix son el Bourne Shell (System V) y el Cshell (BSD Unix). En Linux es el Bourne Shell (bash) una variante del Bourne clásico
COMANDOS BÁSICOS DE LINUX
Referencia De Comandos Unix-Linux
La siguiente lista de comandos pretende ser de utilidad como referencia rapida
para utilizar comandos de sistema. Se ha agrupado en dos: los comandos
de sistema corrientes y los relacionados con la administracion.
Comandos de sistema
ls
Descripción: =list. listar contenido de directorios.
Ejemplos: ls, ls -l, ls -fl, ls --color
cp
Descripción: =copy. copiar ficheros/directorios.
Ejemplos:cp -rfp directorio /tmp, cp archivo archivo_nuevo
rm
Descripción: =remove. borrar ficheros/directorios.
Ejemplos: rm -f fichero, rm -rf directorio, rm -i fichero
mkdir
Descripción: =make dir. crear directorios.
Ejemplos: mkdir directorio
rmdir
Descripción: =remove dir. borrar directorios, deben estar vacios.
Ejemplos: rmdir directorio
mv
Descripción: =move. renombrar o mover ficheros/directorios.
Ejemplos: mv directorio directorio, mv fichero nuevo_nombre, mv fichero a_directorio
date
Descripción: gestion de fecha de sistema, se puede ver y establecer.
Ejemplos: date, date 10091923
history
Descripción: muestra el historial de comandos introducidos por el usuario.
Ejemplos: history | more
more
Descripción: muestra el contenido de un fichero con pausas cada 25 lineas.
Ejemplos: more fichero
grep
Descripción: filtra los contenidos de un fichero.
Ejemplos:cat fichero | grep cadena
cat
Descripción: muestra todo el contenido de un fichero sin pausa alguna.
Ejemplos: cat fichero
chmod
Descripción: cambia los permisos de lectura/escritura/ejecucion de ficheros/directorios.
Ejemplos: chmod +r fichero, chmod +w directorio, chmod +rw directorio -R, chmod -r fichero
chown
Descripción: =change owner. cambia los permisos de usuario:grupo de ficheros/directorios.
Ejemplos: chown root:root fichero, chown pello:usuarios directorio -R
tar
Descripción: =Tape ARchiver. archivador de ficheros.
Ejemplos: tar cvf fichero.tar directorio , tar xvf fichero.tar, tar zcvf fichero.tgz directorio, tar zxvf fichero.tgz
gunzip
Descripción: descompresor compatible con ZIP.
Ejemplos: gunzip fichero
rpm
Descripción: gestor de paquetes de redhat. Para instalar o actualizar software de sistema.
Ejemplos: rpm -i paquete.rpm, rpm -qa programa, rpm --force paquete.rpm, rpm -q --info programa
mount
Descripción: montar unidades de disco duro, diskette, cdrom.
Ejemplos: mount /dev/hda2 /mnt/lnx, mount /dev/hdb1 /mnt -t vfat
umount
Descripción: desmontar unidades.
Ejemplos: umount /dev/hda2, umount /mnt/lnx
wget
Descripción: programa para descargar ficheros por http o ftp.
Ejemplos: wget http://www.rediris.es/documento.pdf
lynx
Descripción: navegador web con opciones de ftp, https.
Ejemplos: lynx www.ibercom.com, lynx --source http://www.ibercom.com/script.sh | sh
ftp
Descripción: cliente FTP.
Ejemplos: ftp ftp.ibercom.com
whois
Descripción: whois de dominios.
Ejemplos: whois ibercom.com
who
Descripción: muestra los usuarios de sistema que han iniciado una sesion.
Ejemplos: who, w, who am i
mail
Descripción: envio y lectura de correo electronico.
Ejemplos: mail pepe@ibercom.com < fichero, mail -v pepe@ibercom.com < fichero
sort
Descripción: ordena el contenido de un fichero.
Ejemplos: cat /etc/numeros | sort, ls | sort
ln
Descripción: =link. para crear enlaces, accesos directos.
Ejemplos: ln -s /directorio enlace
tail
Descripción: muestra el final (10 lineas) de un fichero.
Ejemplos:tail -f /var/log/maillog, tail -100 /var/log/maillog | more
head
Descripción: muestra la cabecera (10 lineas) de un fichero.
Ejemplos: head fichero, head -100 /var/log/maillog | more
file
Descripción: nos dice de que tipo es un fichero.
Ejemplos: file fichero, file *
Comandos de administración
sysctl
Descripción: Configurar los paràmetros del kernel en tiempo de ejuecución.
Ejemplos: sysctl -a
adduser
Descripción: añadir usuario de sistema.
Ejemplos: adduser pepe, adduser -s /bin/false pepe
userdel
Descripción: = eliminar usuario de sistema
Ejemplos: userdel pepe
usermod
Descripción: = modificar usuario de sistema
Ejemplos: usermod -s /bin/bash pepe
df
Descripción: = disk free. espacio en disco disponible. Muy útil.
Ejemplos: df, df -h
uname
Descripción: =Unix name. Informacion sobre el tipo de Unix en el que estamos, kernel, etc.
Ejemplos: uname, uname -a
netstat
Descripción: la informacion sobre las conexiones de red activas.
Ejemplos: netstat, netstat -ln, netstat -l, netstat -a
ps
Descripción: =proccess toda la informacion sobre procesos en ejecucion.
Ejemplos: ps, ps -axf, ps -A, ps -auxf
free
Descripción: muestra el estado de la memoria RAM y el SWAP.
Ejemplos: free
ping
Descripción: heramienta de red para comprobar entre otras cosas si llegamos a un host remoto.
Ejemplos: ping www.rediris.es
traceroute
Descripción: herramienta de red que nos muestra el camino que se necesita para llegar a otra maquina.
Ejemplos: traceroute www.rediris.es
du
Descripción: =disk use. uso de disco. Muestra el espacio que esta ocupado en disco.
Ejemplos: du *, du -sH /*, du -sH /etc
ifconfig
Descripción: =interface config. configuracion de interfaces de red, modems, etc.
Ejemplos: ifconfig, ifconfig eth0 ip netmask 255.255.255.0
route
Descripción: gestiona las rutas a otras redes.
Ejemplos: route, route -n
iptraf
Descripción: muestra en una aplicacion de consola TODO el trafico de red IP, UDP, ICMP.
Permite utilizar filtros, y es SUMAMENTE UTIL para diagnostico y depuracion de firewalls
Ejemplos: iptraf
tcpdump
Descripción: vuelca el contenido del trafico de red.
Ejemplos: tcpdump, tcpdump -u
lsof
Descripción: muestra los ficheros(librerias, conexiones) que utiliza cada proceso
Ejemplos: lsof, lsof -i, lsof | grep fichero
lsmod
Descripción: Muestra los modulos de kernel que estan cargados.
Ejemplos: lsmod
modprobe
Descripción: Trata de instalar un modulo, si lo encuentra lo instala pero de forma temporal.
Ejemplos: modprobe ip_tables, modprobe eepro100
rmmod
Descripción: Elimina modulos del kernel que estan cargados
Ejemplos: rmmod <nombre de modulo>
sniffit
Descripción: Sniffer o husmeador de todo el trafico de red. No suele venir instalado por defecto.
Ejemplos: sniffit -i
DETALLE DEL COMANDO LS
ls
ls es una instrucción UNIX que muestra el listado de un directorio o archivo. Los resultados se muestran
ordenados alfabéticamente.
El nombre ls proviene de la palabra list, listado en inglés.
Los archivos y directorios cuyo nombre comienza con . (punto) no se muestran con la instrucción ls, por lo que
se suelen denominar "archivos ocultos". El parámetro -a de ls inhibe este comportamiento, mostrando todos
los archivos y subdirectorios, incluso los que comienzan con punto.
Sintaxis:
$ ls [opciones] [archivo|directorio]
sin argumentos muestra el listado del directorio actual.
$ ls archivo1 archivo2 archivo3 subdir1 subdir2
Muestra un listado de los archivos y subdirectorios especificados en la línea de instrucción. Para los archivos
muestra el nombre solamente (o más información si se emplea algún argumento como -l ) y para los
subdirectorios muestra todos los archivos incluidos en el subdirectorio.
Modificadores más comunes:
-l muestra un listado en el formato largo, con información de permisos, número de enlaces asociados al
archivo, usuario, grupo, tamaño y fecha de última modificación además del nombre.
$ ls -l
total 1424
-rw-r--r-- 1 mail bin 40661 May 13 22:27 Manual.txt.gz
-rw-r--r-- 1 nobody nogroup 0 May 13 22:26 fichero1.txt
-rw-r--r-- 1 root root 825 May 13 22:26 hosts
lrwxrwxrwx 1 user1 grp1 5 May 13 22:31 servidores -> hosts
-rw-r----- 1 sys sys 1405600 May 13 22:27 syslog.0
-d muestra solamente el nombre del subdirectorio, sin entrar en él ni dar un listado del contenido.
-a muestra los archivos ocultos aparte de los comunes.
-t muestra ordenado por la fecha de última modificación.
-c muestra ordenado por la fecha de última modificación del estado del archivo. -L en los enlaces simbólicos, muestra los datos del archivo referenciado en vez de los del link.
-1 muestra el listado en una sola columna. Sin la opción -1 el listado se muestra en varias columnas, tantas
como permita el ancho de la terminal.
-i muestra el número del i-nodo antes del nombre de archivo.
-m muestra los archivos en una línea y separados por comas.
-R hace un listado recursivo. Lista primero los archivos del directorio en curso, luego los de los subdirectorios
de éste, luego los de los subdirectorios contenidos en ellos (nietos) y así sucesivamente.
-S ordena la salida por tamaño de archivo, poniendo los más pesados en la parte superior del listado.
--color muestra cada tipo de archivo de un color distinto: un color para los directorios, otro para los
archivos regulares, otro para los enlaces simbólicos, otro para los sockets, otro para las tuberías FIFO, etc.
Este parámetro no se acepta en todas las versiones de ls y, por supuesto, requiere que la terminal sea capaz
de mostrar distintos colores o intensidades.
Al igual que en la mayoría de instrucciones Unix, los parámetros se pueden agrupar, de manera que es lo mismo poner
$ ls -li
que
$ ls -l -i
cat
Fuente:
http://www.pello.info/referencia_linux.html
http://lafec.df.uba.ar/tutorial_18pag.pdf
http://www.taringa.net/posts/linux/13639365/echo-terminal-en-linux-entra.html
http://deckerix.com/modulos/manuales/linux/capitulo36.php
http://es.kioskea.net/contents/692-sistema-unix-el-shell

http://electrouni.files.wordpress.com/2010/12/kernel-linux.pdf

PERMISOS DE ARCHIVOS


TIOPOS DE  PERMISOS

Los permisos de los archivos en Linux (o GNU/Linux) tienen mucha importancia. Solemos tener varios usuarios en nuestro equipo y no todos tienen acceso a modificar o trabajar con todos los ficheros.
En Linux, todo archivo y directorio tiene tres niveles de permisos de acceso: los que se aplican al propietario del archivo, los que se aplican al grupo que tiene el archivo y los que se aplican a todos los usuarios del sistema. Podemos ver los permisos cuando listamos un directorio con ls -l:
Sintaxis: chmod  [opciones]  [XXX]  [nomFichero/nomCarpeta]

Las opciones podemos indicarlas o no, según queramos. Opciones típicas son:
  • -R o -r cambia los permisos de todos los archivos dentro de un directorio y de los subdirectorios contenidos en él.
  • - v para que muestre cada fichero procesado
  • - c es como -v, pero sólo avisa de los ficheros que modifica sus permisos
  • -fv fuerza a cambiar los permisos incluso si el usuario no es el dueño del fichero.
XXX es el número de permisos tal y como especificamos a continuación:
vamos a listar un directorio con el comando:  ls –l
Veremos algo parecido a esto:
$> ls -l
-rwxrwxr--  1 sergio ventas    9090 sep  9 14:10 presentacion
-rw-rw-r--  1 sergio sergio 2825990 sep  7 16:36 reporte1
drwxr-xr-x  2 sergio sergio    4096 ago 27 11:41 videos

Lo primero que vemos son 10 caracteres: drwxr-xr-x. El primer caracter representa el tipo de archivo. Los 3 siguientes los permisos de usuario, los 3 siguientes los permisos de grupo y los 3 últimos los permisos para otros:
rwx       rwx     rwx
usuario   grupo   otros

En cuanto a las letras, su significado son los siguientes:
  • r read - lectura
  • w write - escritura (en archivos: permiso de modificar, en directorios: permiso de crear archivos en el dir.)
  • x execution - ejecución

Tipos de archivo (primer caracter):
Tipo de archivo
Significado
–
Archivo común
d
Directorio
l
link, es decir un enlace o acceso directo
s
Socket
p
Pipe
b
Binario, un archivo generalmente ejecutable

Permisos numéricos
Como hemos visto, tenemos caracteres para los permisos de archivos, pero es algo incómodo cambiar los permisos con caracteres. Para hacerlo más sencillo, podemos utilizar números.
Van  a ser 3 números que van del 0 al 7:
  • Primer número: permisos de propietario.
  • Segundo número: permisos de grupo.
  • Tercer número: permisos para el resto.
Para representar del 0 al 7 necesitamos 3 bits, que son los 3 bits utilizados para dar permisos a propietario, grupo y al resto. Con un ‘1’ damos permiso y con un ‘0’ se lo quitamos. Va en el siguiente orden: rwx.

Binario
Decimal
Permisos
Descripción
000
0
– – –
Ningún permiso
001
1
– – x
Ejecución
010
2
– w –
Escritura
011
3
– w x
Escritura y ejecución
100
4
r – –
Lectura
101
5
r – x
Lectura y ejecución
110
6
r w –
Lectura y escritura
111
7
r w x
Lectura, escritura y ejecución

Ejemplos
644:
  • Propietario: lectura y escritura.
  • Grupo: lectura.
  • Resto: lectura.
755:
  • Propietario: lectura, escritura y ejecución.
  • Grupo: lectura y ejecución.
  • Resto: lectura y ejecución.
777:
  • Propietario: lectura, escritura y ejecución.
  • Grupo: lectura, escritura y ejecución.
  • Resto: lectura, escritura y ejecución.


FUENTE: