Translate

lunes, 17 de noviembre de 2014

Manejo de Shell en Linux

Manejo de Shell en Linux Comandos básicos para el manejo de sesiones Listado y cambio de directorios Gestión de archivos y directorios Manipulación de los atributos de archivos y directorios Lectura de archivos Edición de archivos Comandos básicos para el manejo de sesiones La línea de comandos es la forma más directa de enviar comandos a un servidor GNU/Linux. Si usa la línea de comandos rápidamente verá que es mucho más potente y tiene más capacidades que otros prompts (por ejemplo, DOS). La razón de esto es que tiene un acceso directo a miles de utilitarios que no tienen equivalente gráfico, o que no sería fácil acceder a todas las opciones y combinaciones posibles por medio de menús y botones. Inicio de sesión Cuando se accede a una terminal o consola GNU/Linux se presenta una simple interfaz similar a: webserver login: En este ejemplo el término “webserver” hace referencia al nombre del equipo. En este momento estará en condiciones de ingresar su nombre de usuario y luego de presionar la tecla Enter le aparecerá el prompt password:, donde deberá ingresar su contraseña para esta cuenta. Debido a que la conexión en la consola no hace eco de los caracteres que representan a la contraseña, deberá tener cuidado cuando ingresa su contraseña ya que no podrá visualizar la cantidad de caracteres ingresados. Shell Al iniciar su sesión en una terminal GNU/Linux se encontrará, en caso de trabajar con un sistema Debian y conectarse como el superusuario root , con un prompt similar a: webserver:~# Como ya se aclaró anteriormente, “webserver” hace referencia al nombre del equipo. El carácter “~” indica que el directorio en el que nos encontramos posicionados es nuestro directorio personal (generalmente /root). Obviamente, este sector del prompt se modificará a medida que nos desplacemos por toda la estructura de directorios. El carácter “#” indica que estamos utilizando una shell con toda su potencialidad ya que nos hemos registrado con la cuenta de superusuario. En el caso de ingresar al sistema con una cuenta de usuario común, el prompt se asemejará a: jperez@webserver:~$ La diferencia con el caso anterior es que al comienzo del prompt se indica el nombre de usuario que está utilizando esta sesión. Por otro lado, el carácter “$” ubicado al final del prompt indica que el usuario “jperez” no tiene privilegios de supersusuario. Terminales Un sistema GNU/Linux es un sistema multiusuario. Esto quiere decir que varios usuarios pueden conectarse simultáneamente al sistema y trabajar de forma independiente. Una de las formas más simples de realizar esta tarea es trabajar con distintas terminales e iniciar sesión con un usuario distinta en cada una de ellas ya que cada terminal nos deja operar desde una shell absolutamente independiente. Por defecto, el sistema nos presenta en pantalla la terminal número 1 (denominada tty1). Para desplazarnos entre las distintas terminales deberemos presionar la combinación de teclas ALT + Fx, donde Fx identifica a una tecla de función en la que x es el número de terminal a la que queremos acceder. Así, por ejemplo, para desplazarnos a la tercera terminal deberemos presionar la combinación de teclas ALT + F3. Para identificar el número de terminal en la que nos encontramos en determinado momento debemos utilizar el siguiente comando: ~$ tty Manejo de Shell en Linux - 2 Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei” Cambiar de usuario Otra forma de aprovechar las características de sistema multiusuario que GNU/Linux nos ofrece es utilizar el comando su, que nos permite cambiar de usuario sin necesidad de conectarnos nuevamente en otra terminal. Si estamos conectados como superusuario simplemente debemos ejecutar: ~# su - jlopez En este caso jlopez es el nombre de usuario que comenzaremos a utilizar a continuación (siempre y cuando, obviamente, jlopez sea un usuario ya registrado en el sistema). Si por el contrario, estamos conectados con una cuenta de usuario común y nos queremos convertir en superusuario debemos ingresar el siguiente comando: ~$ su - Acto seguido, se nos preguntará la contraseña del superusuario antes de poder “convertirnos” en él. Información de usuario Si en algún momento deseamos obtener información acerca del usuario con el que estamos conectados podemos utilizar alguno de los siguientes dos comandos: ~$ id Este comando nos brinda información importante acerca del usuario que lo ejecuta. Los datos más destacados que se pueden obtener son el identificador del usuario (uid), el identificador del grupo principal al que pertenece el usuario (gid) y el nombre de los grupos adicionales de los que forma parte el usuario. El otro comando, mucha más simple de utilizar es who: ~$ who En este caso se muestra el nombre de usuario, la terminal en la que se encuentra conectado y la fecha y hora en que inició sesión. Cierre de sesión Para finalizar una sesión en un sistema GNU/Linux se pueden utilizar indistintamente cualquiera de los siguientes dos comandos: ~$ exit ~$ logout El mismo objetivo se logra si presionamos la combinación de teclas CTRL + D. Listado y cambio de directorios Listar directorios El comando ls (LiSt) es equivalente a dir de DOS, pero puede hacer mucho más. De hecho, esto se debe en gran parte al hecho de que los archivos también pueden hacer más. La sintaxis del comando ls es la siguiente: ls [opciones] [archivo|directorio] [archivo|directorio.. Si no se especifica archivo o directorio alguno en la línea de comandos, ls imprimirá la lista de los archivos del directorio corriente. Sus opciones son muchas y sólo citaremos unas pocas: -a: lista todos los archivos, incluyendo los archivos ocultos (en GNU/Linux los archivos ocultos son aquellos cuyo nombre comienza con “.“) -R: lista recursivamente, es decir, todos los archivos y subdirectorios del directorio que se menciona en la línea de comandos; -l: muestra información adicional sobre los archivos; Algunos ejemplos: ~$ls —R En este caso se lista recursivarnente el contenido del directorio actual. ~$ls -al images/*.png 3- -- - Manejo de Shell en Linux Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei” En este ejemplo se listan todos los archivos (incluso los archivos ocultos) del directorio images/ cuyo nombre termina con .png. Note que esto también incluye al archivo .png si es que existe uno. De todos los casos anteriores conviene detenerse un instante en el uso del comando ls junto al parámetro -l. Tomemos el ejemplo de un archivo y un directorio. Abajo se muestra el resultado de ingresar el comando ls -1 desde una línea de comandos: ~$ls -1 -rw-r----- 1 root shadow 664 2009-04-05 14:11 shadow drwxr-xr-x 2 root root 4096 2009-04-05 14:11 w3m Los diferentes campos de salida del comando ls -1 son los siguientes (de izquierda a derecha): Los primeros diez caracteres representan sucesivamente el tipo de archivo y los derechos asociados al mismo. El primer carácter es el tipo del archivo: contiene un guión (—) si es un archivo regular, o una d si es un directorio. Los nueve caracteres que siguen representan los permisos asociados con ese archivo. Aquí puede ver la distinción que se hace entre los diferentes usuarios para el mismo archivo: los primeros tres caracteres representan los derechos asociados con el dueño del archivo, los siguientes tres se aplican a todos los usuarios que pertenecen al grupo pero que no son el dueño, los últimos tres se aplican a los otros. Un guión (-) significa que el permiso no está activo. Luego viene el número de vínculos del archivo. A continuación viene el nombre del dueño del archivo y el nombre del grupo dueño. Finalmente, se muestra el tamaño del archivo (en bytes) y la fecha de su última modificación, seguido por el nombre del archivo o directorio propiamente dicho. Ahora observemos en detalle los permisos asociados con cada uno de estos archivos: antes que nada, debemos quitar el carácter que representa al tipo, y para el archivo shadow obtenemos los siguientes derechos rw-r-----. La interpretación de los mismos es la que sigue: Los primeros tres (rw-) son los derechos del usuario dueño del archivo, en este caso root. Por lo tanto, el usuario root, tiene el derecho de leer el archivo (r), de modificarlo (w) pero no de ejecutarlo (-). Los tres siguientes (r--) se aplican a todo usuario que no es root pero que es miembro del grupo shadow. Dicho usuario podrá leer el archivo (r), pero no podrá modificarlo ni ejecutarlo (--). Los tres restantes (---) se aplican a todo usuario que no es root ni es miembro del grupo shadow. Dicho usuario simplemente no tendrá derecho alguno sobre el archivo. Para el directorio w3m, los derechos son rwxr-xr-x, entonces: root, como dueño del directorio, puede listar los archivos que contiene (r), agregar o quitar archivos del mismo (w), y recorrerlo (x). Cada usuario que no es root pero es miembro del grupo root, podrá listar los archivos de ese directorio (r), pero no podrá quitar ni agregar archivos (—), y lo podrá recorrer (x). Cualquier otro usuario sólo podrá listar el contenido de este directorio (r--), y nada más. Incluso no podrá ingresar al directorio. Cambiar directorios El comando cd es exactamente el mismo que en DOS, con alguna funcionalidad extra. Hace justo lo que su acrónimo indica, cambiar el directorio de trabajo. Puede usar . para referirse al directorio corriente y .. para referirse al directorio padre del directorio corriente. Si ingresa cd solo, será llevado de vuelta a su directorio personal. Si ingresa cd - será llevado al último directorio en el cual estuvo. Y, finalmente, puede especificar el directorio destino al que nos queremos desplazar. Note que como usuario no privilegiado normalmente no puede ingresar a los directorios personales de otros usuarios (a menos que esos usuarios lo hayan autorizado explícitamente o esa sea la configuración predeterminada del sistema). A continuación se presentar algunos ejemplos: ~$ pwd /home/jperez ~$ cd /usr/share/doc/HOWTO ~$ pwd Manejo de Shell en Linux - 4 Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei” /usr/share/doc/HOWTO ~$ cd ../FAQ-Linux ~$ pwd /usr/share/doc/FAQ-Linux ~$ cd ~$ pwd /home/jperez El primer comando que aparece en el ejemplo anterior es pwd. Este comando nos devuelve la ruta completa al directorio en el cual nos hallamos posicionados. El uso del comando cd es bastante simple. Se puede indicar como parámetro el directorio de destino o ejecutarlo sin parámetros, en este caso nos devolverá a nuestro directorio personal (/home/jperez en nuestro ejemplo). Gestión de archivos y directorios Gestionar archivos significa copiar, mover y borrar archivos. Más adelante, veremos formas de cambiar los atributos de los mismos (dueño y permisos asociados). Creación de directorios y archivos vacíos mkdir (MaKe DlRectory) se usa para crear directorios. Su sintaxis es simple: mkdir [opciones] [directorio …] Sólo una opción es digna de interés: la opción -p. La misma hace dos cosas: Creará los directorios padre si es que aún no existían. Si no se especifica esta opción y los directorios padre no existen, mkdir simplemente fallará, quejándose que dichos directorios padre no existen. Por otro lado, si el directorio padre ya existe simplemente creará el nuevo directorio. Aquí tiene algunos ejemplos: ~$ mkdir pepe Crea un directorio denominado pepe en el directorio actual; ~$ mkdir -p imagenes/misc docs Crea un directorio misc en el directorio imagenes creando primero el ultimo si es que no existe (-p); también crea un directorio denominado docs en el directorio actual. Inicialmente, el comando touch no está orientado a la creación de archivos sino a la actualización de la hora de acceso y modificación de los archivos. Sin embargo, touch creará los archivos mencionados como archivos vacíos si es que no existían. La sintaxis es: touch [opciones] archivo [archivo …] Entonces, ejecutar el comando: ~$ touch archivo1 imagenes/archivo2 Creará un archivo vacío denominado archivo1 en el directorio corriente y un archivo vacío denominado archivo2 en el directorio imagenes, si dichos archivos no existían. Borrar archivos y directorios El comando rm (ReMove) reemplaza a los comandos del y deltree de DOS, y agrega más opciones. Su sintaxis es la siguiente: rm [opciones] [archivo|directorio ...] Las opciones incluyen: -r, o -R: borrar recursivamente. Esta opción es obligatoria para borrar un directorio, vacío o no. Sin embargo, también puede usar el comando rmdir para borrar directorios vacíos. -f: fuerza la supresión de los archivos o directorios, incluso si el usuario no tiene derecho de escritura sobre los archivos. 5- -- - Manejo de Shell en Linux Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei” Algunos ejemplos: ~$ rm imagenes/*.jpg archivo1 Borra todos los archivos cuyo nombre termina en .jpg en el directorio imagenes y borra el archivo archivo1 en el directorio actual. ~$ rm -Rf imagenes/misc/ archivo* Borra todo el directorio misc/ del directorio imagenes/ junto con todos los archivos del directorio actual cuyos nombres comiencen con archivo sin pedir confirmación alguna. Atención: U Atención: U Atención: U Atención: Un archivo borrado utilizando n archivo borrado utilizando n archivo borrado utilizando n archivo borrado utilizando rm se borra se borra se borra se borra irrevocablemente irrevocablemente irrevocablemente irrevocablemente. ¡No hay forma alguna de . ¡No hay forma alguna de . ¡No hay forma alguna de . ¡No hay forma alguna de recuperarlo! recuperarlo! recuperarlo! recuperarlo! Mover o renombrar archivos y directorios La sintaxis del comando mv (MoVe) es la siguiente: mv [opciones] [archivo|directorio …] Algunas opciones: -f: fuerza la operación, no hay advertencia alguna en caso de que la operación sobrescriba un archivo que ya existe. -i: lo contrario a –f, pide confirmación al usuario antes de sobre-escribir un archivo existente. Algunos ejemplos: ~$ mv -i /tmp/pics/*.png . Mover todos los archivos del directorio /tmp/pics/ cuyos nombres terminan en .png al directorio corriente (.), pidiendo confirmación antes de sobre-escribir cualquier archivo. ~$ mv pepe pupu Cambiar el nombre del archivo pepe por pupu. Si ya hubiera un directorio pupu, el efecto de este comando sería mover todo el directorio pepe (el directorio en sí mismo más todos los archivos y directorios que contenga, recursivamente) dentro del directorio pupu. ~$ mv —f archivo* imagenes/ tacho/ Mover, sin pedir confirmación, todos los archivos del directorio actual cuyos nombres comiencen con archivo junto con todo el directorio imagenes al directorio tacho. Copiar archivos y directorios cp (CoPy) reemplaza a los comandos copy, xcopy de DOS, y agrega más opciones. Su sintaxis es la siguiente: cp [opciones] [archivo|directorio …] cp tiene un montón de opciones. Estas son las más comunes: -R: copiar recursivamente; obligatoria para copiar un directorio, incluso si está vacío. -i: pedir confirmación antes de sobre-escribir cualquier archivo que pudiera sobre-escribirse. -f: lo opuesto de -i, reemplazar cualquier archivo existente sin pedir confirmación alguna. Algunos ejemplos: ~$ cp -i /tmp/imagenes/* imagenes/ Copia todos los archivos del directorio /tmp/imagenes al directorio imagenes/ ubicado en el directorio corriente. Si se va a sobre-escribir un archivo se pide confirmación. ~$ cp -R docs miscosas/ Copia recursivamente todo el directorio docs al directorio miscosas ubicados ambos en el directorio actual. ~$ cp pepe pupu Hace una copia del archivo pepe bajo el nombre pupu en el directorio actual. Manejo de Shell en Linux - 6 Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei” Manipulación de los atributos de archivos y directorios La serie de comandos que se presentan aquí se usan para cambiar el dueño o el grupo propietario de un archivo o sus permisos. Cambiar el dueño y el grupo propietario de uno o más archivos La sintaxis del comando chown (CHange OWNer) es la siguiente: chown [opciones] [archivo|directorio …] Las opciones incluyen: -R: recursivo; para cambiar el dueño de todos los archivos y subdirectorios en un directorio dado. -v: modo verboso; muestra todas las acciones efectuadas por chown; reporta cuales archivos cambiaron de dueño como resultado del comando y cuales no han cambiado. Algunos ejemplos: ~$ chown nobody shared/libro.tex Cambiar el dueño del archivo shared/libro.tex a nobody. chown -Rv reina:musica *.mid conciertos/ Atribuye todos los archivos en el directorio actual cuyos nombres terminan con .mid y todos los archivos y subdirectorios del directorio conciertos al usuario reina y al grupo musica, reportando los archivos y directorios afectados por el comando. El comando chgrp (CHange GRouP) le permite cambiar el grupo propietario de un archivo o un grupo de archivos; su sintaxis es muy similar a la del comando chown: chgrp [opciones] [archivo|directorio ...] Las opciones de este comando son las mismas que las de chown, y se usa de manera muy similar. Por lo tanto, el comando: ~$ chgrp disk /dev/hd* Le atribuye al grupo disk todos los archivos en el directorio /dev/ cuyos nombres comiencen con hd. Cambiar los permisos sobre los archivos y directorios El comando chmod (CHange MODe) tiene una sintaxis bien particular. La sintaxis general es: chmod [opciones] [archivo|directorio …] Pero lo que lo distingue son las diferentes formas que puede tomar el cambio de modo. Este se puede especificar de dos maneras: En octal; se utilizan tres números para especificar los permisos de los usuarios dueños, el grupo propietario y todos los “otros” usuarios respectivamente. Estos números deben estar contenidos en el rango 0-7. El número 4 se utiliza para permiso de lectura, 2 para permiso de escritura y 1 para permiso de ejecución. Si queremos representar un permiso combinado de lectura y escritura debemos utilizar el número 6 (sumando los permisos de lectura y escritura) y así sucesivamente con cualquier otra combinación. Por lo tanto, el permiso rwxr-xr-- se corresponde con el valor octal 754 ya que los permisos del dueño (los primeros tres caracteres “rwx”) representan un 7, los del grupo propietario (r-x) un 5 y los permisos de los otros (r--) un 4. Con expresiones; aquí los permisos se expresan con una secuencia de expresiones separadas por comas. Por lo tanto, una expresión toma la forma [categoría] <+|—|=>. La categoría puede ser una o más de: u (User, permisos para el dueño) g (Group, permisos para el grupo propietario) o (Others, permisos para los “otros”) Si no se especifica categoría alguna, los cambios se aplicarán para todas las categorías. Un “+” agrega un permiso, un “-“ lo niega y un “=” lo garantiza. 7- -- - Manejo de Shell en Linux Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei” Finalmente, el permiso es uno o más de: r (Read, lectura) w ( Write, escritura) x (eXecute, ejecución) Las opciones principales son bastante similares a las de chown o chgrp: -R: cambiar los permisos recursivamente. -v: modo “verboso”, muestra las acciones efectuadas para cada archivo. Ejemplos: ~$ chmod -R o-w /shared/docs Quitar recursivamente el permiso de escritura para los “otros” sobre todos los archivos y subdirectorios del directorio /shared/docs/. ~$ chmod -R og-w,o-x privado/ Quitar recursivamente el permiso de escritura para el grupo y para los otros sobre todo el directorio privado, y quitar el permiso de ejecución para los otros. ~$ chmod -v 644 varios/archivo* Cambia los permisos de todos los archivos del directorio varios cuyos nombres comiencen con archivo a rw-r--r-- (es decir, permiso de lectura para todos y permiso de escritura sólo para el dueño), y reporta sólo los archivos afectados por la operación. Lectura de archivos Mostrar el contenido de uno o más archivos en pantalla No hay mucho más que decir, este comando simplemente hace eso: mostrar el contenido de uno o más archivos en la salida estándar, normalmente la pantalla: ~$ cat /etc/fstab /dev/hda5 / ext3 defaults 1 1 /dev/hda6 /home ext3 defaults 1 2 /dev/hda7 swap swap defaults O O /dev/hda8 /usr ext3 defaults 1 2 none /proc proc defaults O O /dev/cdrom /mnt/cdrom auto user,noauto,nosuid,exec,nodev,ro O O En este primer ejemplo se muestra en pantalla el contenido de un archivo llamado fstab ubicado en el directorio /etc. ~$ cat conf.modules shells alias parport_lowlevel parport_pc pre—instail plip modprobe parport_pc ; echo 7 > /proc/parport/O/irq #pre—install pcmcia_core /etc/rc.d/init.d/pcmcia start #alias car—major-14 sound alias sound esssoloi keep /bin/zsh /bin/bash /bin/sh /bin/tcsh /bin/csh /bin/ash

No hay comentarios:

Publicar un comentario