1) El documento introduce conceptos básicos de Unix como comandos, sistema de archivos, shell, filtros y redirección de archivos. 2) Explica la estructura de un sistema Unix y algunas versiones como SysV, BSD, Solaris, IRIX, AIX y Linux. 3) Cubre temas de usuarios como nombres de usuario, contraseñas, directorio home y permisos de archivos.
2. Unix Programming Environment
Objectivos: Conocer las características básicas
de Unix y la filosofía de Unix
Comandos básicos
Sistema de archivos
Shell
Filtros (wc, grep, sort, awk)
Redirección de archivos, Tuberías
3. Estructura de un Sistema
UNIX
Applications
Shell
Kernel (OS)
Hardware
Aplicaciones estandar:
• Comandos de
Sistema de archivos
• editores de textos
• compiladores
• procesadores de
texto
4. Unix y los Usuarios
La mayoría de versiones de Unix proven
el mismo conjunto de aplicaciones
(comandos y shells).
A pesar de que sus interfaces de
usuario no son parte directa del SO,
están estandarizados lo suficientemente
para que baste con aprender una
versión.
5. Versiones de Unix
SysV (AT&T)
BSD (Berkeley)
Solaris (Sun)
IRIX (SGI)
AIX (IBM)
LINUX (free software)
6. Logearse
Modos:
Desde la consola
Acceso remoto mediante SSH, telnet.
Los nombres y comandos son sensitivas
a mayúsculas o minúsculas!
7. Username
(tipicamente) una secuencia de caracteres
alfanuméricos de longitud no mayor a 8.
Identificacion primaria de la cuenta.
(usualmente) usada como direccion de
correo
El nombre del directorio home está
relacionado con el nombre de usuario.
Creación de un usuario
adduser hernan
8. Password
Cadena secreta que nadie debe conocer (ni el
sistema!)
Al pulsar la clave, el Sistema la encripta y la
compara con lo almacenado.
Debería tener al menos 6 caracteres
Es una Buena idea mezclar mayúsculas y
minúsculas, números y caracteres especiales
(asccii estandar)
Cambio de clave de un usuario
passwd hernan
10. Directorio home
Directorio actual al logearse
cd lleva a home
Localizacion de varios archivos de inicio
y configuración. :
.vimrc .bashrc .bash_profile .forward .plan
.mozilla/ .elm/ .logout
11. Archivos y nombre de archivos
Un archivo es la unidad básica de
almacenamiento.
Son sensibles a mayúsculas! (case sensitive)
De hecho, todo es case sensitive!
Los archivos en Unix pueden contener cualquier
character, excepto el character null y slash (/).
Los nombres de archivos pueden ser largos!
Cuan largo depende de la version
12. Archivos y nombre de archivos
Cada archivo en el mismo directorio
debe tener un nombre único.
Los archivos que inician con un '.' son
ucultos
13. Directorios
Un directorio es un clase especial de
archivo - Unix usa los directories para
almacenar informacion acerca de los
archivos.
14. Unix Filesystem
El Sistema de archivos
Es un Sistema de organización jerárquica
de archivos y directorios.
El nivel superior de la jerarquía se llama la
“raiz” (root) y and guarda todos los archivos y
directorios del Sistema de archivos.
El nombre del directorio root es /
16. Rutas (Pathnames)
La ruta de un archivo incluye el nombre
del archivo y el nombre de la carpeta
que lo contiene, y el nombre de la
carpeta que la contiene … hasta llegar
a la raiz
Ej.
/home/hernan/trabajos/tarea1
Comando para ver directorio actual
pwd
17. Ejemplos de rutas
/
bin/ etc/ home/ tmp/ usr/
Hollid2/ scully/ bin/ local/
netprog unix/ X ls who
/usr/bin/ls
Syllabus
/home/hollid2/unix/Syllabus
Crear usuarios y su estructura con su nombre en vez de Hollid2
18. Rutas Absolutas
Las que se especifican desde la raiz.
/home/hernan
Absolutas especiales :
~hernan/ /home/hernan (solo para el
directorio home del usuario)
~ es el directorio home de $USER
Para ver el contenido de las variables de entorno
echo $USER
19. Rutas relativas
Prefijadas con el directorio actual ( $PWD )
Relativas a la carpeta de trabajo actual
$ cd /home/hernan
$ pwd
/home/hernan
$ ls unix/Sillabus
unix/Sillabus
$ ls X
ls: X: No such file or directory
$ ls /home/scully/X
/home/scully/X
20. Rutas relativas especiales
. – Directorio actual
.. – Directorio padre
$ pwd
/home/hernan
$ ls ./netprog
./netprog
$ ls ../scully
X
24/10/2015
21. Disco vs. Sistema de archivos
La jerarquía completa puede incluir varios
discos físicos.
Algunas carpetas pueden estar en otras
computadoras
/
bin etc users tmp usr
hollid2 scully
22. Comandos – Sintaxis Básica
El Shell considera el primer elemento como un
comando. Los siguientes elementos son argumentos
Los Argumentos que inician con un – son llamados
opciones
Sintaxis de comandos:
command [option1] [option2] . . . [optionN]
grep "Hernan" /etc/passwd
ls -o /home/hernan /home/prueba/Public
– -o lista larga
– Los 2 parámetros son directorios
23. Comandos de archivos y carpetas
ls – lista el contenido de un directorio
-a – all files
-l – long listing
pwd – print working directory
cd – change directory
Sin argumentos, lleva a home
24. Páginas de ayuda
Información detallada de comandos:
man ls
man cat
man man
– Se puede buscar por palabras clave:
man -k buscado
25. Opciones de línea de commandos
Se puede modificar el formato de salida de ls
mediante opciones.
-l long format (fechas, propietario y permisos).
Comparable a -o
-a all (muestra también los archivos ocultos*)
-F incluye un caracter especial para indicar el tipo de
archivo.
-C lista en columnas
*los archivos ocultos inician con "."
26. Ver archivos
cat – concatena, envía a la salida
estándar (stdout). Muestra el contenido
de un archivo
less, more – utilidades de paginación
od – octal dump. Para ver el contenido
en octal, hex, control chars, etc.
27. Copiar, borrar, enlazar
rm – borrar
rm ~/tmp/download
mv – mover (renombrar) un archivo
mv ant.arch ../otroDir/nuevo.arch
cp – copiar
cp dirOrigen/arch dirDest/arch
ln – crea un enlace duro (inode) o
suave (symbolic) a un archivo
28. Comandos para directorios
mkdir crear directorio (make
directory)
rmdir borrar un directorio (remove
directory)
Los directorios pueden moverse o
renombrarse (mv), y copiarse (cp –r)
30. Comandos…
Procesos en ejecución
ps ax o ps –e
• Concatenar comandos
• cd; ls -l; pwd
• Combinación de comandos Shell:
uso de tubería (pipe)
• ls /dev | grep sda
32. Redireccionamiento
• Entrada de un comando desde un archivo:
ordenar
• sort < /etc/passwd
• Guardando el resultado en un archivo
• grep uucd /etc/passwd > usuario
• sort /etc/passwd > ~/ordenado.text
• Entrada y salida desde y hacia un archivo
• sort < /etc/passwd > ordenado
33. Redireccionamiento
Agregando datos a un archivo
• echo hola >> usuario
• Leyendo datos a un archivo hasta cierta condición
• cat <<zz > input.txt
• Encontrar / Buscar
• find / -name COPYING -print
• Enviar el error a un archivo
• find / -name COPYING -print 2> finderr
• Desechar el error
• find / -name COPYING -print 2> /dev/null
34. Comandos…
Atajo con TAB
cat /etc/mod{TAB}
• Conteo de líneas palabras y caracteres
• wc /etc/passwd
• wc –l /etc/passwd
• cat /etc/passwd | wc
• ej. Cuantos procesos están activos en
memoria?
35. Atributos de los archivos
Cada archivo tiene algunos atributos:
Fechas de acceso:
Creacion del archivo
Último cambio
Última lectura
Tamaño
Propietarios (usuario y grupo)
Permisos
Tipo – directorio, enlace, norlam, etc.
ACLs – lista de control de acceso
36. Atributos de los archivos
Atributos de fecha:
Cuando fue cambiado ls -l
Ordenar por fecha de modificación ls -lt
37. Propietarios
Cada archivo es propiedad de un
usuario.
Se puede ver con ls y la opción -l o -o:
ls -l
total 24
drwxr-xr-x 7 jjohnson users 80 Jan 3 2015 cs265/
-rw------- 1 jjohnson users 8258 Jan 3 2015 cs265.html
-rw-r--r-- 1 jjohnson users 8261 Jan 3 2015 cs265.html~
38. ls -l
$ ls -l foo
-rw-rw---- 1 hollingd grads 13 Jan 10 23:05 foo
permisos
propiet grupo
tam
fecha
nombre
39. Permisos
Cada archivo tiene permisos específicos
Hay tres tipos de permisos:
read r
write w
execute x
Hay 3 conjuntos de permisos:
1. Usuario / propietario
2. grupo
3. otros (los demás)
40. ls -l y los permisos
-rwxrwxrwx
User Group Others
Tipo de archivo:
- – archivo normal
d – directorio
s – enlace simbólico
(otros)
41. rwx
archivos:
r – permitido leer.
w - permitido escribir / editar
x - permitido ejecutar
Directorios:
r - permitido ver el contenido (nombres)
w - permitido agregar o eliminar archivos.
x - permitido a “ingresar” al directorio
42. Cambio de permisos
El commando chmod cambia permisos
de archivos y directorios.
forma:
chmod modo archivo
43. chmod – modos numericos
Permisos para cada conjunto de usuarios
(user, group, other) como núm de 3-bit
r – 4
w – 2
x – 1
El modo es un número octal de 3 dígitos #
755 – rwxr-xr-x
644 – rw-r—r--
700 – rwx------
44. chmod - ejemplos
$ chmod 700 CS571
$ ls –o Personal
drwx------ 10 kschmidt 4096 Dec 19 2004 CS571/
$ chmod 755 public_html
$ chmod 644 public_html/index.html
$ ls –ao public_html
drwxr-xr-x 16 kschmidt 4096 Jan 8 10:15 .
drwx--x--x 92 kschmidt 8192 Jan 8 13:36 ..
-rw-r--r-- 5 kschmidt 151 Nov 16 19:18 index.html
$ chmod 644 .plan
$ ls –o .plan
-rw-r--r-- 5 kschmidt 151 Nov 16 19:18 .plan
50. chmod –modos simbólicos
Usado para colocar, agregar, o
eliminar permisos
forma:
[ugoa][+-=][rwx]
u – user g – group o – other a – all
+ agregar permisos - quitar permisos =
colocar permisos
52. Comandos para almacenar
tar
Crea un gran archivo a partir de muchos
archivos
gzip, gunzip
Utilidad de compreción de archivos
tar en Linux realiza una compression gzip con la
opción z :
$ tar czf 571back.tgz CS571
$ tar xzf assn1.tgz
53. El Shell como interfaz de
usuario
Un shell es un intérprete de
commandos , una interfaz entre el
humano (u otro programa) y el SO
Es, por si mismo, otro programa
55. Inicio de Sesión
Una vez logeado, el shell inicia y
muestra el prompt.
($)
Al iniciar el shell busca archivos de
configuración y personalización en
home.
Se puede cambiar el prompt, PATH, etc.
59. Ingreso de commandos
El shell imprime el prompt y espera que
se escriba un comando.
El primer element se espera sea el
commando. Pueden ser:
Incorporados del shell - comandos que el
shell interpreta directamente.
Programas externos (utilidades) –
programas independientes en el disco (se
busca en el orden especificado de las
carpetas en $PATH)
60. Interpretar un Comando - type
Cuando se encuentra un comando, el shell:
1. Busca por alias
2. Busca funciones definidas por el usuario
3. Busca si es incorporado
4. Busca utilidades en los directorios especificados
en $PATH
Se puede usar type para saber que usa el
shell:
type echo
echo is a shell builtin
type chmod
chmod is /bin/chmod
61. Opciones y argumentos
Forma estandarizada de los comandos:
comando opción(es) argumentos
Las opciones modifican la forma en la
cual trabajaa un comando,
frecuentemente un guión y una letra
(puede combinarse luego del guión)
62. Des logearse
exit (commando incorporado)
Sale del shell
Si se está en el shell de login (nivel
superior), nos desconecta del sistema
Al ser el shell un programa que se
ejecuta, puede ser invocado
recursivamente
63. Standard I/O
Cuando se ingresa un commando, el
shell crea un subshell para ejecutar el
proceso o script.
El shell establece e canales I/O:
Entrada estándar (0) – teclado
Salida estándar (1) – pantalla
Error estándar (2) – pantalla
Esos flujos pueden ser redireccinados a
y desde un archivo, o incluso a otro
comando
64. Los programas y los I/O
estandar
Program
Standard Input
(STDIN)
Standard Output
(STDOUT)
Standard Error
(STDERR)
65. Terminar un flujo en la entrada
estandar
Para indicar el fin de la entrada pulsar Ctrl-D (^D),
que es la señal EOF de la línea, esto Cierra el flujo de
entrada (stream).
El shell es un programa que lee desde la entrada
estándar.
Qué sucede al pulsar ^D en el shell?
(Ver el comando set e ignoreeof)
Ejercicio: Crear Script y usar argumentos %0, %1, etc.
cat > prog1.sh
Lista comandos … ^D
chmod a+x *.sh
./prog1.sh o sh prog1.sh
66. Metacaracteres del Shell
Algunos caracteres tienen significados
especiales para el shell:
redirección I/O
< > |
comodines
* ? [ ]
otros
& ; $ ! ( ) space tab newline
Deben usarse junto con caracteres de
escape o entre comillas para evitar
comportamientos indeseados
67. Comodines
* – iguala 0 o más caracteres
? – iguala exáctamente 1 caracter
[<list>] – iguala cualquier caracter dentro de
la lista
Ej.
ls *.cc – lista todos los archivos fuente de C++ en la
carpeta
ls a* – lista todos los archivos que inician con ’a’
ls a*.jpeg – lista todos las fotos JPEGs que inician
con ’a’
ls * - lista todo dentro de subdirectorios inclusive
68. Comodines …
ls file?
- busca file1, file2, pero no file o
file22
ls file?.*.DEL
- busca file1.h.DEL,
file9.cc.DEL, file3..DEL pero no
file8.DEL o file.html.DEL
Estas no son expresiones regulares!
4/11/2015
69. Comodines
[abc] iguala cualquiera de los caracteres
ls T[eE][sS][tT].doc
[a-z] iguala cualquier caracter en el rango
ls [a-zA-Z]*
[!abc…] iguala cualquier caracter except
aquellos en la lista.
ls [!0-9]*
70. Variables de Shell
bash usa variables shell para almacenar
información
Usadas para cambiar el comportamiento
del shell y de otros programas
Podemos acceder a esas variables:
Colocar nuevos valores para personalizar el
shell.
Ver el valor para ayudar a completar una
tarea.
71. Cambiar/Ver las Variables
Para asignar (en sh, ksh, bash):
VAR=algunaCadena
OTRA_VAR=“Con espacios”
Nota, no usar espacio alrededor de ‘=‘
Para ver :
$ echo $VAR
algunaCadena
$ echo $OTRA_VAR
Con espacios
72. Variables del Shell
Algunas comunes:
PATH – lista de carpetas en donde buscar
commandos que no son incorporados al
shell
PS1 –prompt primario
USER – nombre del login del usuario
HOME – carpeta home del usuario
PWD – carpeta de trabajo actual
73. Otras importantes
SHELL – el shell del login
TERM – el tipo de terminal
HISTFILE – en donde se almacena el
historial de comandos
EDITOR – mantiene el editor preferido
del usuario
HOSTNAME – nombre de la máquina
SHELLOPTS – valor de varias opciones
del shell (ver set incorporado del shell
Bash)
74. Mostrar el valor de variables
de Shell
Colocar el Prefijo "$“ a la variable.
El comando echo lo muestra:
$ echo $HOME
$ echo $PATH
Se puede usar estas variables en
cualquier comando:
$ ls -al $HOME
75. Colocando valores en las
variables Shell
Se usa un comando de asignación
incorporado: set
HOME=/etc
PATH=/usr/bin:/usr/etc:/sbin
NEWVAR="blah blah blah"
76. Comando set
Sin argumentos imprime el listado de
todas las variables de entorno.
Algunas opciones bash
noclobber – no permite que la redirección
sobreescriba un archivo existente
ignoreeof – El Shell no sale con ctrl-D
vi – usa una interfaz de estilo vi (se usa
emacs de forma predeterminada)
-n – ejecución en seco (solo ejecuta el parser,
pero no lo ejecuta). Útil para depuración de
scripts
77. Caracter de escape
Usar backslash para inhibir el
comportamiento especial de los
siguientes caracteres :
$ echo $USER
hernan
$ echo $USER
$USER
$ echo ab
ab
78. Comillas dobles
Inhibe todos los comportamientos,
excepto sustitución de variables,
sustitución de comandos, y el caracter
de escape
$ echo “$USER es $USER”
hernan es hernan
$ echo “$USER es $USER”
$USER es hernan
$ echo “He dicho, ”Espera un
momento””
He dicho, “Espera un momento”
79. Comillas simples
Inhibe casi todos los comportamientos
especiales
No puede contener una comilla simple
$ echo ‘he dicho “espera!”’
he dicho “espera!”
$ echo ‘Mi nombre es $USER’
Mi nombre es $USER
$ mv compuestoPorMozart
‘compuesto por – Mozart’
80. Filosofía Unix
La union de pequenas utilerias
mediante entubamiento y redirección
para realizar fácilmente tareas no
triviales
Ej., encontrar los 3 subdirectorios más
grandes:
$ du –s * | sort –nr | head -n3
120180 Files
22652 Zaychik
9472 tweedledee.tgz
81. Entubamiento y combinación
con filtros
Conectar la salida de un comando a la
entrada de otro para obtener filtros
compuestos
who | wc -l
ls | sort -f
ls -s | sort -n
ls -l | sort -nr -k4
ls -l | grep ‘^d’
82. Control de procesos
Los Procesos se ejecutan en un subshell (de
forma predeterminada)
Los Subshell heredan las variables exportadas
Cada proceso tiene su ID (pid) y un padre
(ppid)
Usar ps para verlos
$ ps
PID TTY TIME CMD
350 pts/4 00:00:00 bash
22251 pts/4 00:00:00 vim
22300 pts/4 00:00:00 ps
83. Control de procesos (cont.)
Usar la opción –f para un listado largo :
$ ps –f
UID PID PPID C STIME TTY TIME CMD
hernan 350 349 0 10:06 pts/4 00:00:00 -bash
hernan 22251 350 0 17:32 pts/4 00:00:00 vim tarea
hernan 22437 350 0 17:36 pts/4 00:00:00 ps -f
Usar –e para listar los procesos de
todos los usuarios.
$ ps –e | grep xmms
29940 pts/0 00:33:47 xmms
84. Matar un proceso
El comando kill envía una senal al
proceso (al PID dado)
De forma predeterminada, envía TERM
(terminate), el que solicita que finalice
el proceso, de tal manera se lo haga de
forma limpia
usar -9 para enviar la senal KILL (no
será ignorada), pero no de forma limpia
Ej:
$ kill -9 29940
85. Control de trabajo
El shell permite administrar trabajos
(jobs)
Coloca los trabajos en Segundo plano
(background)
mueve un trabajo a primer plano
(foreground)
suspende un trabajo
Mata un trabajo
86. Trabajos a Segundo plano
Se lo hace colocando un "&“ al final de la
línea de comando.
No se necesita esperar que se termine el trabajo,
se puede escribir un Nuevo comando
inmediatamente.
Se puede tener un grupo de trabajos ejecutandose
al mismo momento.
Ej.
ls -lR > /home/hernan/listadoTotal.txt &
87. Listar los trabajos
El comando jobs listará los trabajos en
Segundo plano:
> jobs
[1] Running ls -lR >
listadoTotal.txt &
>
El shell asigna un número a cada
trabajo (en este caso 1).
88. Suspendiendo y Reanudando
los trabajos en Segundo plano
Se puede suspender pulsando ^Z (Ctrl-Z).
Suspendido significa que se detiene el trabajo, pero no
finaliza.
El trabajo se mostrará en el listado obtenido con jobs.
Se usa fg y el número de trabajo, precedido por %.
Sin un argumento, fg trae el ultimo trabajo al primer plano
$ jobs
[1] Stopped ls -lR > listadoTotal.txt &
$ fg %1
ls -lR > listadoTotal.txt
89. Colocar en el Segundo plano un
trabajo suspendido
Si está en primer plano, se debe
suspenderlo
Usar bg, tal como se lo hizo con fg,
para permitir que un trabajo suspendido
continúe en el Segundo plano:
$ bg %3
90. Finalizar un trabajo
Kill puede tomar un número de trabajo
o incluso un nombre de trabajo,
usando %:
$ find . –name core* -print >
archivosCore &
$ firefox&
$ jobs
[1]+ Running find . –name …
[2]+ Running firefox
$ kill %2
91. Editores de texto
Un editor de texto se usa para crear y
modificar archivos.
Los más comunes son:
vi (también vim en Linux)
$ vimtutor
emac
$ emacs
Entonces pulsar, ctrl-h t
92. •cambiar de modo comando a modo insert: i
• cambiar de modo insert a modo comando: Esc
* Modo comando:
•hacia arriba k
•hacia abajo j
•hacia la izquierda h
•hacia la derecha l
•grabar :wEnter (write)
•salir sin grabar :q!Enter
•deshacer u
•rehacer Ctrl+r
•escribir y salir :wqEnter
• Eliminar linea dd
• Salir grabando :x
Tarea: realizar un script llamado copiar.sh que pida una
carpeta de origen, un nombre de archivo, una carpeta de
destino y un nombre de destino, realice la copia y
finalmente muestre el contenido de forma paginada del
archivo en cuestion.