Tabla de contenidos
root
)
$LANG
»
$PATH
»
$HOME
»
Aprender a usar un sistema informático es como aprender un idioma nuevo. Aunque los libros de ayuda y la documentación son útiles, uno debe practicarlo. Para ayudarle a comenzar sin tropiezos, he escrito unos pocos puntos básicos.
El poderoso diseño de Debian GNU/Linux tiene su origen en el sistema operativo Unix, un sistema operativo multiusuario y multitarea. Debe aprender a aprovechar el poder de estas características y las similitudes entre Unix y GNU/Linux.
No utilice únicamente documentos de GNU/Linux y utilice también documentos de Unix , ya que esto le permitirá acceder a mucha información útil.
Nota | |
---|---|
Si ha utilizado cualquier sistema tipo Unix durante algún tiempo con las herramientas de línea de órdenes, probablemente ya conozca lo que explico aquí. Utilice este documento para refrescar sus conocimientos. |
Si no ha instalado el Sistema de Ventanas
X con un gestor de inicio de sesión como gdm3
, al
iniciar el sistema se le presenta la pantalla de identificación en modo
texto. Suponiendo que el nombre de su equipo sea foo
, la
pantalla de identificación tendrá el aspecto siguiente:
foo login:
Si ha instalado un entorno gráfico de usuario (GUI) como GNOME o KDE, podrá acceder a una pantalla de identificación en modo texto pulsando Ctrl-Alt-F1 y podrá regresar al modo gráfico pulsando Alt-F7 (vea Sección 1.1.6, “Consolas virtuales” de lo que daremos detalles más adelante).
En el diálogo de entrada escriba su nombre de usuario,
p. ej. pingüino
y pulse la tecla Intro, a continuación
escriba su contraseña y pulse Intro otra vez.
Nota | |
---|---|
De acuerdo a la tradición Unix, el nombre de usuario y la contraseña en un sistema Debian son sensibles a mayúsculas. El nombre de usuario normalmente se elige de tal modo que esté compuesto únicamente por minúsculas. La primera cuenta de usuario normalmente se crea durante la instalación. El superusuario (root) puede crear cuentas de usuario adicionales con la orden adduser(8). |
El sistema empieza mostrando el mensaje de bienvenida almacenado en
«/etc/motd
» (Mensaje del día) y muestra un cursor para
realizar la petición de órdenes.
Debian GNU/Linux jessie/sid foo tty1 foo login: penguin Password: Last login: Mon Sep 23 19:36:44 JST 2013 on tty3 Linux snoopy 3.11-1-amd64 #1 SMP Debian 3.11.6-2 (2013-11-01) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. foo:~$
Ahora nos encontramos en el intérprete de órdenes (shell). El intérprete de órdenes interpreta las órdenes del usuario.
Si usted instaló el Sistema de Ventanas
X con un gestor de inicio de sesión como gdm3
de
GNOME al seleccionar la tarea «Entorno de
escritorio» durante la instalación, se le presentará la pantalla de inicio
de sesión cuando arranque su sistema. Podrá escribir ahí su nombre de
usuario y su contraseña para acceder a la cuenta de usuario sin
privilegios. Puede utilizar el tabulador para alternar entre el nombre de
usuario y la contraseña, o utilizar el ratón pulsando su butón principal.
Puede obtener un cursor del intérprete de órdenes en un entorno de trabajo
gráfico abriendo un programa x-terminal-emulator
como
gnome-terminal(1),
rxvt(1)
o
xterm(1).
Si usa el entorno de escritorio Gnome para abrir un intérprete de órdenes
debe hacer clic en «Aplicaciones« → «Accesorios« → «Terminal«.
Usted puede ampliar la información en la sección Sección 1.1.6, “Consolas virtuales”.
En algunos entornos de escritorio (como fluxbox
), no
existe un punto de acceso al menú tal cual. Si se encuentra en este caso,
simplemente pruebe a hacer clic con el (botón derecho del ratón) sobre el
fondo de escritorio y surgirá un menú.
La cuenta de root también es conocida como superusuario o usuario privilegiado. Con esta cuenta podrá llevar a cabo las siguientes tareas administrativas:
leer, escribir y borrar cualquier archivo del sistema independientemente de los permisos de dicho archivo;
cambiar la propiedad y los permisos de cualquier archivo del sistema;
cambiar la contraseña de cualquier usuario sin privilegios del sistema;
entrar en la cuenta de cualquier usuario sin usar su contraseña.
El poder ilimitado de la cuenta de superusuario necesita de un uso basado en la consideración y la responsabilidad.
Aviso | |
---|---|
Nunca comparta la contraseña del superusuario con nadie. |
Nota | |
---|---|
Los permisos de acceso a un archivo (incluidos los dispositivos como un CD-ROM u otros, que son simplemente otro archivo para el sistema Debian) pueden hacer que sea inaccesible a los usuarios distintos del superusuario. Aunque el uso de la cuenta de superusuario es una manera rápida de comprobar este tipo de situaciónes, resolverlas es algo que debe hacerse estableciendo adecuadamente los permisos del archivo y la relación de usuarios que pertenece a cada grupo (véase Sección 1.2.3, “Permisos del sistema de archivos”). |
A continuación podrá ver algunos métodos para acceder al intérprete de órdenes del superusuario utilizando la contraseña del mismo.
Escriba root
en la pantalla de inicio de sesión en modo
texto.
En el entorno de escritorio Gnome, haga clic en «Aplicaciones» → «Accesorios» → «Terminal de «Root».
Escriba «su -l
» desde cualquier intérprete de órdenes.
esto no conserva el entorno del usuario actual;
Escriba «su
» en cualquier intérprete de órdenes.
esto conserva parte del entorno del usuario actual.
Si el menú de su escritorio no inicia las herramientas gráficas de administración del sistema con los permisos adecuados automáticamente, puede iniciarlas desde el intérprete de órdenes del superusuario de un emulador de terminal de X como gnome-terminal(1), rxvt(1), o xterm(1). Vea Sección 1.1.4, “El cursor del intérprete de órdenes de superusuario” y Sección 7.8.5, “Ejecutando clientes X como superusuario”.
Aviso | |
---|---|
Nunca inicie una sesión gráfica con la cuenta de superusuario escribiendo
|
Aviso | |
---|---|
Nunca ejecute programas gráficos remotos no confiables en el sistema de ventanas X cuando se esté mostrando información crítica, porque dichos programas pueden realizar una intercepción pasiva de toda su pantalla de X. |
En el sistema Debian que se instala por defecto hay seis consolas tipo VT100 intercambiables, disponibles para
iniciar un intérprete de órdenes directamente en el equipo Linux. A menos
que se encuentre en un entorno gráfico, podrá cambiar entre ellas
presionando simultáneamente la tecla Alt situado en la
izquierda
y una de las teclas F1
—
F6
. Cada consola en modo texto permite acceder
independientemente a la cuenta y acceder a un entorno multiusuario. Este
entorno multiusuario es una gran característica de Unix y es muy adictivo.
Si se encuentra en el Sistema de Ventanas X, puede acceder a la primera
consola de texto presionando Ctrl-Alt-F1
, es decir, la
tecla Ctrl situada a la izquierda
, la tecla Alt
situada a la izquierda
y la tecla F1
pulsadas
simultáneamente. Puede volver al Sistema de Ventanas X, que habitualmente se
encontrará en la consola virtual 7, presionando Alt-F7
.
También puede cambiar a otra consola virtual, p. ej. a la consola 1, desde el intérprete de órdenes.
# chvt 1
Pulsando Ctrl-D
, es decir, la tecla Ctrl de la
izquierda
y la tecla d
simultáneamente en el
intérprete de órdenes, se cerrará. Si se encuentra en una consola de modo
texto, volverá a ver la pantalla de inicio de sesión. Aunque es normal
referirse a estos caracteres de control como «control D» en mayúscula, no es
necesario pulsar la tecla de mayúsculas. La abreviatura
^D
también es muy utilizada para
Ctrl-D
. Otra forma de cerrar el intérprete de órdenes es
escribiendo «exit».
Si se encuentra en un x-terminal-emulator(1) también puede cerrarlo de esta manera.
Como en cualquiero otro Sistema Operativo moderno donde el trabajo con archivos implica usarmemorias caché de los datos para mejorar la eficiencia, el sistema Debian necesita que se efectúe el procedimiento de cierre de forma correcta antes de que se pueda cortar la corriente con seguridad. Esto es así para mantener la integridad de los archivos, obligando que todos los cambios que están en la memoria se escriban al disco. Si hay activo algún programa de control de energía, el procedimiento de cierre apagará el sistema automáticamente (en otro caso, tendrá que apretar el botón de encendido durante unos segundos).
Puede apagar el sistema en el modo multiusuario estándar desde el intérprete de órdenes:
# shutdown -h now
Puede apagar el sistema en el modo monousuario desde el intérprete de órdenes como se muestra.
# poweroff -i -f
Otro forma de conseguirlo es pulsar Ctrl-Alt-Suprimir
(la
tecla Ctrl de la izquierda
, la tecla Alt de la
izquierda
, y la tecla Supr
al mismo tiempo)
para apagar si «/etc/inittab
» contiene
«ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
». Vea
inittab(5)
para más detalles.
Vea Sección 6.9.6, “Apagar un sistemas remoto utilizando SSH”.
Cuando la pantalla se vuelve loca tras hacer alguna cosa divertida como
«cat <un-archivo-binario>
», escriba
«reset
» en el intérprete de órdenes. Puede que no sea
posible ver la orden en la pantalla mientras la teclea. Además, puede
escribir «clear
» para limpiar la pantalla.
Una instalación mínima del sistema Debian sin ningún entorno de escritorio
proporciona la funcionalidad básica de Unix, sin embargo es una buena idea
instalar algunos paquetes de terminal de caracteres adicionales basados en
curses o en modo texto como mc
y vim
mediante la orden
apt-get(8)
para que los nuevos usuarios empiecen a tener experiencia con lo siguiente.
# apt-get update ... # apt-get install mc vim sudo ...
Si los paquetes antes mencionados están instalados con anterioridad, no se instalará ningún paquete nuevo.
Tabla 1.1. Relación de paquetes con programas interesantes en modo texto
paquete | popularidad | tamaño | descripción |
---|---|---|---|
mc
|
V:66, I:237 | 1450 | Un gestor de archivos, a pantalla completa, en modo texto |
sudo
|
V:517, I:739 | 3795 | Un programa para proporcionar algunos privilegios de superusuario a los usuarios de acuerdo a la configuración establecida |
vim
|
V:119, I:395 | 2799 | Editor de texto Unix Vi IMproved (Vi Mejorado), un editor de texto para programadores (versión estándar) |
vim-tiny
|
V:64, I:969 | 1343 | Editor de texto Unix Vi IMproved (Vi Mejorado), un editor de texto para programadores (versión compacta) |
emacs25
|
V:4, I:14 | 75 | El proyecto GNU Emacs, un editor de texto ampliable basado en Lisp |
w3m
|
V:80, I:433 | 2323 | Navegadores web en modo texto |
gpm
|
V:11, I:19 | 497 | Copiar y pegar, al estilo Unix, en la consola de texto (demonio) |
Puede ser una buena idea que usted leyera algo de documentación útil.
Tabla 1.2. Relación de paquetes con documentación útil
paquete | popularidad | tamaño | descripción |
---|---|---|---|
doc-debian
|
I:859 | 166 | Documentación del Proyecto Debian, Preguntas Frecuentes (FAQ) y otros documentos |
debian-policy
|
I:62 | 4245 | Manual de la Directrices Debian y documentos asociados |
developers-reference
|
I:6 | 1308 | Directrices e información para desarrolladores de Debian |
maint-guide
|
I:4 | 989 | Guía para nuevos Mantenedores de Debian |
debian-history
|
I:1 | 4059 | Historia del Proyecto Debian |
debian-faq
|
I:852 | 1277 | Preguntas frecuentes (FAQ) sobre Debian |
Puede instalar algunos de estos paquetes haciendo:
# apt-get install nombre_del_paquete
Si no quiere utilizar su cuenta de usuario aprende y práctica, puede crear
una cuenta de usuario, p. ej. pescado
, para ello realice
lo que se muetra.
# adduser pescado
Conteste a todas las preguntas.
Con ello se creará una nueva cuenta llamada
pescado
. Cuando termine de practicar, puede borrar esta
cuenta y su directorio de usuario como se muestra.
# deluser --remove-home pescado
Para una estación de trabajo típica de un único usuario o un escritorio
Debian en un portátil, es normal realizar una configuración sencilla de
sudo(8)
como se indica a continuación para permitir al usuario no privilegiado,
p. ej. pinguino
, obtener los privilegios administrativos
simplemente con su contraseña de usuario sin utilizar la contraseña del
superusuario.
# echo «pinguino ALL=(ALL) ALL« >> /etc/sudoers
También es usual hacerlo de la siguiente manera para permitir al usuario no
privilegiado, p. ej. pinguino
, ganar los privilegios
administrativos sin usar ninguna contraseña como se muestra.
# echo «pinguino ALL=(ALL) NOPASSWD:ALL« >> /etc/sudoers
Este truco solamente se debe usar en una estación de trabajo con un único usuario en la que usted sea el administrador y usuario único.
Aviso | |
---|---|
No establezca de esta manera privilegios para cuentas de usuarios no privilegiados en una estación de trabajo multiusuario porque es perjudicial para la seguridad del sistema. |
Atención | |
---|---|
La contraseña de la cuenta |
Atención | |
---|---|
Los privilegios administrativos pertenecen a alguien autorizado a realizar tareas de administración del sistema en la estación de trabajo. Nunca le de a un administrador del departamento de Sistemas de su compañía ni a su jefe tales privilegios a menos que estén autorizados y sean capaces. |
Nota | |
---|---|
Para proporcionar privilegios de acceso a determinados dispositivos y
determinados archivos debería considerar usar grupos para proporcionar acceso limitado en lugar
de utilizar los privilegios de |
Nota | |
---|---|
Con una configuración mejor pensada y cuidadosa, sudo(8) puede proporcionar privilegios administrativos limitados a otros usuarios en un sistema compartido sin compartir la contraseña de superusuario. Esto puede ayudar en el mantenimiento de un equipo con múltiples administradores de manera que usted pueda saber quién hizo qué. Por otra parte, puede preferir que nadie más tenga tales privilegios. |
Ahora está listo para practicar con su sistema Debian sin riesgo mientras use una cuenta de usuario sin privilegios.
Esto se debe a que el sistema Debian está, incluso en una instalación por defecto, configurado con los permisos de archivos adecuados que impide que los usuarios no privilegiados dañen el sistema. Por supuesto, puede haber aún algunos agujeros que podrían ser explotados, pero aquellos a quienes interesen esos detalles, que no trataremos aquí, pueden obtener la información precisa en Manual de seguridad de Debian.
Aprenderemos a utilizar un sistema Debian como un sistema tipo Unix como se muestra:
Sección 1.2, “Sistema de archivos tipo Unix” (conceptos básicos),
Sección 1.3, “Midnight Commander (MC)” (método de supervivencia),
Sección 1.4, “Fundamentos de entornos de trabajo tipo Unix” (método básico),
Sección 1.5, “Órdenes simples para el intérprete de órdenes” (mecanismos del intérprete de órdenes (shell)),
Sección 1.6, “Operaciones de texto al estilo de Unix” (método de procesado de texto).
En GNU/Linux y otros sistemas operativos tipo
Unix, los archivos se organizan en
directorios. Todos los archivos y
directorios están ordenados en un gran árbol que tiene como raíz
«/
». Se le llama árbol porque si se dibuja el sistema de
archivos, parece un árbol pero cabeza abajo.
Estos archivos y directorios pueden distribuirse entre varios
dispositivos.
mount(8)
se utiliza para añadir el sistema de archivos que se encuentra en un
dispositivo al gran árbol de archivos. Inversamente,
umount(8)
lo desconecta del gran árbol de archivos. En los núcleos más recientes de
Linux,
mount(8),
con determinadas opciones, puede unir parte de un sistema de ficheros en
otro sitio del árbol o puede montar un sistema de archivos como compartido,
privado, esclavo o no enlazable. Las opciones soportadas para cada sistema
de ficheros están disponibles en
«/usr/share/doc/linux-doc-*/Documentation/filesystems/
».
Los directorios de los sistemas Unix son
llamados carpetas en otros sistemas. Por
favor, note que no existe el concepto de unidad como «A:
» en ningún
sistema Unix. Solamente hay un sistema de archivos y todo se encuentra en
él. Esto es una gran ventaja en comparación con Windows.
Aquí damos algo de información básica sobre los archivos en Unix:
Los nombres de archivos son sensibles a
mayúsculas. Es decir, «MIARCHIVO
» y
«MiArchivo
» son archivos diferentes.
El directorio raíz significa la raíz del
sistema de archivos representado simplemente por «/
». No
lo confunda con el directorio del superusuario: «/root
».
Cada directorio tiene un nombre que puede contener cualquier letra o símbolo
excepto «/
». El
directorio raíz es una excepción: su nombre es «/
»
(pronunciado «barra« o «el directorio raíz«) y no puede ser renombrado.
Cada archivo o directorio es identificado con un nombre completamente cualificado, nombre absoluto, o ruta), dando la secuencia de directorios que deben atravesarse para alcanzarlo. Los tres términos son sinónimos.
Todos los nombres completamente
cualificados comienzan con el directorio «/
»,
y se coloca una «/
» entre cada dos nombres de directorio
o archivo en el nombre de fichero completo. La primera
«/
» es el directorio de más alto nivel (la raíz) y las
demás «/
» separan subdirectorios sucesivos hasta que
alcanzamos la última entrada, que es el nombre real del archivo en
cuestión. Las palabras pueden ser confusas. Elijamos el siguiente nombre completamente cualificado como un ejemplo:
«/usr/share/keytables/es.map.gz
». Es de uso generalizado
el referirse a la última entrada «es.map.gz
» como un
nombre de archivo.
El directorio raíz tiene un cierto número de ramificaciones, como
«/etc/
» y «/usr/
». Estos
subdirectorios a su vez se ramifican en más subdirectorios, como
«/etc/init.d/
» y «/usr/local/
». El
todo, visto colectivamente, es llamado el árbol de
directorios. Puede pensar que un nombre de archivo absoluto es
una ruta desde la raíz del árbol («/
») hasta la hoja de
una rama (un archivo). También oirá hablar del árbol de directorios como de
un árbol genealógico que descienden de un
elemento único llamado raíz («/
»: así, los subdirectorios
tienen padres y una ruta muestra la
genealogía completa de un archivo. Hay, además, rutas relativas que
comienzan de alguna otra manera que con el directorio raíz. Debe recordar
que el directorio «../
» hace referencia al directorio
padre. Esta terminología se utiliza también para otras estructuras
semejantes a los directorios, como las estructuras jerárquicas de datos.
No existen directorios, que forman parte de las rutas que describen
archivos, que se correspondan con dispositivos físicos, como discos
duros. Esto cambia respecto a RT-11, CP/M, OpenVMS, MS-DOS, AmigaOS y
Microsoft Windows, donde la ruta
contiene el nombre del dispositivo, como «C:\
». Sin
embargo, existen directorios que referencian dispositivos físicos como parte
del sistema de archivos. Lea Sección 1.2.2, “Sistemas de archivos internos”).
Nota | |
---|---|
Es posible usar casi cualquier letra o
símbolo en el nombre de un archivo, pero es una mala idea. Es preferible
evitar el uso de cualquier carácter que tenga un significado especial en la
línea de órdenes, incluido espacios, tabulaciones, saltos de línea y otros
caracteres especiales: |
Nota | |
---|---|
La palabra «root» puede referirse a «superusuario» o «directorio raíz». El contexto determinará su significado correcto. |
Nota | |
---|---|
El término ruta se utiliza tanto para los nombres de archivos que especifican la ruta completa, como hemos hecho con anterioridad, como en la ruta para la búsqueda de órdenes. El significado correcto vendrá determinado por el contexto. |
Los detalles de las buenas prácticas de la jerarquía de archivos es descrita
en el estándar de la jerarquía del sistema de archivos (Filesystem Hierarchy
Standard )
(«/usr/share/doc/debian-policy/fhs/fhs-2.3.txt.gz
» y
hier(7)).
Como usuario novel debe recordar lo siguiente:
Tabla 1.3. Relación de directorios clave y su uso
directorio | uso del directorio |
---|---|
/
|
directorio raíz |
/etc/
|
archivos principales para la configuración del sistema |
/var/log/
|
archivos de registro del sistema |
/home/
|
todos los directorios personales de usuario sin privilegios |
Siguiendo la tradición de Unix, el
sistema Debian GNU/Linux ofrece el sistemas de
archivos «/dev/
» que representa de manera
unificada el almacenamiento físico en discos duros u otros dispositivos de
almacenamiento y la interacción con los dispositivos hardware como las
consolas en modo texto o las consolas en serie remotas.
Cada archivo, directorio, tubería con nombre (sirve para compartir datos entre dos programas) o dispositivo físico tiene en el sistema Debian GNU/Linux una estructura con metainformación llamada inodo que describe sus propiedades como quién es su dueño (owner), el grupo al que pertenece, la fecha de último acceso, etc. La idea de incluir todo en el sistema de archivos fue una innovación de Unix y las versiones modernas de los núcleos de Linux la han llevado más allá. Hoy en día puede encontrar en el sistema de archivos incluso información de procesos en ejecución.
La representación unificada y abstracta tanto de entidades físicas como de procesos internos es sumamente útil ya que permite el uso de la misma orden para el mismo tipo de operación en dispositivos totalmente diferentes. Incluso es posible cambiar la forma de trabajar del núcleo escribiendo datos en archivos especiales que están enlazándolos a procesos en ejecución.
Sugerencia | |
---|---|
Si necesita determinar la correspondencia entre un árbol de archivos y un elemento físico, ejecute mount(8) sin parámetros. |
Los permisos en el sistema de archivos en los sistemas tipo Unix se definen basandose en tres categorías o tipos de usuarios:
el usuario que es dueño del archivo (u);
los usuarios que pertenecen al mismo grupo al que pertenece el archivo (h);
el resto de usuarios (o) también denominado «universo» o «todos».
Para cada archivo, cada permiso permite las siguientes acciones:
el permiso de lectura (r) permite al dueño examinar el contenido del archivo;
el permiso de escritura (w) permite al dueño modificar el archivo;
el permiso de ejecución (x) permite al dueño ejecutar el archivo como una orden.
Para los directorios, cada permiso permite las siguientes acciones:
el permiso de lectura (r) permite al dueño obtener una relación del contenido del directorio;
el permiso de escritura (w) permite al dueño añadir o borrar archivos al directorio;
el permiso de ejecución (x) permite al dueño acceder a los archivos del directorio.
El permiso de ejecución de un directorio no solo indican que se puede leer los archivos que contiene, sí no también permite ver sus atributos, como el tamaño y la fecha de modificación.
ls(1)
se usa para mostrar los permisos (y más detalles) de archivos o
directorios. Cuando se ejecuta con el parámetro «-l
»,
muestra la información siguiente ordenada por campos:
tipo de fichero (primer carácter),
permisos del archivo (nueve caracteres, tres para el usuario, tres para el grupo y los tres últimos para el resto, en este orden),
número de enlaces duros al archivo,
nombre del usuario que es dueño del archivo,
nombre del grupo al que pertenece,
tamaño del archivo expresado en caracteres (bytes),
fecha y hora del archivo (mtime),
nombre del archivo.
Tabla 1.4. La interpretación del primer carácter de cada línea de la salida de
«ls -l
» se interpreta como se muestra
carácter | significado |
---|---|
-
|
archivo normal |
d
|
directorio |
l
|
enlace simbólico |
c
|
nodo de dispositivo orientado a caracteres |
b
|
nodo de dispositivo orientado a bloques |
p
|
tubería con nombre |
s
|
socket |
Para cambiar el dueño de un archivo, el superusuario utiliza la orden
chown(1).
Para alterar el grupo de un archivo, su dueño utiliza la orden
chgrp(1).
Para modificar los permisos del acceso al archivo o directorio, su dueño o
el superusuario utilizan la orden
chmod(1).
La sintaxis para operar sobre un archivo foo
es la que se
muestra.
# chown <nuevo_dueño> foo # chgrp <nuevo_grupo> foo # chmod [ugoa][+-=][rwxXst][,...] foo
Por ejemplo, se puede asignar a un árbol de directorios como dueño al
usuario foo
y como grupo bar
como se
muestra.
# cd /ruta/a/un/lugar/ # chown -R foo:bar . # chmod -R ug+rwX,o=rX .
Existen tres bits adicionales de permisos especiales.
El bit set user ID (s o S en lugar del permiso del dueño x)
El bit set group ID (s o S en lugar del permiso del grupo x)
El bit sticky (t o T en vez del permiso de todos x)
Estos bits aparecerán en mayúsculas en la
salida de la orden «ls -l
» si los permisos de ejecución
correspondientes están sin asignar.
La configuración de set user ID en un archivo ejecutable permite a un usuario ejecutarlo con todos los privilegios de su dueño (al ejecutarlo con el identificador del dueño, por ejemplo root). Igualmente la configuración set group ID en un archivo ejecutable permite al usuario ejecutarlo con todos los privilegios de su grupo (al ejecutarlo con el identificador del grupo, por ejemplo root). Esto crea riesgos de seguridad, por lo que su configuración debe ser extremadamente cuidadosa.
La configuración del bit set group ID en un directorio permite la creación de archivosal estilo BSD, donde todos los archivos creados en el directorio pertenecen al mismo grupo que el directorio.
Activar el sticky bit en un directorio
impide que sus archivos sean eliminados por alguien que no es su dueño. En
los directorios con permisos de escritura para todos, como
«/tmp
», o para su grupo, con el fin de asegurar la
integridad de los archivos, se debe eliminar los permisos de escritura de los archivos. Además se debe
configurar el sticky bit en el directorio
para evitar que cualquier usuario con permiso de escritura en él pueda
borrar un archivo y después crear otro con el mismo nombre.
Aquí están algunos ejemplos interesantes.
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4 crw------T 1 root root 108, 0 Oct 16 20:57 /dev/ppp -rw-r--r-- 1 root root 2761 Aug 30 10:38 /etc/passwd -rw-r----- 1 root shadow 1695 Aug 30 10:38 /etc/shadow -rwsr-xr-x 1 root root 973824 Sep 23 20:04 /usr/sbin/exim4 $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 14 root root 20480 Oct 16 21:25 /tmp drwxrwsr-x 10 root staff 4096 Sep 29 22:50 /usr/local drwxr-xr-x 10 root root 4096 Oct 11 00:28 /usr/src drwxrwsr-x 2 root mail 4096 Oct 15 21:40 /var/mail drwxrwxrwt 3 root root 4096 Oct 16 21:20 /var/tmp
La orden chmod(1) tiene otra forma de describir los permisos mediante números. Este modo numérico utiliza 3 o 4 dígitos en base octal (base 8).
Tabla 1.5. El modo numérico en chmod(1) es como se muestra.
dígito | significado |
---|---|
1º dígito (opcional) | suma de set user ID (=4), set group ID (=2) y sticky bit (=1) |
2º dígito | suma de los permisos de lectura (=4), escritura (=2) y ejecución (=1) para el usuario |
3º dígito | idem para el grupo |
4º dígito | idem para todos |
Parece más complicado de lo que realmente es. Si se fija en las primeras
columnas (de la 2 a la 10) de la salida de la orden «ls
-l
» y lee en binario (base 2) la representación de los permisos
del archivo («-» siendo «0» y cualquiera de «rwx» un «1»), cada tres dígitos
del modo binario representan un dígito del modo de representación numérico
en octal (base 8).
Por ejemplo, intente lo siguiente
$ touch foo bar $ chmod u=rw,go=r foo $ chmod 644 bar $ ls -l foo bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo
Sugerencia | |
---|---|
Si necesita acceder a información de salida de la orden « |
Los permisos que se asignan por defecto a los nuevos archivos y directorios
cuando estos se crean están definidos por la orden interna del intérprete de
órdenes umask
. Consulte
dash(1),
bash(1)
y
builtins(7).
(permisos del archivo) = (permisos concedidos al archivo) & ~(valor umask)
Tabla 1.6. Ejemplos de valores de umask
umask | permisos creados para un archivo | permisos creados para un directorio | uso |
---|---|---|---|
0022
|
-rw-r--r--
|
-rwxr-xr-x
|
modificable solo por el usuario |
0002
|
-rw-rw-r--
|
-rwxrwxr-x
|
modificable por el grupo |
El sistema Debian utiliza por defecto un esquema de grupos privados de
usuarios (UPG). Un grupo privado de usuario se crea cuando sea añade un
nuevo usuario al sistema. El UPG tiene el mismo nombre que el usuario para
el cual fue creado y ese usuario es el único miembro de ese grupo. En el
esquema UPG es seguro asignar a la máscara (umask) el valor
0002
ya que cada usuario tiene un grupo privado
propio. (En algunas variantes de Unix, es común que todos los usuarios no
privilegiados pertenezcan al mismo grupo users
siendo buena idea asignar
el valor 0022
a la máscara por motivos de seguridad.)
Sugerencia | |
---|---|
Active UPG añadiendo « |
Para que los permisos de un grupo se apliquen a un usuario, el necesario
añadir el usuario al grupo usando «sudo vigr
» para editar
/etc/group
y «sudo vigr -s
» para
editar /etc/gshadow
. Para que se active la nueva
configuración de grupos es necesario cerrar la sesión e iniciarla (o
ejecutar «exec newgrp
»).
Nota | |
---|---|
Otra manera dinámica consiste en añadir usuarios a grupos durante el proceso
de acreditación añadiendo la línea « |
En el sistema Debian los dispositivos hardware son también archivos. Si tiene problemas para que un usuario acceda a dispositivos como el CD-ROM o dispositivos de memoria USB, podría solucionarse añadiendo el usuario al grupo pertinente.
Algunos grupos importantes del propio sistema permiten a sus miembros
acceder a archivos y directorios específicos sin privilegios de
superusuario
.
Tabla 1.7. Relación de grupos importantes del sistema para el acceso a archivos
grupo | descripción de archivos y dispositivos accesibles |
---|---|
dialout
|
acceso directo y completo a los puertos serie
(«/dev/ttyS[0-3] »)
|
dip
|
acceso limitado a los puertos series para establecer conexiones a internet por via telefónica (dialup IP) a pares confiables |
cdrom
|
dispositivos CD-ROM, DVD+/-RW |
audio
|
dispositivo audio |
video
|
dispositivo de video |
scanner
|
escáner |
adm
|
registros de supervisión del sistema |
staff
|
algunos directorios para la administración básica del sistema:
«/usr/local », «/home »
|
Sugerencia | |
---|---|
Necesita pertenecer al grupo |
Algunos grupos importantes proporcionados por el sistema permiten a sus
miembros ejecutar determinadas órdenes sin privilegios de
superusuario
.
Tabla 1.8. Relación de grupos importantes del sistema para la ejecución de órdenes específicas
grupo | órdenes permitidas |
---|---|
sudo
|
ejecuta sudo sin su contraseña
|
lpadmin
|
ejecuta órdenes para añadir, modificar y eliminar las impresoras disponibles |
Puede consultar una relación completa de los usuarios y grupos del sistema
en el documento «Users and Groups«
/usr/share/doc/base-passwd/users-and-groups.html
del
paquete base-passwd
.
Consulte las órdenes para la gestión de usuarios y grupos: passwd(5), group(5), shadow(5), newgrp(1), vipw(8), vigr(8) y pam_group(8).
Existen tres tipos de marcas o sellos de tiempo para un archivo GNU/Linux.
Tabla 1.9. Relación de tipos de marcas de tiempo
tipo | significado (definición histórica en Unix) |
---|---|
mtime |
el momento de modificación (ls -l )
|
ctime |
el momento de cambio de estado (ls -lc )
|
atime |
el momento del último acceso (ls -lu )
|
Nota | |
---|---|
ctime no es el momento de creación del archivo. |
Nota | |
---|---|
El significado actual de atime en sistemas GNU/Linux puede no ser diferente del de Unix clásico. |
la sobreescritura de un archivo modifica todas sus propiedades de tiempo , mite, ctime y atime;
el cambio de dueño o de permisos de un archivo modifica sus propiedades ctime y atime;
la lectura de un archivo en un sistema Unix clásico modifica su propiedad atime.
La lectura de un archivo en GNU/Linux modifica su propiedad atime si está montado con la opción
«strictatime
»
La lectura de un archivo por primera vez o después de un día cambia la
propiedad atime en un sistema GNU/Linux
si el sistema de archivos está montado con la opción
«relatime
». (comportamiento por defecto desde Linux
2.6.30)
La lectura del archivo no cambia su propiedad atime en un sistema GNU/Linux si el sistema de
archivos está montado con la opción «noatime
».
Nota | |
---|---|
Las opciones de montaje « |
Utilice la orden touch(1) para cambiar las marcas de tiempo de los archivos existentes.
La orden ls
muestra como salida, en lo referente a las
marcas de tiempo, el formato de la antigua configuración regional
(«C
») si está no es inglesa
(«fr_FR.UTF-8
»).
$ LANG=fr_FR.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo $ LANG=C ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
Sugerencia | |
---|---|
Consulte Sección 9.2.5, “Personalización de la visualización de la fecha y hora” para
personalizar la salida de « |
Existen dos métodos para asociar un archivo «foo
» con
otro nombre «bar
»:
duplica el nombre para un archivo ya existente;
«ln foo bar
»
es un archivo especial que referencia o apunta al nombre del archivo que quiere referenciar;
«ln -s foo bar
».
Con el siguiente ejemplo se muestra los cambios en el contador de enlaces y
las sutiles diferencias de la orden rm
.
$ umask 002 $ echo "Contenido original" > foo $ ls -li foo 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo $ ln foo bar # enlace duro $ ln -s foo baz # enlace blando $ ls -li foo bar baz 1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo 1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo $ rm foo $ echo "Nuevo contenido" > foo $ ls -li foo bar baz 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo 1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo $ cat bar Contenido original $ cat baz Nuevo contenido
Los enlaces duros deben ser construidos en el mismo sistema de archivos y
comparten el mismo «inodo» como revela el parámetro «-i
»
de la orden
ls(1).
Los enlaces simbólicos siempre tienen permisos de acceso al archivo
nominales «rwxrwxrwx
», como se mostró en el ejemplo
anterior, con los permisos reales que tenga el archivo al que referencia.
Atención | |
---|---|
En general es preferible no crear nunca enlaces simbólicos o enlaces duros excepto que tenga poderosas razones. Los enlaces simbólicos puede causar problemas graves al crear bucles en el sistema de archivos. |
Nota | |
---|---|
En general es preferible crear enlaces simbólicos a enlaces duros, al menos que tenga alguna buena razón para ello. |
El directorio .
enlaza al propio directorio en el que
aparece, por lo que la cuenta de enlaces de cualquier nuevo directorio es
2. El directorio «..
» enlaza al directorio padre, por lo
que la cuenta de enlaces del directorio se incrementa con la creación de
nuevos subdirectorios.
Si proviene de Windows, pronto comprenderá lo bien diseñado que están los enlaces de Unix, comparados con su equivalente en Windows que son los accesos directos (shortcuts). Gracias su implementación en el sistema de archivos, las aplicaciones no distinguen entre el archivo original y su enlace. En el caso de los enlaces duros, ciertamente no existe diferencia.
Una tubería con nombre es un archivo que se comporta como una tubería. Usted introduce algo dentro del archivo y sale por el otro lado. Por esa razón se dice que es FIFO o primero-en-entrar-primero-en-salir: lo primero que se introduce en la tubería es lo primero en salir por el otro lado.
Si se escribe en una tubería con nombre, los procesos que han escrito en la
tubería no pueden terminar hasta que la información que han escrito es leída
de la tubería. Si se lee de una tubería con nombre, el proceso lector espera
hasta que no hay nada que leer antes de terminar. El tamaño de la tubería es
siempre cero --- no almacena datos, la tubería solo comunica los dos
procesos de igual manera que lo hace el intérprete de órdenes mediante la
sintaxis «|
». Sin embargo, desde que la tubería tiene un
nombre, los dos procesos no tienen que estar en la misma línea de órdenes y
ni siquiera ser ejecutados por el mismo usuario. Las tuberías fueron una
innovación muy relevante de Unix.
Por ejemplo, intente lo siguiente
$ cd; mkfifo mypipe $ echo "hola" >mypipe & # lo manda a segundo plano [1] 8022 $ ls -l mypipe prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe $ cat mypipe hola [1]+ Done echo "hola" >mypipe $ ls mypipe mypipe $ rm mypipe
Los «sockets» se usan de forma generalizada en las comunicaciones en Internet, bases de datos y sistemas operativos. Son similares a las tuberías con nombre (FIFO) y permiten que los procesos intercambien información entre diferentes equipos. Para los «sockets» los procesos no necesitan estar ejecutandose al mismo tiempo, ni ser hijos del mismo proceso padre. Este es el mejor sistema para la comuniación entre procesos (IPC). El intercambio de información puede ocurrir en la red entre equipos. Los dos tipos de «sockets» más comunes son los «sockets« Internet y los «sockets» de dominio Unix.
Sugerencia | |
---|---|
« |
Los archivos de dispositivos referencian
a dispositivos físicos o virtuales del sistema, como el disco duro, la
tarjeta de video, la pantalla o el teclado. Un ejemplo de dispositivo
virtual es la consola, representado por «/dev/console
».
Hay dos tipos de archivos de dispositivos:
dispositivos orientados a carácter,
se accede a un carácter cada vez,
1 carácter = 1 byte,
p. ej. teclado, puerto serie, …
dispositivo orientado a bloque.
se accede a unidades grandes llamadas bloques,
1 bloque > 1 byte,
p. ej. un disco duro, …
Los archivos de dispositivos se pueden leer y escribir , aunque el fichero
puede contener datos binarios los cuales son un galimatias incomprensibles
para humanos. Algunas veces escribir datos directamente en esos ficheros
puede ayudar a resolver problemas de conexión con los dispositivos. Por
ejemplo, usted puede enviar un archivo de texto al dispositivo de la
impresora«/dev/lp0
» o mandar órdenes de modem por el
puerto serie «/dev/ttyS0
». Pero, al menos que se haga
con cuidado, puede causar un problema mayor. Así que tenga cuidado.
Nota | |
---|---|
Comúnmente a la impresora se accede utilizando lp(1). |
El número de nodo del dispositivo se muestra por la ejecución de ls(1) como se muestra.
$ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero brw-rw---T 1 root disk 8, 0 Oct 16 20:57 /dev/sda brw-rw---T+ 1 root cdrom 11, 0 Oct 16 21:53 /dev/sr0 crw-rw---T 1 root dialout 4, 64 Oct 16 20:57 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Oct 16 20:57 /dev/zero
«/dev/sda
» tiene como número de disposito mayor 8 y como
número de dispositivo menor 0. Los usuario pueden realizar operaciones de
lectura/escritura haciendo si pertenecen al grupo disk
.
«/dev/sr0
» tiene como número de dispositivo mayor 11 y
como menor 0. Los usuarios pueden realizar operaciones de lectura/escritura
si pertenecen al grupo cdrom
.
«/dev/ttyS0
» tiene el número de dispositivo mayor 4 y
menor 64. Los usuarios pueden realizar operaciones de lectura/escritura si
pertenecen al grupo dialout
.
«/dev/zero
» tiene como número mayor de dispositivo 1 y
como menor 5. Todos los usuarios pueden realizar operaciones de
lectura/escritura.
En un sistema Linux moderno, el sistema de archivos en
«/dev/
» se rellena de forma automática mediante
udev(7).
Existen algunos archivos de dispositivos especiales.
Tabla 1.10. Relación de archivos de dispositivos especiales
archivo de dispostivo | acción | respuesta |
---|---|---|
/dev/null
|
lectura | devuelve el «carácter de final de archivo (EOF)» |
/dev/null
|
escritura | no devuelve nada (un pozo sin fondo al que enviar datos) |
/dev/zero
|
lectura |
devuelve «el carácter \0 (NUL)» (difiere del número cero
representado en ASCII)
|
/dev/random
|
lectura | devuelve caracteres aleatorios creados por el generador de números aleatorios confiable, ofreciendo entropía real (baja) |
/dev/urandom
|
lectura | devuelve caracteres de forma aleatoria desde el generador de números pseudo-aleatorios de seguridad criptográfica |
/dev/full
|
escritura | devuelve el error de disco lleno (ENOSPC) |
Con frecuencia son utilizados en las redirecciones del intérprete de órdenes (consulte Sección 1.5.8, “Secuencias de órdenes comunes y redirecciones del intérprete de órdenes”).
Los pseudo sistemas de archivos procfs y
sysfs, que se montan en
«/proc
» y «/sys
», son estructuras de
datos internas del núcleo que se muestran al espacio de usuario. Expresado
de otra forma, estas entradas son virtuales actuan como una ventana
apropiada al funcionamiento del sistema operativo.
El directorio «/proc
» contiene (entre otras cosas) un
subdirectorio por cada proceso que se está ejecutando en el sistema
operativo, cuyo nombre es el identificador del proceso (PID). Las
herramientas del sistema que acceden ainformación de los procesos, como
ps(1),
obtienen dicha información de la estructura de este directorio.
Los el subárbol de directorios «/proc/sys/
» contienen
interfaces que permiten cambiar algunos parámetros del núcleo en tiempo de
ejecución. (Se puede realizar las mismas operaciones por medio de la
ordensysctl(8)
o de su archivo de configuración «/etc/sysctl.conf
».)
La gente normalmente se alarma del gran tamaño de que un archivo en
particular, «/proc/kcore
». Es (más o menos) una copia del
contenido de la memoria del equipo. Es útil para depurar el núcleo y es un
archivo virtual que es una referencia a la memoria del equipo, así es que no
hay que preocuparse por su tamaño.
El subárbol de «/sys
» contiene las estructuras de datos
exportadas del núcleo, sus atributos y las relaciones entre ellas. También
contiene algunas interfaces para cambiar algunos parámetros del núcleo en
tiempo de ejecución.
Consulte «proc.txt(.gz)
»,
«sysfs.txt(.gz)
» y otros documentos que forman parte de
la documentación del núcleo de Linux
(«/usr/share/doc/linux-doc-*/Documentation/filesystems/*
»)
incluidos en el paquete linux-doc-*
.
El sistema de archivos temporal tmpfs tiene la función de mantener todos los archivos en la memoria virtual. Los datos de «tmpfs« de la caché de páginas de la memoria puede ser enviada al área de intercambio en disco cuando sea necesario.
El directorio «/run
» se monta como tmpfs al comienzo del
proceso de arranque. Así se permite la escritura sobre él, incluso cuando
el directorio «/
» está montado en solo lectura. Aquí se
guardan los archivos en estado temporal y sustituye a varios directorios de
la Jerarquía Estándar del Sistema
de Ficheros versión 2.3:
«/var/run
» → «/run
»,
«/var/lock
» → «/run/lock
»,
«/dev/shm
» → «/run/shm
».
Consulte el documento del núcleo de Linux
«tmpfs.txt(.gz)
»
(«/usr/share/doc/linux-doc-*/Documentation/filesystems/*
»)
que está en el paquete linux-doc-*
.
Midnight Commander (MC) es una «navaja multiusos» GNU para la consola de Linux y otros entornos de terminal. Aporta a los nuevos usuarios una experiencia de consola basada en menús que es más sencilla de aprender que las órdenes estándar de Unix.
Necesitará instalar el paquete de Midnight Commander llamado
«mc
como se muestra.
$ sudo apt-get install mc
Podrá explorar el sistema Debian utilizando la orden mc(1). Esta es la mejor forma de aprender. Por favor, navege entre algunos directorios interesantes utilizando las teclas del cursor e «Intro»:
«/etc
» y sus subdirectorios;
«/var/log
» y sus subdirectorios;
«/usr/share/doc
» y sus subdirectorios;
«/sbin
» y «/bin
».
Para cambiar el directorio de trabajo de MC después de salir y no tener que
ejecutar una orden cd
al último directorio, le sugiero
que cambie «~/.bashrc
» para incluir el archivo de órdenes
que está en el paquete mc
.
. /usr/lib/mc/mc.sh
Consulte
mc(1)
(en la opción «-P
») para comprobar por qué. (Si no
comprende exactamente lo que estoy diciendo puede hacerlo más tarde.)
Para ejecutar MC escriba lo que se muestra.
$ mc
MC permite ejecutar todas las operaciones sobre archivos a través de sus menús, con el mínimo esfuerzo para el usuario. Para acceder a la pantalla de ayuda presione F1. Puede probar MC con solo pulsar las teclas de los cursores y las teclas de función.
Nota | |
---|---|
En algunas consolas como
gnome-terminal(1),
la pulsación de las teclas de función las recibe la consola. Esta
funcionalidad se desactiva en «Editar» → «Atajos de teclado» para
|
Si encuentra problemas de codificación de los caracteres y parecen no tener
sentido, añadir «-a
» como parámetro a la orden MC ayudará
a evitar problemas.
Si esto no soluciona el problema consulte Sección 9.4.6, “La configuración del terminal”.
Por defecto hay dos paneles con dos directorios y su contenido. Otro modo útil es asignar el panel derecho para que muestre los permisos de los archivos, etc. A continuación mostraremos algunas claves. Con el demonio gpm(8) ejecutándose, se puede usar el ratón en la consola de caracteres de Linux. (Asegurese de pulsar la tecla de mayúsculas para obtener el comportamiento normal cuando corte y pege en MC.)
Tabla 1.11. Funciones de las teclas en MC
tecla | función |
---|---|
F1
|
menú de ayuda |
F3
|
visión del contenido del archivo |
F4
|
editor interno |
F9
|
activa el menú superior |
F10
|
salida de Midnight Commander |
Tab
|
moverse entre los paneles |
Insertar o Ctrl-T
|
marcar el fichero para seleccionar varios para otra operación como copiar |
Del
|
borrar el archivo (tenga cuidado---active el modo seguro de borrado en MC) |
Cursores
|
se explican por si mismas |
La orden cd
cambia el directorio en el panel seleccionado
Ctrl-Intro
o Alt-Intro
copia el nombre
del archivo a la orden en la línea de órdenes Se utiliza en combinación con
las órdenes
cp(1)
y
mv(1)
para añadir parámetros a las órdenes.
Alt-Tab
muestra los posibles archivos elegibles por
expansión del nombre en el intérprete de órdenes.
Se puede especificar los directorios de inicio de ambos paneles como
parámetros a MC; por ejemplo, «mc /etc/ /root
».
Esc
+ tecla numérica n
→
tecla de función n
(p. ej., Esc
+
1
→ F1
, etc.; Esc
+
0
→ F10
).
Pulsando Esc
antes que la tecla tiene el mismo efecto que
presionar Alt
y otra tecla a la vez.; p. ej. pulse
Esc
+c
para obtener
Alt-C
. Esc
es llamada la meta-tecla y
algunas veces se representa como «M-
».
El editor interno tiene un esquema de corta-y-pega interesante. Al
pulsarF3
comienza la selección, una segunda pulsación de
F3
finaliza la selección y resalta lo
seleccionado. Entonces puede mover el cursor. Si presiona F6 el áŕea
seleccionada se moverá a la posición del cursor. Si presiona F5 el área
seleccionadad se copia e inserta en la posición del cursor.
F2
guarda el archivo. F10
permite
salir. La mayor parte de las teclas cursor funcionan de forma intuitiva.
El editor puede abrirse directamente con un archivo usando una de las siguientes órdenes:
$ mc -e nombre_de_archivo_a_editar
$ mcedit nombre_de_archivo_a_editar
El editor posee una sola ventana, pero se pueden usar varias consolas de Linux para obtener el mismo comportamiento. Para copiar entre ventanas, use las teclas Alt-F<n> para cambiar entre consolas virtuales y utilice «Archivo→Insertar archivo» or «Archivo→Copiar a un archivo» para mover una parte de un archivo a otro.
El editor interno puede ser reemplazado por cualquier otro editor de su elección.
De hecho, muchos programas usan la variable de entorno
«$EDITOR
» o «$VISUAL
» para determinar
el editor a utilizar. Si al principio no está cómodo con
vim(1)
o
nano(1),
puede cambiar su valor a «mcedit
» añadiendo la siguientes
líneas a «~/.bashrc
».
export EDITOR=mcedit export VISUAL=mcedit
Si es posible, mi recomendación es asignarles el valor
«vim
».
Si está incómodo con vim(1) puede utilizar mcedit(1) para la mayor parte de las tareas de administración del sistema.
MC posee un visor inteligente. Es una gran herramienta para buscar palabras
en los documentos. Yo siempre lo uso para archivos del directorio
«/usr/share/doc
». Es la manera más rápida de navegar a
través de la ingente cantidad de información de Linux. Este visor puede
iniciarse de forma separada utilizando una de las órdenes que se muestran.
$ mc -v ruta/al/archivo_a_visualizar
$ mcview ruta/al/archivo_a_visualizar
Pulse Intro en un archivo y el programa, de acuerdo a su contenido, abrirá el archivo (consulte Sección 9.3.11, “Personalizando el inicio de un programa”). Es una funcionalidad de MC muy útil.
Tabla 1.12. Accion de la tecla Intro en MC
tipo de archivo | acción de la tecla Intro |
---|---|
archivo ejecutable | ejecuta la orden |
archivo de página de manual | envia el contenido a la aplicación de visualización |
archivo html | envia el contenido al navegador web |
archivos «*.tar.gz » y «*.deb »
|
muestra su contenido como si fuera un subdirectorio |
Para que opere de forma correcta el visor y las funciones virtuales de archivo, los archivos visibles no deben tener permisos de ejecución. Puede cambiar su estado con chmod(1) o en el menú de archivo de MC.
MC puede acceder a archivos en Internet a través de FTP. Vaya al menú
pulsando F9
, entonces pulse «p
» para
activar el sistema de archivos FTP virtual. Escriba la URL con el formato
«nombre_de_usuario:contraseña@nombre_del_equipo.nombre_del_domino
»,
para que acceda al directorio remoto con la apariencia de tratarse de uno
local.
Pruebe con la URL «[http.us.debian.org/debian]» y navege a través del archivo de Debian.
Aunque MC permite realizar casi cualquier cosa, es importante que aprenda a utilizar la línea de órdenes y el intérprete de órdenes y acostumbrarse a un entorno de trabajo tipo Unix.
Puede elegir el intérprete de órdenes (shell) mediante chsh(1).
Tabla 1.13. Relación de intérpretes de órdenes
paquete | popularidad | tamaño | Intérprete de órdenes POSIX | descripción |
---|---|---|---|---|
bash
|
V:826, I:999 | 6462 | Sí | Bash: el intérprete de órdenes GNU Bourne Again SHell (estándar de facto) |
tcsh
|
V:10, I:34 | 1311 | No | TENEX C Shell: una versión mejorada de Berkeley csh |
dash
|
V:929, I:988 | 212 | Sí | Intérprete de órdenes Debian Almquist, bueno para archivos de órdenes |
zsh
|
V:38, I:70 | 2401 | Sí | Intérprete de órdenes Z: un intérprete de órdenes con muchas mejoras |
mksh
|
V:6, I:12 | 1383 | Sí | Versión de el intérprete de órdenes Korn |
csh
|
V:2, I:11 | 343 | No | Intérprete de órdenes OpenBSD C, una versión de Berkeley csh |
sash
|
V:0, I:5 | 1054 | Sí | Intérprete de órdenes Stand-alone con
órdenes internas (no es el estándar «/bin/sh »)
|
ksh
|
V:4, I:20 | 3294 | Sí | la versión AT&T actual del intérprete de órdenes Korn |
rc
|
V:0, I:3 | 154 | No | implementación del intérprete de órdenes rc de AT&T Plan 9 |
posh
|
V:0, I:0 | 190 | Sí |
Intérprete de órdenes que cumple con las directrices estándar (derivado de
pdksh )
|
Sugerencia | |
---|---|
Aunque los intérpretes de órdenes tipo POSIX comparten la sintaxis básica, pueden cambiar el comportamiento de algunos elementos básicos como sus variables o la expansión de nombres de archivos con comodines. Por favor, compruebe su documentación para obtener más detalles. |
En este capítulo se sobreentiende que el intérprete de órdenes es
bash
.
Puede personalizar
bash(1)
en el archivo de configuración «~/.bashrc
».
Por ejemplo, pruebe con lo que se muestra.
# activa el completado programable de la terminal bash f ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi # CD al finalizar MC . /usr/lib/mc/mc.sh # asigna CDPATH de la forma correcta CDPATH=.:/usr/share/doc:~:~/Desktop:~ export CDPATH PATH="${PATH+$PATH:}/usr/sbin:/sbin" # añade el PATH el bin del usuario si este existe if [ -d ~/bin ] ; then PATH="~/bin${PATH+:$PATH}" fi export PATH EDITOR=vim export EDITOR
Sugerencia | |
---|---|
Puede encontrar más posibilidades de personalización de
|
Sugerencia | |
---|---|
El paquete |
En un entorno tipo Unix, hay algunas teclas
que tiene un uso especial. Tenga en cuenta que en una consola modo texto de
Linux, solo las teclas Ctrl
y Alt
del
lado izquierdo funcionan de la forma esperada. Algunas combinaciones de
teclas que conviene recordar se muestran a continuación.
Tabla 1.14. Relación de combinaciones de teclado en bash
tecla | decripción de la combinación de teclas |
---|---|
Ctrl-U
|
borra el contenido desde el cursor al inico de la línea |
Ctrl-H
|
borra el carácter anterior al cursor |
Ctrl-D
|
fin de la entrada (finaliza el intérprete de órdenes en uso) |
Ctrl-C
|
finaliza el programa en ejecución |
Ctrl-Z
|
para temporalemente el programa que pasa a segundo plano |
Ctrl-S
|
para la salida por pantalla |
Ctrl-Q
|
reanuda la salida por pantalla |
Ctrl-Alt-Del
|
reinicia/apaga el sistema, consulte inittab(5) |
tecla izquierda Alt (opcionalmente, tecla de
Windows )
|
meta-tecla para Emacs e interfaces similares de usuario |
flecha arriba
|
retrocede en el histórico de órdenes bash
|
Ctrl-R
|
búsqueda en el histórico de órdenes de bash
|
Tab
|
completa la entrada de la orden con el nombre de archivo en
bash
|
Ctrl-V Tab
|
introduce Tab sin completar la orden en
bash
|
Sugerencia | |
---|---|
La funcionalidad del terminal de |
Las operaciones con el ratón al estilo de Unix necesitan ratones de tres botones.
Tabla 1.15. Relación de operaciones con el ratón al estilo Unix
acción | respuesta |
---|---|
boton izquierdo y arrastre del ratón | selección y copia al portapapeles |
botón izquierdo | inicio de la selección |
botón derecho | fin de la selección y copia al portapapeles |
botón de en medio | pegar del portapapeles en la posición del cursor |
La rueda central que se encuentra en los ratones actuales sustituye al tercer botón. Si dispone de un ratón con únicamente dos botones la función del botón de en medio se realiza pulsando a la vez el botón izquierdo y el derecho. Para utilizar el ratón en las consolas de Linux necesita que se esté ejecutando como demonio gpm(8).
La orden
less(1)
es un paginador mejorado (permite navegar por el contenido de los
archivos). Lee el archivo indicado como parámetro en su orden o la entrada
estándar. Pulse «h
» si necesita ayuda mientras utiliza la
orden less
. Es capaz de más que
more(1)
y puede ser mejorado ejecutando «eval $(lesspipe)
» o
«eval $(lessfile)
» en el archivo de órdenes de
inicio. Consulte «/usr/share/doc/less/LESSOPEN
». La
opción «-R
» permite la salida en crudo y permite las
secuencias de escape ANSI coloreadas. Consulte
less(1).
Debería ser competente con Vim o Emacs que son habituales en los sistemas tipo Unix.
Pienso que el correcto es Vim, ya que el editor Vi esta siempre disponible
en el mundo Linux/Unix. (En realidad, los programas, bien el original
vi
o el nuevonvi
los puede encontrar
en cualquier lugar. Yo elegí Vim en vez de la versión nueva ya que ofrece
ayuda a través de tecla F1
siendo similar y más potente.)
Si elige Emacs o XEmacs como su editor también son buenas opciones, especialemente para la programación. Emacs tiene una extensa cantidad de características también, incluyendo funciones como lector de noticias, editor de directorios, aplicación de correo, etc. Cuando se usa para programar o editar archivos de órdenes, reconocerá el formato en el que está trabajando y tratará de ayudarle. Algunos mantienen que el único programa que necesita Linux es Emacs. Aprender Emacs durante diez minutos ahora puede ahorrar muchas horas después. Es recomendable usar el manual de GNU Emacs para aprender.
Todos estos programas normalmente incluyen una aplicación de tutorial para
que usted pueda aprender a través de la práctica. Se inicia en
«vim
» pulsando la tecla F1. Debería al menos leer las
primeras treinta y cinco líneas. Después realizar el curso de entrenamiento
posicionando el cursor en«|tutor|
» y pulsando
Ctrl-]
.
Nota | |
---|---|
Los buenos editores, como Vim y Emacs, gestionan de manera adecuada codificaciones UTF-8 y otras menos comunes o más exóticas. Es una buena idea usar el entorno X con la configuración regional UTF-8 e instalar los programas y tipos de letra necesarias para ello. Los editores tienen opciones para asignar una codificación independientemente de la del entorno X. Por favor, consulte su documentación para codificaciones de varios bytes. |
Debian tiene un buen número de editores. Recomendamos instalar el paquete
vim
, como mencionamos con anterioridad.
Debian tiene un acceso unificado al editor por defecto del sistema mediante
la orden «/usr/bin/editor
», y así otros programas
(p.
ej.
reportbug(1))
puedan llamarlo. Puede cambiarlo como se muestra.
$ sudo update-alternatives --config editor
Mi recomendación es la opción «/usr/bin/vim.basic
» mejor
que «/usr/bin/vim.tiny
» para los usuario noveles ya que
permite realzado de sintaxis.
Sugerencia | |
---|---|
Muchos programas utilizan las variables de entorno
« |
Puede personalizar el comportamiento de
vim(1)
mediante «~/.vimrc
».
Por ejemplo, intente lo siguiente
" ------------------------------- " Configuración local " set nocompatible set nopaste set pastetoggle=<f2> syn on if $USER == "root" set nomodeline set noswapfile else set modeline set swapfile endif " Relleno para evitar que la línea superior se reconozca como modeline " Relleno " Relleno
La salida del intérprete de órdenes puede colapsar su pantalla y puede perderse para siempre. Es una buena práctica registrar la actividad del intérprete de órdenes en un archivo para poder revisarlo más tarde. Este registro es esencial para llevar a buen término cualquier tarea de administración de un sistema.
El método básico de registro del intérprete de órdenes es operar con script(1).
Por ejemplo, intente lo siguiente
$ script Script started, file is typescript
Ejecute las órdenes que desee después de script
.
Pulse Ctrl-D
para finalizar script
.
$ vim typescript
Consulte Sección 9.2.3, “Registro correcto de las actividades del intérprete de órdenes”.
Aprendamos las órdenes fundamentales de UNIX. Aquí utilizaremos «Unix» en
su sentido genérico. Normalmente cualquier sistema operativo tipo Unix tiene
un conjunto de órdenes similares. El sistema Debian no es una excepción. No
se preocupe si en este momento algunas órdenes no funcionan como
esperaba. Si se utiliza alias
en el intérprete de
órdenes, las salidas de las órdenes correspondientes difieren. Estos
ejemplos no pretenden ejecutarse en orden.
Pruebe las siguientes órdenes desde una cuenta de usuario sin privilegios.
Tabla 1.16. Relación de órdenes Unix fundamentales
orden | descripción |
---|---|
pwd
|
muestra el nombre del directorio actual/de trabajo |
whoami
|
muestra el nombre del usuario actual |
id
|
muestra la identidad del usuario actual (nombre, uid, gid y grupos a los que pertenece) |
file <foo>
|
muestra el tipo de archivo de «<foo> »
|
type -p <nombre_de_la_orden>
|
muestra la ubicación del archivo de la orden
«<nombre_de_la_orden> »
|
which <nombre_de_la_orden>
|
, , |
type <nombre_de_la_orden>
|
muestra información de la orden
«<nombre_de_la_orden> »
|
apropos <palabra_clave>
|
encuentra órdenes relacionadas con la
«<palabra_clave> »
|
man -k <palabra_clave>
|
, , |
whatis <nombre_de_la_orden>
|
muestra una descripción de una línea de la orden
«<nombre_de_la_orden> »
|
man -a <nombre_de_la_orden>
|
muestra la descripción de la orden
«<nombre_de_la_orden> » (al estilo Unix)
|
info <nombre_de_la_orden>
|
muestra una descripción detallada de la orden
«<nombre_de_la_orden> » (al estilo GNU)
|
ls
|
relación el contenido del directorio (excluye aquellos archivos o directorios que comienzan por .) |
ls -a
|
relación el contenido del directorio (todos los archivos y directorios) |
ls -A
|
relación el contendido del directorio (casi todos los archivos y
directorios, a saber, oculta «.. » y
«. »)
|
ls -la
|
relación todo el contenido del directorio con información detallada |
ls -lai
|
relación el contenido completo del directorio con el número del inodo e información detallada |
ls -d
|
relación los directorios que cuelgan del directorio actual |
tree
|
muestra el contenido de los directorios en formato de árbol |
lsof <foo>
|
relación los procesos que tienen abierto el archivo
«<foo> »
|
lsof -p <pid>
|
relación los archivos abiertos por el proceso con el identificador:
«<pid> »
|
mkdir <foo>
|
crear un nuevo directorio «<foo> » en el directorio
actual
|
rmdir <foo>
|
borra el directorio «<foo> » del directorio actual
|
cd <foo>
|
cambia al directorio «<foo> » que se encuentre en el
directorio actual o en los directorios incluidos en la variable
«$CDPATH »
|
cd /
|
cambia al directorio raíz |
cd
|
cambia al directorio principal del usuario actual |
cd /<foo>
|
cambia al directorio con ruta absoluta «<foo> »
|
cd ..
|
cambia al directorio padre |
cd ~<foo>
|
cambia al directorio principal del usuario «<foo> »
|
cd -
|
cambia al directorio anterior |
</etc/motd pager
|
muestra el contenido de «/etc/motd » usando el paginador
por defecto
|
touch <junkfile>
|
crea un archivo vacio «<junkfile> »
|
cp <foo> <bar>
|
copia el archivo existente «<foo> » en un archivo
nuevo «<bar> »
|
rm <junkfile>
|
borra el archivo «<junkfile> »
|
mv <foo> <bar>
|
renombra el archivo existente «<foo> » con un nuevo
nombre «<bar> » («<bar> » no
debe existir con anterioridad)
|
mv <foo> <bar>
|
mueve el archivo existente «<foo> » a una nueva
ubicación «<bar>/<foo> » (el directorio
«<bar> » debe existir previamente)
|
mv <foo> <bar>/<baz>
|
mueve un archivo existente «<foo> » a una nueva
ubicación con el nombre nuevo «<bar>/<baz> »
(el directorio «<bar> » debe existir con
anterioridad pero el archivo «<bar>/<baz> »
no)
|
chmod 600 <foo>
|
el archivo existente «<foo> » únicamente tiene
permisos de lectura y escritura para el dueño (y no se permite la ejecución
por nadie)
|
chmod 644 <foo>
|
hace que un archivo existente «<foo> » pueda ser
leido por cualquiera, que únicamente el dueño pueda escribir sobre él (y
nadie puede ejecutarlo)
|
chmod 755 <foo>
|
hace que un archivo «<foo> » pueda ser leido por
cualquiera y modificado solo por el dueño (cualquiera puede ejecutarlo)
|
find . -name <expresión_regular>
|
encuentra archivos que cumplen la
«<expresión_regular> » del intérprete de órdenes
(lento)
|
locate -d . <expresión_regular>
|
encuentra archivos que cumplen
«<expresión_regular> » del intérprete de órdenes
(rápido ya que utiliza una base de datos que se actualiza de forma
periódica)
|
grep -e «<expresión regular>» *.html
|
muestra todos los archivos del directorio actual con el sufijo
«.html » que contienen la
«<expresión_regular> »
|
top
|
muestra información de los procesos a pantalla completa, pulsando
«q » para terminar
|
ps aux | pager
|
muestra información de todos los procesos ejecutándose utilizando para la salida el estilo BSD |
ps -ef | pager
|
muestra información de todo s los procesos ejecutándose utilizando para la salida el estilo Unix system-V |
ps aux | grep -e "[e]xim4*"
|
muestra todos los procesos «exim » y
«exim4 »
|
ps axf | pager
|
muestra información de todos los procesos con la salida al estilo de arte ASCII |
kill <1234>
|
elimina el proceso cuyo identificador de proceso es: «<1234>» |
gzip <foo>
|
comprime «<foo> » y crea
«<foo>.gz » usando la codificación Lempel-Ziv (LZ77)
|
gunzip <foo>.gz
|
descomprime «<foo>.gz » y crea
«<foo> »
|
bzip2 <foo>
|
comprime «<foo> » y crea
«<foo>.bz2 » usando el algoritmo de compresión de
texto por ordenación de bloques Burrows-Wheeler y codificación Huffman
(ofrece mejor compresión que gzip )
|
bunzip2 <foo>.bz2
|
descomprime «<foo>.bz2 » y crea
«<foo> »
|
xz <foo>
|
comprime «<foo> » y crea
«<foo>.xz » usando el algoritmo Lempel–Ziv–cadenas
de Markov (ofrece mejor compresión que bzip2 )
|
unxz <foo>.xz
|
descomprime «<foo>.xz » y crea
«<foo> »
|
tar -xvf <foo>.tar
|
extrae archivos del archivo «<foo>.tar »
|
tar -xvzf <foo>.tar.gz
|
extrae los archivos del archivo comprimido mediante gzip
«<foo>.tar.gz »
|
tar -xvjf <foo>.tar.bz2
|
extrae archivos del archivo «<foo>.tar.bz2 »
|
tar -xvJf <foo>.tar.xz
|
extrae los archivos del archivo «<foo>.tar.xz »
|
tar -cvf <foo>.tar <bar>/
|
archiva el contenido de la carpeta «<bar>/ » en el
archivo «<foo>.tar »
|
tar -cvzf <foo>.tar.gz <bar>/
|
archiva el contenido de la carpeta «<bar>/ » en el
archivo comprimido «<foo>.tar.gz »
|
tar -cvjf <foo>.tar.bz2 <bar>/
|
archiva el contenido de la carpeta «<bar>/ » en el
archivo «<foo>.tar.bz2 »
|
tar -cvJf <foo>.tar.xz <bar>/
|
archiva el contenido de la carpeta «<bar>/ » en el
archivo «<foo>.tar.xz »
|
zcat README.gz | pager
|
muestra el contenido del archivo comprimido «README.gz »
utilizando el paginador por defecto
|
zcat README.gz > foo
|
crea un archivo «foo » con el contenido descomprimido de
«README.gz »
|
zcat README.gz >> foo
|
adjunta el contenido descomprimido de «README.gz » al
final del archivo «foo » (si no existe, lo creará primero)
|
Nota | |
---|---|
Unix tiene una tradición de ocultar los archivos que comienzan con
« |
Nota | |
---|---|
Para la orden |
Nota | |
---|---|
El paginador por defecto del sistema Debian es
more(1)
que es básico y no permite el desplazamiento para atrás. La instalación del
paquete |
Nota | |
---|---|
En la expresión regular de la orden « |
Por favor, para entrenar recorra los directorios y de un vistazo al sistema utilizando las órdenes que acabamos de introducir. Si tiene dudas sobre cualquier orden de consola, asegúrese de leer la página del manual.
Por ejemplo, intente lo siguiente
$ man man $ man bash $ man builtins $ man grep $ man ls
El estilo de la páginas de manual puede ser un poco aspero, ya que puede ser bantante conciso, especialmente las más antiguas y típicas pero una vez que se acostumbre, llegará a apreciar su concisión.
Recuerde que muchas órdenes de la familia Unix, incluidas las que provienen de GNU y BSD muestran un resumen de la ayuda si las ejecuta en alguna de las siguientes maneras (o sin parámetros en algunos casos).
$ <nombre_de_la_orden> --help $ <nombre_de_la_orden> -h
Ahora ya tiene una idea de como utilizar un sistema Debian. Vamos a ver en profundidad el mecanismo de la ejecución de órdenes en el sistema Debian. En este tema haremos una simplificación de la realidad para las personas con poca experiencia. Para una explicación más completa consulte bash(1).
Una orden básica se divide en varios componentes:
asignación de variables (opcional),
nombre de la orden,
parámetros (opcional),
redirecciones (optional: >
,
>>
, <
,
<<
, etc.),
operadores de control (optional: &&
,
||
, <nueva_línea> , ;
,
&
, (
, )
).
El comportamiento de algunas órdenes Unix cambia dependiendo del valor de algunas variables de entorno.
El sistema PAM inicia las variables de entorno a los valores por defecto y después otros programas de aplicación pueden restablecerlas:
los gestores de inicio de sesión como gdm3
restablecen
las variables de entorno;
el intérprete de órdenes restablece las variables de entorno mediante
«~/.bash_profile
» y «~/.bashrc
».
La variable de la configuración regional «$LANG
» tiene
tres partes: «xx_YY.ZZZZ
».
Tabla 1.17. Tres partes del valor de la configuración regional
valor de configuración regional | significado |
---|---|
xx
|
códigos de la lengua según la ISO 639 (en minúsculas) como «en» |
YY
|
código del país de la ISO 3166 (en mayúsculas) como «US» |
ZZZZ
|
codificación de caracteres, siempre «UTF-8» |
Consulte «info gettext
» para obtener información sobre
los códigos de lenguas y de paises.
En un sistema moderno Debian la codificación de caracteres, al menos que
tenga una buena razón, debería valer siempre UTF-8
.
Consulte Sección 8.4, “Configuración regional” para obtener más detalles de la configuracion regional.
Nota | |
---|---|
« |
Tabla 1.18. Relación de recomendaciones para la configuración regional
recomendación de la configuración regional | lengua (territorio) |
---|---|
en_US.UTF-8
|
Inglés (USA) |
en_GB.UTF-8
|
Inglés (Gran Bretaña) |
fr_FR.UTF-8
|
Francés (Francia) |
de_DE.UTF-8
|
Alemán (Alemania) |
it_IT.UTF-8
|
Italiano (Italia) |
es_ES.UTF-8
|
Español (España) |
ca_ES.UTF-8
|
Catalán (España) |
sv_SE.UTF-8
|
Sueco (Suecia) |
pt_BR.UTF-8
|
Portugués (Brasil) |
ru_RU.UTF-8
|
Ruso (Rusia) |
zh_CN.UTF-8
|
Chino (República Popular de China) |
zh_TW.UTF-8
|
Chino (República de China (Taiwan)) |
ja_JP.UTF-8
|
Japonés (Japón) |
ko_KR.UTF-8
|
Coreano (República de Corea) |
vi_VN.UTF-8
|
Vietnamita (Vietnam) |
La forma más común de ejecutar la orden en un intérprete de órdenes es como se muestra.
$ date Sun Jun 3 10:27:39 JST 2007 $ LANG=fr_FR.UTF-8 date dimanche 3 juin 2007, 10:27:33 (UTC+0900)
Aquí
date(1)
se ejecuta para diferentes valores de la variable de entorno
«$LANG
».
En la primera orden «$LANG
» tiene el valor por defecto de
la configuración regional
«en_US.UTF-8
».
En la segunda orden «$LANG
» asigna la configuración regional a francés UTF-8 con el valor
«fr_FR.UTF-8
».
La mayor parte de las órdenes ejecutadas no van precedidas de la definición de variables de entorno. Otra forma alternativa del ejemplo anterior es la que se muestra.
$ LANG=fr_FR.UTF-8 $ date dimanche 3 juin 2007, 10:27:33 (UTC+0900)
Como puede comprobar la salida de la orden muestra la salida en francés ya que depende de la variable de entorno. Si se quiere que los subprocesos hereden la variable (p. ej. cuando se ejecuta un archivo de órdenes) necesita utilizar export como se muestra.
$ export LANG
Nota | |
---|---|
Cuando utiliza la terminal de consola normal, el entorno de escritorio
asigna la variable de entorno « |
Sugerencia | |
---|---|
Cuando escriba un informe de error, si no utiliza un entorno en inglés, es
una buena idea ejecutar y comprobar las órdenes con
« |
Para completar sus conocimientos sobre «$LANG
» y las
variable de entorno relacionadas consulte
locale(5)
y
locale(7).
Nota | |
---|---|
Mi recomendación es que configure el entorno del sistema únicamente mediante
la variable « |
Cuando escribe una orden en el intérprete de órdenes, este busca la orden en
la relación de directorios contenidos en la variable de entorno
«$PATH
». El valor de la variable de entorno
«$PATH
» también se le conoce como la ruta de búsqueda del
intérprete de órdenes.
En la instalación por defecto de Debian, la variable de entorno
«$PATH
» de las cuentas de usuario puede no incluir
«/sbin
» y «/usr/sbin
». Por ejemplo, la
orden ifconfig
necesita ser ejecutada con la ruta
completa con «/sbin/ifconfig
». (Órdenes parecidas como
ip
están ubicadas en «/bin
».)
Puede cambiar la variable de entorno «$PATH
» del
intérprete de órdenes en los archivos «~/.bash_profile
» o
«~/.bashrc
».
Muchas órdenes almacenan configuraciones específicas del usuario en su
directorio principal y cambian su comportamiento en función de estas. El
directorio principal del usuario es determinado por el valor de la variable
de entorno «$HOME
».
Tabla 1.19. Relación de valores de «$HOME
»
valor de «$HOME »
|
características de ejecución del programa |
---|---|
/
|
programa ejecutándose por el proceso init (demonio) |
/root
|
programa ejecutándose desde el intérprete de órdenes del superusuario |
/home/<usuario_normal>
|
programa ejecutándose desde el intérprete de órdenes de un usuario normal |
/home/<usuario_normal>
|
programa ejecutándose desde el menú en el escritorio gráfico de un usuario normal |
/home/<usuario_normal>
|
programa ejecutándose como superusuario con «sudo
programa »
|
/root
|
programa ejecutándose como superusuario con «sudo -H
programa »
|
Sugerencia | |
---|---|
El intérprete de órdenes sustituye « |
Algunas órdenes tienen parámetros. Se llaman opciones a los parámetros que
comienzan con «-
» o «--
» y controlan
el comportamiento de la orden.
$ date Mon Oct 27 23:02:09 CET 2003 $ date -R Mon, 27 Oct 2003 23:02:40 +0100
Aquí el parámetro de la línea de la orden «-R
» cambia el
comportamiento de la salida de
date(1)
de acuerdo al formato estándar de fecha RFC2822.
A menudo querrá que una orden afecte a un grupo de archivos sin escribir el nombre de cada uno de ellos. Para cubrir esta necesidad existe la expansión de patrones de nombres de archivos dentro del intérprete de órdenes glob, (algunas veces también llamado uso de comodines).
Tabla 1.20. Patrones para la expansión de nombres de archivos del intérprete de órdenes
patrón | descripción de la regla de encaje |
---|---|
*
|
nombres de archivos que no comienza con «. »
|
.*
|
nombres de archivos que comienza con «. »
|
?
|
un único carácter |
[…]
|
un único carácter que pertenezca al grupo de caracteres entre corchetes |
[a-z]
|
un único carácter con cualquier valor comprendido entre
«a » y «z »
|
[^…]
|
un único carácter que no pertenezca al grupo de caracteres encerrados entre
corchetes (excluyendo «^ »)
|
Por ejemplo, intente lo siguiente
$ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc] 3.c 4.h $ echo .* . .. .5.txt ..6.txt $ echo .*[^.]* .5.txt ..6.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk
Consulte glob(7).
Nota | |
---|---|
Si prueba « |
Nota | |
---|---|
BASH puede cambiar el comportamiento de la expansión de nombres de archivo
con sus opciones internas como « |
Cada orden devuelve su estado de salida en el valor devuelto (en la
variable: «$?
»).
Tabla 1.21. Códigos de salida de una orden
estado de salida de una orden | valor numérico devuelto | valor lógico devuelto |
---|---|---|
éxito | cero, 0 | CIERTO |
error | diferente de cero, -1 | FALSO |
Por ejemplo, pruebe con lo que se muestra.
$ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1
Nota | |
---|---|
Tenga en cuenta que en el contexto lógico del intérprete de órdenes, éxito es tratado de forma lógica como CIERTO que tiene un valor 0 (cero). Quizá esto sea poco intuitivo y por ello necesite ser recordado. |
Intentemos recordar las siguientes expresiones como parte de una orden de una única línea.
Tabla 1.22. Expresiones de una orden
expresión de la orden | descripción |
---|---|
orden &
|
ejecución en segundo plano de la
orden en un intérprete de órdenes hijo
|
orden1 | orden2
|
envía a la tubería la salida estándar de
la orden1 a la entrada estándar de la
orden2 (se ejecutan de forma concurrente )
|
orden1 2>&1 | orden2
|
envía a la tubería la salida estándar y
el error estándar de la orden1 a la entrada estándar de
la orden2 (se ejecutan de forma concurrente )
|
orden1 ; orden2
|
ejecuta la orden1 y la orden2 de forma
secuencial
|
orden1 && orden2
|
ejecuta la orden1 ; y si ha tenido éxito, ejecuta la
orden2 secuencialmente
(devuelve éxito si tanto la orden1 como la orden2 finalizan con
éxito)
|
orden1 || orden2
|
ejecuta la orden1 ; si no tiene éxito, se ejecuta la
orden2 de forma secuencial (devuelve éxito si
orden1 o
orden2 se ejecutan con éxito)
|
orden > foo
|
redirecciona la salida estándar de la orden al archivo
foo (y si existe lo sobreescribe)
|
orden 2> foo
|
redirecciona el error estándar de orden al archivo
foo (sobreescribiendolo)
|
orden >> foo
|
redirecciona la salida estándar de orden al
archivofoo (concatenándola)
|
orden 2>> foo
|
redirecciona el error estándar de orden al archivo
foo (concatenándola)
|
orden > foo 2>&1
|
redirecciona salida estándar y el error estándar de orden
al archivo foo
|
orden < foo
|
envia a la entrada estándar de orden el contenido del
archivo foo
|
orden << delimitador
|
envía a la entrada estándar de orden las líneas
siguientes hasta que encuentra un «delimitador » (aquí el
documento)
|
orden <<- delimitador
|
envía a la entrada estándar de la orden las líneas
siguientes hasta que se encuentre con el «delimitador » (
en las líneas de entrada los tabuladores al inicio son eliminados)
|
El sistema Debian es un sistema multitarea. Mediante trabajos en segundo
plano se pueden ejecutar por parte de los usuario múltiples programas desde
un único intérprete de órdenes. La gestión de los procesos en segundo plano
se realiza con las órdenes internas: jobs
,
fg
, bg
y kill
. Por
favor, lea las secciones de bash(1) «SIGNALS», «JOB CONTROL» y
builtins(1).
Por ejemplo, intente lo siguiente
$ </etc/motd pager
$ pager </etc/motd
$ pager /etc/motd
$ cat /etc/motd | pager
Aunque los cuatro ejemplos de redirección del intérprete de órdenes son
equivalentes, el último ejemplo ejecuta una orden más cat
y desperdicia recursos sin razón alguna.
El intérprete de órdenes permite abrir archivos utilizando la orden interna
exec
con un descriptor de archivo arbitrario.
$ echo Hola >foo $ exec 3<foo 4>bar # abre los archivos $ cat <&3 >&4 # redirige la entrada estándar (stdin) a 3 y la salida estándaar (stdout) a 4 $ exec 3<&- 4>&- # cierra los archivos $ cat bar Hola
Los descriptores de archivo de 0 a 2 están predefinidos.
Tabla 1.23. Descriptores de archivos predefinidos
dispositivo | descripción | descriptor de archivo |
---|---|---|
stdin
|
entrada estándar | 0 |
stdout
|
salida estándar | 1 |
stderr
|
error estándar | 2 |
Usted puede definir alias para las órdenes más utilizadas.
Por ejemplo, intente lo siguiente
$ alias la='ls -la'
Ahora, «la
» funciona como forma corta de «ls
-la
» la cual muetra una relación de todos los archivos en el
formato largo.
Se pueden enumerar los alias existentes mediante alias
(consulte el epígrafe «SHELL BUILTIN COMMANDS» de
bash(1)).
$ alias ... alias la='ls -la'
Se puede determinar la ruta exacta o la identidad de la orden mediante
«type
» (consulte el epígrafe «SHELL BUILTIN COMMANDS» de
bash(1)).
Por ejemplo, intente lo siguiente
$ type ls ls is hashed (/bin/ls) $ type la la is aliased to ls -la $ type echo echo is a shell builtin $ type file file is /usr/bin/file
En el ejemplo anterior ls
fue consultado recientemente y
«file
» no lo fue, de este modo «ls
»
está indexado, a saber, el intérprete de órdenes tiene un registro interno
que determina rápidamente la ubicación de la orden «ls
».
Sugerencia | |
---|---|
Consulte Sección 9.2.7, “Órdenes coloreadas”. |
En un entorno de trabajo del estilo de Unix, el tratamiento de texto se realiza por medio del uso de tuberías que unen un conjunto de herramientas para formar una cadena.. Esta fue otra de las innovaciones esenciales de Unix.
Algunas herramientas que trabajan con texto son usada muy frecuntemente en un sistema tipo Unix.
Sin expresiones regulares se usan:
cat(1) genera a la salida el resultado de concaternar archivos;
tac(1) genera a la salida el resultado de concatenar al revés cada uno de los archivos;
cut(1) genera como salida la parte de las líneas seleccionadas;
head(1) muestra las primeras líneas de los archivos;
tail(1) muestra las últimas líneas de los archivos;
sort(1) ordena las líneas de los archivos de texto;
uniq(1) borra las líneas duplicadas de un archivo ordenado;
tr(1) sustituye o borra caracteres;
diff(1) compara archivos línea a línea.
Las expresiones regulares básicas (BRE) son usadas por:
grep(1) encaja texto con patrones;
ed(1) es un editor de texto antiguo;
sed(1) es un editor de flujo;
vim(1) es un editor interactivo;
emacs(1) es un editor interactivo (en cierta manera amplía BRE).
Las expresiones regulares ampliadas (ERE son utilizadas por:
egrep(1) encaja texto y patrones;
awk(1) realiza procesamiento de texto sencillo;
tcl(3tcl) puede realizar cualquier procesamiento de texto imaginable: consulte re_syntax(3). Frecuentemente se utiliza en combinación con tk(3tk);
perl(1) puede realizar cualquier procesamiento de texto imaginable. Consulte perlre(1);
pcregrep(1)
del paquete pcregrep
encaja texto con patrones
expresados con Expresiones
Regulares Compatibles con Perl(PCRE);
python(1)
utilizando el módulo re
puede realizar cualquier
procesamiento de textos imaginable. Consulte
«/usr/share/doc/python/html/index.html
».
Si no esta seguro de que hacen exactamente estas órdenes, por favor utilice
«man orden
» para averiguarlo por usted mismo.
Nota | |
---|---|
El criterio de ordenación y alcance de las expresiones son dependientes de
la configuración regional. Si desea obtener el comportamiento tradicional de
una orden, utilice la configuración regional C en lugar de UTF-8 anteponiendo la orden
« |
Nota | |
---|---|
Las expresiones regulares de Perl(perlre(1)),
Perl Compatible Regular
Expressions (PCRE) y las expresiones regulares de Python ofrecidas por su módulo |
Las expresiones regulares son utilizadas por muchas herramientas de procesamiento de texto. Son similares a la expansión de nombres de archivo en el intérprete de órdenes, aunque más complicadas y poderosas.
Las expresiones regulares especifican un patrón de encaje y está compuesto por caracteres de texto y metacaracteres.
Un metacarácter es un carácter que tiene un significado especial. Existen dos tendencias principales, BRE y ERE dependiendo de cada herramienta de texto, como hemos descrito anteriormente.
Tabla 1.24. Metacaracteres para BRE y ERE
BRE | ERE | descripción de la expresión regular |
---|---|---|
\ . [ ] ^ $ *
|
\ . [ ] ^ $ *
|
metacaracteres comunes |
\+ \? \( \) \{ \} \|
|
En BRE el único metacarácter de escape es
«\ »
|
|
+ ? ( ) { } |
|
En ERE el único metacarácter diferente de
«\ » de escape
|
|
c
|
c
|
que encaja con el no metacarácter
«c »
|
\c
|
\c
|
encaja con un carácter literal «c » incluso si
«c » representa un metacarácter
|
.
|
.
|
encaja cualquier carácter incluyendo el de nueva línea |
^
|
^
|
posición al comienzo de la cadena de caracteres |
$
|
$
|
posición al final de la cadena de caracteres |
\<
|
\<
|
posición al comienzo de la palabra |
\>
|
\>
|
posición al final de la palabra |
[abc…]
|
[abc…]
|
encaja cualquier carácter incluido en «abc... »
|
[^abc…]
|
[^abc…]
|
encaja con cualquier carácter excepto «abc… »
|
r*
|
r*
|
encaja con cero o más «r », siendo «r »
una expresión regular
|
r\+
|
r+
|
encaja con una o más «r », siendo «r »
una expresión regular
|
r\?
|
r?
|
encaja con cero o una «r », siendo «r »
una expresión regular
|
r1\|r2
|
r1|r2
|
encaja una de las expresiones regulares «r1 » o
«r2 »
|
\(r1\|r2\)
|
(r1|r2)
|
encaja una expresión regular «r1 » o
«r2 » y tratada el resultado como una expresión regular
entre paréntesis
|
Emacs
utiliza
principalmente el tipo de expresión regular BRE pero ha sido ampliada para utilizar
«+
» y «?
» como metacaracteres como en ERE. De este modo, no es necesario añadirles el
prefijo «\
» en las expresiones regulares de
emacs
.
grep(1) puede utilizarse para realizar búsquedas de texto por medio de expresiones regulares.
Por ejemplo, intente lo siguiente
$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program
Sugerencia | |
---|---|
Consulte Sección 9.2.7, “Órdenes coloreadas”. |
En la sustitución de expresiones, algunos caracteres tiene un significado especial.
Tabla 1.25. Sustitución mediante expresiones regulares
expresión sustituida | descripción del texto a reemplazar |
---|---|
&
|
lo que encaja con la expresión regular (utilice \& en
emacs )
|
\n
|
lo que encaja con la enésima expresión regular entre paréntesis (donde «n» es un número) |
La cadena de sustitución en Perl es «$&» en vez de «&» y «$n» en vez de «\n».
Por ejemplo, intente lo siguiente
$ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=1abc2efg3hij4=
En la sustitución de texto, en las diferentes herramientas, preste especial atención al encaje de las expresiones regulares entre corchetes o paréntesis con las cadenas de caracteres.
Algunos editores permiten la utilización de expresiones regulares para la búsqueda y/o sustitución de texto.
En el intérprete de órdenes se puede escribir una misma orden en varias
líneas anteponiendo el caraćter de barra invertida «\
» al
carácter de nueva línea que será sustituido por el vacío.
Por favor, consulte las páginas de manual de estas órdenes.
La orden
ed(1)
permite sustituir todas las ocurrencias de
«LA_EXPRESIÓN_REGULAR
» por «EL_TEXTO
»
en el «archivo
».
$ ed file <<EOF ,s/EXPRESIÓN_REGULAR_A_SUSTITUIR/TEXTO_SUSTITUTO/g w q EOF
La orden
sed(1)
sustituye todas las ocurrencias de «LA_EXPRESIÓN_REGULAR
»
por «EL_TEXTO
» en el «archivo
».
$ sed -i -e 's/LA_EXPRESIÓN_REGULAR_A_SUSTITUIR/TEXTO_SUSTITUTO/g' archivo
La orden
vim(1)
puede sustituir todas las ocurrencias de
«LA_EXPRESIÓN_REGULAR
» por «EL_TEXTO
»
en el «archivo
» utilizando las órdenes
ex(1).
$ vim '+%s/LA_EXPRESIÓN_REGULAR_A_SUSTITUIR/TEXTO_SUSTITUTO/gc' '+w' '+q' archivo
Sugerencia | |
---|---|
La bandera « |
Varios archivos pueden ser procesados de forma similar
(«archivo1
», «archivo2
» y
«archivo3
») mediante las expresiones regulares de
vim(1)
o
perl(1).
$ vim '+argdo %s/EXPRESIÓN_REGULAR_A_SUSTITUIR/TEXTO_SUSTITUTO/ge|update' '+q' archivo1 archivo2 archivo3
Sugerencia | |
---|---|
La bandera « |
$ perl -i -p -e 's/EXPRESIÓN_REGULAR_A_SUSTITUIR/TEXTO_SUSTITUTO/g;' archivo1 archivo2 archivo3
En el ejemplo en perl(1), «-i
» es para la edición de cada
elemento que encaja con el patrón y «-p
» se utiliza para
repetir la operación sobre cada uno de los archivos que aparecen como
argumentos.
Sugerencia | |
---|---|
La utilización del parámetro « |
Nota | |
---|---|
ed(1) y vim(1) utiliza BRE; perl(1) utiliza ERE. |
Consideremos un archivo de texto llamado «DPL
» con los
siguientes campos: nombres de los líderes del proyecto Debian con
anteriroridad a 2004 y su fecha de inicio, utilizando como separador el
espacio en blanco.
Ian Murdock Agosto 1993 Bruce Perens Abril 1996 Ian Jackson Enero 1998 Wichert Akkerman Enero 1999 Ben Collins Abril 2001 Bdale Garbee Abril 2002 Martin Michlmayr Marzo 2003
Sugerencia | |
---|---|
Consulte «Historia breve de Debian» para conocer quién es el último lider del proyecto Debian. |
Awk se utiliza a menudo para obtener datos de este tipo de archivos.
Por ejemplo, intente lo siguiente
$ awk '{ print $3 }' <DPL # mes de comienzo Agosto Abril Enero Enero Abril Abril Marzo $ awk '($1=="Ian") { print }' <DPL # DPL llamado Ian Ian Murdock August 1993 Ian Jackson January 1998 $ awk '($2=="Perens") { print $3,$4 }' <DPL # Cuando comenzó Perens Abril 1996
Los intérprete de órdenes, como Bash, puede ser usado para analizar este tipo de archivos.
Por ejemplo, intente lo siguiente
$ while read first last month year; do echo $month done <DPL ... la misma salida que el primer ejemplo de Awk
Aquí la orden interna read
usa los caracteres de
«$IFS
» (separadores internos) para dividir las líneas en
palabras.
Si asigna el valor «:
» a «$IFS
», se
puede analizar «/etc/passwd
» con el intérprete de órdenes
de la forma adecuada.
$ anteriorIFS=«$IFS« # guarda el valor actual $ IFS=':' $ while read user password uid gid resto_de_linea; do if [ "$usuario" = "bozo" ]; then echo "ID de $usuario es $uid" fi done < /etc/passwd ID de bozo es 1000 $ IFS="$anteriorIFS" # restaura el valor antiguo
(Para hacer lo mismo con Awk asigne el separador de campos mediante
«FS=':'
».)
El intérprete de órdenes utiliza IFS para separar los resultados de la expansión de parámetros, sustitución de órdenes y expansiones aritméticas. Las palabras entre comillas dobles o simples no son tenidas en cuenta en estas operaciones. El valor por defecto de IFS es la relación <espacio>, <tabulador> y <nueva_línea>.
Tenga cuidado cuando utilice estos trucos en el intérprete de órdenes. Cuando el intérprete de órdenes trabaje en algunas partes de un archivo de órdenes y su entrada pueden ocurrir cosas extrañas.
$ IFS=":," # utiliza ":" y "," como IFS $ echo IFS=$IFS, IFS="$IFS" # muestra si es una función interna IFS= , IFS=:, $ date -R # salida de la orden Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # intérprete de órdenes hijo --> a la entrada del principal Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # inicia IFS a su valor por defecto $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200
Los fragmentos de órdenes siguientes son muy potentes cuando forman parte de una cadena de órdenes unidas por tuberías.
Tabla 1.26. Relación de fragmentos de órdenes con tuberías
fragmento de archivo de órdenes (escrito en una única línea) | efecto de la orden |
---|---|
find /usr -print
|
lista todos los archivos que se encuentran por debajo de
«/usr »
|
seq 1 100
|
escribe del 1 al 100 |
| xargs -n 1 <orden>
|
ejecuta la orden de forma repetida para cada elemento de la tubería y utilizando este como argumento |
| xargs -n 1 echo
|
divide los elementos de la tubería separados por espacios en líneas |
| xargs echo
|
une todas la líneas de la tubería en una |
| grep -e <patrón_de_expresión_regular>
|
selecciona las líneas de la tubería que encajan con el <patrón_de_expresión_regular> |
| grep -v -e <patrón_de_expresión_regular>
|
selecciona las líneas de la tubería que no tienen encaje con el <patrón_de_la_expresión_regular> |
| cut -d: -f3 -
|
selecciona el tercer campo de cada línea de la tubería utilizando como
separado «: » (archivo de contraseñas etc.)
|
| awk '{ print $3 }'
|
selecciona el tercer campo de cada línea de la tubería utilizando como separador espacios en blanco |
| awk -F'\t' '{ print $3 }'
|
selecciona el tercer campo de cada línea de la tubería utilizando como separador el tabulador |
| col -bx
|
elimina los retornos de carro y sustituye los tabuladores por espacios |
| expand -
|
sustituye los tabuladores por espacios |
| sort| uniq
|
ordena y elimina duplicados |
| tr 'A-Z' 'a-z'
|
convierte mayúsculas a minúsculas |
| tr -d '\n'
|
concatena las líneas en una sola |
| tr -d '\r'
|
elimina el retorno de carro |
| sed 's/^/# /'
|
añade «# » al comienzo de cada línea
|
| sed 's/\.ext//g'
|
elimina «.ext »
|
| sed -n -e 2p
|
imprime la segunda línea |
| head -n 2 -
|
imprimer las primeras dos líneas |
| tail -n 2 -
|
imprime las últimas dos líneas |
Un archivo de órdenes de una sola línea puede repetirse sobre varios archivos utilizando find(1) y xargs(1) siendo capaz de realizar tareas muy complicadas. Consulte Sección 10.1.5, “Formas de selección de archivos” y Sección 9.3.9, “Repetición de una orden sobre archivos”.
Cuando la utilización de órdenes de forma interactiva se complica demasiado debe considerarse escribir un archivo de órdenes (consulte Sección 12.1, “Los archivos de órdenes”).