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 personalmente. Para ayudarle a comenzar sin tropiezos, he escrito unos pocos puntos básicos.
El poderoso diseño de Debian GNU/Linux viene del 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 rehuya los textos orientados a Unix y no se base únicamente en textos sobre GNU/Linux, ya que esto le impediría acceder a mucha información útil.
![]() |
Nota |
---|---|
Si usted ha utilizado cualquier sistema tipo Unix durante algún tiempo con las herramientas de línea de órdenes, probablemente ya conozca todo lo que explico aquí. Por favor, use esto para comprobar los detalles y como recordatorio. |
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:~$
La mayor parte del mensaje de bienvenida puede ser personalizada editando el
archivo "/etc/motd.tail
". La primera línea se genera a
partir de la información del sistema utilizando "uname
-snrvm
".
Ahora nos encontramos en el interprete de órdenes (shell). La shell 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 interprete 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 lista 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
" desde 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 deun 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, “Running X clients as root”.
![]() |
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 normalmente 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 para cerrar la shell. 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» con mayúscula, no es necesario pulsar la tecla
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:
# 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, “How to shutdown the remote system on 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 órden
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. Lista de paquetes con programas interesantes en modo texto
paquete | popularidad | tamaño | descripción |
---|---|---|---|
mc
|
V:73, I:238 | 1431 | Un gestor de archivos, a pantalla completa, en modo texto |
sudo
|
V:345, I:704 | 2933 | Un programa para proporcionar algunos privilegios de superusuario a los usuarios de acuerdo a la configuración establecida |
vim
|
V:112, I:391 | 2366 | Editor de texto Unix Vi IMproved (Vi Mejorado), un editor de texto para programadores (versión estándar) |
vim-tiny
|
V:64, I:967 | 1063 | Editor de texto Unix Vi IMproved (Vi Mejorado), un editor de texto para programadores (versión compacta) |
emacs25
|
V:0, I:1 | 19221 | El proyecto GNU Emacs, un editor de texto ampliable basado en Lisp |
w3m
|
V:275, I:835 | 2292 | Navegadores web en modo texto |
gpm
|
V:13, I:22 | 457 | 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. Lista de paquetes con documentación útil
paquete | popularidad | tamaño | descripción |
---|---|---|---|
doc-debian
|
I:857 | 166 | Documentación del Proyecto Debian, Preguntas Frecuentes (FAQ) y otros documentos |
debian-policy
|
I:112 | 3744 | Manual de la Política Debian y documentos asociados |
developers-reference
|
I:7 | 1299 | Directrices e información para desarrolladores de Debian |
maint-guide
|
I:4 | 1011 | Guía para nuevos Mantenedores de Debian |
debian-history
|
I:1 | 4895 | Historia del Proyecto Debian |
debian-faq
|
I:843 | 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,
haciendo lo siguiente:
# 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 haciendo:
# 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:
# 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 sistema 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 evitan 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 con lo siguiente:
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, “El entorno de trabajo fundamental tipo Unix” (método básico)
Sección 1.5, “Órdenes simples del intérpete de órdenes” (mecanismos del intérprete de órdenes (shell))
Sección 1.6, “Procesamiento de texto al estilo 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
"/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 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: 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
simbolo en el nombre de un archivo, pero en la práctica es una mala idea. Es
preferible evitar el uso de cualquier carácter que tenga un significado
especial para el intérprete de órdenes, incluido espacioes, tabulaciones, o
saltos de línea, y otros carácteres especiales: |
![]() |
Nota |
---|---|
La palabra "root" puede significar "superusuario" o "directorio raíz". El contexto determinará su significado correcto. |
![]() |
Nota |
---|---|
El término ruta no solo se usa para los nombres de archivos completamente cualificados como hemos hecho en los párrafos anteriores, si no en la ruta para la búsqueda de órdenes. El significado correcto será determinado por el contexto. |
Los detalles de las buenas prácticas de la jerarquía de archivos es descita
en el Estándar de Jerarquía del Sistema de Archivos (Filesystem Hierarchy
Standard )
("/usr/share/doc/debian-policy/fhs/fhs-2.3.txt.gz
"
yhier(7)).
Es importante que recuerde esto como fundamental.
Tabla 1.3. Lista de directorios principales y su uso
directorio | uso del directorio |
---|---|
/
|
directorio raíz |
/etc/
|
archivos principales de configuración del sistema |
/var/log/
|
archivos de registro del sistema |
/home/
|
todas las carpetas personales de usuario sin privilegios |
Siguiendo la tradición de Unix, el
sistema Debian GNU/Linux ofrece sistemas de
archivos sobre los cuales los datos físicos se almacenan en discos
duros u otros dispositivos de almacenamiento, y la interacción con esos
dispositivos hardware como las consolas en modo texto y consolas en serie
remotas son representadas de una manera unificada en
"/dev/
".
Cada archivos, directorio o tubería con nombre (una manera en que dos
programas pueden compartir datos), o dispositivos físicos en el sistema
Debian GNU/Linux tiene una estructura de información llamada un inodo el cual describe sus atributos como quién es su
dueño (owner), el grupo al que pertenece, la fecha de último acceso, etc.
Si esta muy interesado, vea "/usr/include/linux/fs.h
"
para la definición exacta de la "estructura de un inodo
"
en el sistema in the Debian GNU/Linux. La idea de representar todo a través
de archivos fue una innovación de Unix, y las versiones modernas de los
núcleos de Linux la han llevado más allá. En nuestro días, en el sistema de
archivos puede encontrar información de procesos en ejecución en el equipo.
La representación unificada y abstracta de entidades físicas y procesos internos es sumamente útil ya que permite el uso de la misma órden 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 enlazandolos a procesos en ejecución.
![]() |
Sugerencia |
---|---|
Si usted 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 de los sistemas tipo Unix definen tres categorías o tipos de usuarios.
El usuario que es dueño del archivo (u)
Los usuarios que pertenecen al grupo al que pertenece el archivo (h)
El resto de usuarios (o) también denominados "universo" o "todos"
En 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 órden.
Para los directorios, cada permiso permite las siguientes acciones.
El permiso de lectura (r) permite al dueño enumerar el 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.
Los permisos de ejecución de un directorio no solo indican que se puede leer los archivos que contiene, si 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 de acceso al archivo (nueve caracteres, tres para el usuario, otros 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. El primer carácter de cada línea de la salida de "ls -l
"
se interpreta
carácter | significado |
---|---|
-
|
archivo regular |
d
|
directorio |
l
|
enlace simbólico |
c
|
nodo de dispositivo orientado a carácteres |
b
|
Nodo de dispositivo orientado a bloques |
p
|
tubería con nombre |
s
|
"socket" |
Para cambiar el dueño de un archivo, el superusuario usa la órden
chown(1).
Para cambiar el grupo del archivo, el dueño de un archivo usa la órden
chgrp(1).
Para modificar los permisos del acceso al archivo o directorio, el dueño o
el superusuario usa la órden
chmod(1).
La sintaxis para operar sobre un archivo foo
es la
siguiente.
# 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
siguiendo.
# cd /some/location/ # chown -R foo:bar . # chmod -R ug+rwX,o=rX .
Existen tres permisos especiales que corresponden con los bits.
El bit set user ID (s or S en lugar del permiso del dueñox)
El bit set group ID (s or S en lugar del permiso del group x)
El bit sticky (t or T en vez del permiso del resto x)
Estos bits aparecerán en mayúsculas en la
salida obtenida por la órden "ls -l
" si los permisos de
ejecución correspondientes estan sin
marcar.
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 provoca 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 los esquemas de creación de archivosal estilo BSD, donde todos los archivos creados en el directorio pertenecen al mismo grupo que el directorio.
La configuración del "sticky bit" en un
directorio evita que los archivos que contiene sean eliminados por alguien
diferente a su dueño. En los directorios con permisos de escritura para
todos, como "/tmp
", o para el grupo, con el fin de
asegurar la integridad de los archivos, no solo se debe eliminar los
permisos de escritura de los
archivos. Además se debe configurar el sticky
bit del directorio para evitar que cualquier usuario con permisos
de escritura en él pueda borrar un archivo y después crear otro con el mismo
nombre.
Aquí mostramos 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 órden chmod(1) posee otro método de carácter numérico para describir los permisos de un archivo. Este modo numerico usa 3 o 4 digitos en base octal (base 8).
Tabla 1.5. El modo numérico de las órdenes chmod(1)
dígito | significado |
---|---|
1º dígito opcional | suma de set user ID (=4), set group ID (=2), y sticky bit (=1) |
2º dígito | la suma de los permisos de lectura (=4), escritura (=2), y ejecución (=1) para el usuario |
3º dígito | igualmente para el group |
4º dígito | igualmente para el resto |
Parece más complicado de lo que realmente es. Si mira la primeras
columnas(de la 2 a la 10) de la salida de la órden "ls
-l
" y lee en binario (base 2) la representación de los permisos
del archivo ("-" siendo "0" y "rwx" siendo un "1"), los tres últimos dígitos
del modo numérico tendrán sentido como una representación en octal (base 8)
de los permisos del archivo.
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 órden " |
Los permisos que se asignan por defecto a nuevos archivos y directorios
cuando estos se crean están definidos por la órden interna del intérprete de
órdenes umask
. Como referencias puede consultar
dash(1),
bash(1),
and
builtins(7).
(permisos del archivo) = (permisos concedidos al archivo) & ~(valor umask )
Tabla 1.6. Ejemplos de valores de umask
umask | permisos del archivo creados | permisos del directorio creados | 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 un nuevo usuario
es añadido 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 de hacerlo de forma dinámica es añadir usuarios a grupos durante
el proceso de autenticación añadiendo la línea |
En el sistema de Debian los dispositivos hardware son otro tipo de archivos. Si tiene problemas para que un usuario acceda a dispositivos como el CD-ROM y llaveros USB, podría añadir el usuario al grupo pertinente.
Algunos grupos importantes proporcionados por el sistema permiten a sus
miembros acceder a archivos y directorios específicos sin privilegios de
superusuario
.
Tabla 1.7. Lista de grupos importantes del sistema para el acceso a archivos
grupo | descripción de los 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 a pares confiables |
cdrom
|
dispositivos CD-ROM, DVD+/-RW |
audio
|
dispositivo audio |
video
|
dispositivo de video |
scanner
|
escáner |
adm
|
registros de vigilancia del sistema |
staff
|
algunos directorios básicos para la administración 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. Lista de grupos importantes del sistema para la ejecución de órdenes específicas
grupo | órdenes accesibles |
---|---|
sudo
|
ejecuta sudo sin su contraseña
|
lpadmin
|
ejecuta órdenes para añadir, modificar y borrar impresoras de la base de datos correspondiente |
Una lista completa de los usuarios y grupos proporcionados por el sistema se
puede consultar en la versión más reciente del documento "Users and Groups"
/usr/share/doc/base-passwd/users-and-groups.html
proporcinada por el paquete base-passwd
.
Puede consultar las órdenes para la gestión de usuarios y grupos del sistema: 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 en un archivo GNU/Linux.
Tabla 1.9. Lista de tipos de marcas de tiempos
tipo | significado |
---|---|
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. |
La sobreescritura de un archivo modifica 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 fichero modifica su propiedad de atime.
![]() |
Nota |
---|---|
Incluso la lectura de un archivo requiere una operación de escritura para
actualizar la información referente a su atime que está contenida en el inodoinode. El montado de un sistema de archivos con
las opciones " |
Use la órden touch(1) para cambiar las marcas de tiempo de los archivos existentes.
For timestamps, the ls
command outputs different strings
under non-English locale ("fr_FR.UTF-8
") from under the
old one ("C
").
$ 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 |
---|---|
Mire Sección 9.2.5, “Customized display of time and date” 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 con el que quiere enlazar
"ln -s foo bar
"
Con el siguiente ejemplo se muestra los cambios en el contador de enlaces y
las sutiles diferencias de la órden rm
.
$ umask 002 $ echo "Original Content" > foo $ ls -li foo 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo $ ln foo bar # hard link $ ln -s foo baz # symlink $ 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 "New Content" > 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 Original Content $ cat baz New Content
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 órden
ls(1).
Los enlaces simbólicos siempre tienen permisos de acceso al archivo
nominales "rwxrwxrwx
", como se mostro en el ejemplo
anterior, con los permisos reales que tenga el archivo al que apunta.
![]() |
Atención |
---|---|
En general es preferible no crear enlaces simbólicos o enlaces duros en ningún caso excepto que tenga poderosas razones. La combinación lógica de enlaces simbólico 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 lo contrario. |
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 usted viene de Windows, pronto comprenderá lo bien diseñado que están los enlaces a archivos de Unix, comparados con su equivalente en Windows que son los accesos directos (shortcuts). Gracias a la 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, en verdad no existe diferencia.
Una tubería con nombrees un archivo que actua como una tubería. Usted pone algo dentro del archivo, y sale por el otro lado. Por esa razón es llamada un FIFO, o primero-en-entrar-primero-en-salir: la primera cosa que se pone en la tubería es la primera en salir por el otro lado.
Si se escribe en una tubería con nombre, los procesos que escriben en la
tubería no pueden terminar hasta que la información que han escrito es leida
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 se hace en 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 "hello" >mypipe & # put into background [1] 8022 $ ls -l mypipe prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe $ cat mypipe hello [1]+ Done echo "hello" >mypipe $ ls mypipe mypipe $ rm mypipe
Los "sockets" se usan de forma generalizada en las comunicaciones en Internet, así como en 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 extremo para la comuniación entre procesos (IPC). El intercambio de información puede ocurrir en la red entre servidores . Los dos tipos de "sockets" más comunes son los "sockets" internet y los "sockets" tipo Unix.
![]() |
Sugerencia |
---|---|
" |
Los archivos de dispositivos referencian
a disitivos 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 mayores 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 usando lp(1). |
El número de nodo del dispositivo se muestra por la ejecución de ls(1) como sigue.
$ 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. Es accesible para lectura/escritura haciendo
que los usuarios pertenezcan al grupodisk
.
"/dev/sr0
" tiene como número de dispositivo mayor 11 y
como menor 0. Es accesible para las operaciones de escritura/lectura
haciendo que el usuario pertenezca al grupo cdrom
.
"/dev/ttyS0
" tiene el número de dispositivo mayor 4 y
menor 64. Es accesible para lectura/escritura haciendo que el usuario
pertenezca al grupo dialout
.
"/dev/zero
" tiene como número mayor de dispositivo 1 y
como menor 5. Es accesible para lectura/escritura para todos.
En los sistemas modernos Linux, el sistema de archivos bajo
"/dev/
" se rellena de forma automática por el mecanismo
udev(7).
Existen algunos archivos de dispositivos especiales.
Tabla 1.10. Lista de archivos de dispositivos especiales
Archivo de dispostivo | acción | descripción de la 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)" (diferente del número
cero representado en ASCII)
|
/dev/random
|
lectura | devuelve caracteres aleatorios devueltos por el generador de números aleatorios confiable, entregando entropía real (baja) |
/dev/urandom
|
lectura | devuelve caractéres 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) |
De namera habitual son usados conjuntamente con las redirecciones del intérprete de órdenes (vea Sección 1.5.8, “Secuencias de órdenes comunes y redirecciones del intérprete de órdenes”).
Los pseudo sistemas de archivos procfs y
sysfs se montan en "/proc
" y
"/sys
" y muestran estructuras de datos internas del
núcleoal espacio de usuario. Expresado de otra forma, estas entradas son
virtuales, actuando como una ventana apropiada a la operativa del sistema
operativo.
El directorio "/proc
" contiene (entre otras cosas) un
subdirectorio por cada proceso que ha sido creado en el sistema operativo,
cuyo nombre es el identificador del proceso (PID). Las herramientas del
sistema que acceden a la información del proceso, como
ps(1),
obtiene dicha información de la estructura de este directorio.
Los directorios por debajo de "/proc/sys/
" contienen
interfaces que permiten cambiar algunos parámetros del núcleo en tiempo de
ejecución. (Se puede conseguir lo mismo a través de la
órdensysctl(8)
o de su archivo de
precarga/configuración"/etc/sysctl.conf
".)
La gente normalmente se alarma cuando se dan cuenta que un archivo en
particular - "/proc/kcore
" - es extremadamente
grande. Es (más o menos) una copia del contenido de la memoria del
equipo. Se usa para depurar el kernel. Es un archivo virtual que apunta a la
memoria del equipo, así es que no se preocupe por su tamaño.
El directorio que cuelga de "/sys
" contiene las
estructuras de datos del kernel exportadas, sus atributos, y las conexiones
entre ellos.
Vea "proc.txt(.gz)
", "sysfs.txt(.gz)
"
y otros documentos que forman parte de la documentación del kernel de
Linux("/usr/share/doc/linux-doc-*/Documentation/filesystems/*
")
que están en el paquete linux-doc-*
.
El sistema de archivos temporal tmpfs tiene la función de mantener todos los archivos en lamemoria virtual. Los datos de "tmpfs" en la caché de páginas en la memoria puede ser expulsada alalmacenamiento swap en disco cuando sea necesario.
El directorio "/run
" se monta como el tmpfs al comienzo
del proceso de arranque. Así se permite la escritura sobre él, incluso
cuando el directorio "/
" es montado en solo lectura. Aquí
se guardad los archivos en estado temporal y sustituye a varios lugares
descritos en Jerarquía Estándar
del Sistema de Ficheros version 2.3:
"/var/run
" → "/run
"
"/var/lock
" → "/run/lock
"
"/dev/shm
" → "/run/shm
"
Vea el documento del núcleo de Linux"tmpfs.txt(.gz)
"
("/usr/share/doc/linux-doc-*/Documentation/filesystems/*
")
que esta 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 conducida por menús que es mucho más fácil de aprender que las órdenes de Unix estándar.
Usted necesitará instalar el paquete de "Midnight Commander" llamado
"mc
como sigue.
$ sudo apt-get install mc
Al usar la órdenmc(1) podrá explorar el sistema Debian. Esta es la mejor forma de aprender. Por favor, visite unos cuantos lugares de interés usando las teclas de cursos y la tecla "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 tras salir y
cd
al directorio, le sugiero que cambie
"~/.bashrc
" para incluir el "script" proporcionado por el
paquete mc
.
. /usr/lib/mc/mc.sh
Vea
mc(1)
(en la opción "-P
") para comprobar por qué. (Si no
comprende exactamente lo que estoy contando, usted puede llevarlo a fin más
tarde.)
Para ejecutar MC escriba.
$ mc
MC permite ejecutar todas las operaciones sobre archivos a través de sus menús, haciendo el usuario el mínimo esfuerzo. Simplemente, presione F1 para acceder a la pantalla de ayuda. Usted puede probar MC con solo pulsar las teclas de los cursores y las teclas de las funciones.
![]() |
Nota |
---|---|
En algunas consolas como
gnome-terminal(1),
las pulsaciones 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ñadiendo "-a
" como parámetro a la órden MC
ayudará a prevenir problemas.
Si no se solucionan los problemas anteriores con MC, consulte Sección 9.4.6, “The terminal configuration”.
Por defecto hay dos paneles con directorios que contienen su lista de archivos. Otro modo útil es asignar el panel izquierdo para que "muestre" la información de acceso de los archivos, etc. A continuación mostraremos algunas claves. Con el demonio gpm(8) ejecutandose, también se puede usar el ratón en la consola de caractéres de Linux. (Asegurese de pulsar la tecla de mayúsculas para obtener el comportamiento normal de corta y pega en MC.)
Tabla 1.11. Funciones de las teclas en MC
tecla | Función |
---|---|
F1
|
help menu |
F3
|
visión del contenido del archivo |
F4
|
editor interno |
F9
|
activa el menú superior |
F10
|
Salida de Midnight Commander |
Tab
|
moverse entre los dos 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 |
Órden cd
cambia el directorio inicial en el panel
seleccionado.
Ctrl-Intro
o Alt-Intro
copia el nombre
del archivo a la órden en la línea de órdenes Se usa en combinación con las
órdenescp(1)
y
mv(1)
para añadr parámetros de las órdenes.
Alt-Tab
muestra los posibles archivos elegibles por
expansión del nombre del archivo 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. Entocnes se puede mover el cursor. Si presiona F6, el aŕ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 del editor. La mayor parte de las teclas cursor funcionan de forma
intuitiva.
El editor puede abrise directamente con un archivos 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 use "File→Insert file" or "File→Copy to file" 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 usar. Si no está cómodo al principio 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 asignar el valor
"vim
".
Si no se siente cómodo usando vim(1), puede usarmcedit(1) para la mayor parte de las tareas de mantenimiento del sistema.
MC poseer un visor muy inteligente. Es una gran herramienta para buscar
palabras en los documentos. Yo siempre lo uso para arhivos 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 usando un de las siguientes órdenes:
$ mc -v ruta/al/archivo_a_visualizar
$ mcview ruta/al/archivo_a_visualizar
Pulse Intro en un archivo, y el programa adecuado abrirá el archivo (vea Sección 9.3.11, “Customizing program to be started”). Es una funcionalidad de MC muy útil.
Tabla 1.12. El efecto de la tecla Intro en MC
tipo de archivo | efecto de la tecla Intro |
---|---|
archivo ejecutable | ejecuta el órden |
archivo "man" | se envia el contenido a la aplicación de visualización |
archivo html | contenido enviado al navegador web |
Archivos "*.tar.gz " y "*.deb "
|
muestra su contenido com si fuera un subdirectorio |
Para que opere de forma correcta el visor y las funciones virtuales de archivo, los archivos , los archivos visibles no deberían asignarse permisos de ejecución. Se cambia el estado usando chmod(1) o el menu 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 virtual FTP. Introduzca la URL con el formato
"username:passwd@hostname.domainname
", que accede al
directorio remoto dando la apariencia de tratarse de uno local.
Pruebe como URL "[http.us.debian.org/debian]" y navege a través del repositorio Debian.
Aunque MC permite realizar casi cualquier cosa, es importante que usted aprenda cmo se usa la línea de órdenes invocada desde el cursor del intérprete de órdenes y acostumbrarse con el entorno de trabajo tipo Unix.
Usted puede elegir el shell de inicio de sesión con chsh(1).
Tabla 1.13. Lista de intérpretes de órdenes
paquete | popularidad | tamaño | Intérprete POSIX | descripción |
---|---|---|---|---|
bash
|
V:857, I:999 | 5798 | Si | Bash: el intérprete GNU Bourne Again (estándar de facto) |
tcsh
|
V:13, I:45 | 1305 | No | TENEX C Shell: una versión mejorada de Berkeley csh |
dash
|
V:908, I:977 | 200 | Si | Debian Almquist Shell, bueno para archivos de órdenes |
zsh
|
V:34, I:66 | 2088 | Si | Z shell: el intérprete de órdenes con muchas mejoras |
mksh
|
V:3, I:13 | 1276 | Si | Una versión de Korn shell |
csh
|
V:3, I:12 | 327 | No | OpenBSD C Shell, una versión deBerkeley csh |
sash
|
V:1, I:5 | 973 | Si | Stand-alone shell con órdenes
internas (No es el estándar "/bin/sh ")
|
ksh
|
V:6, I:25 | 3236 | Si | el auténtico , AT&T version of the Korn shell |
rc
|
V:0, I:4 | 154 | No | implementación de AT&T Plan 9 rc shell |
posh
|
V:0, I:0 | 182 | Si |
derivado de "Policy-compliant Ordinary SHell" (pdksh )
|
![]() |
Sugerencia |
---|---|
Aunque los intérpretes de órdenes tipo POSIX comparten la sintáxis básica, pueden cambiar el comportamiento de algunos elementos básicos como sus variables y they can differ in behavior for things as basic as shell variables y la expansión de nombres de archivos con comodines. Por favor, compruebe la documentación para obtener más detalles. |
En este capítulo del tutorial, el intérprete de órdenes se entiende que
siempre es bash
.
Usted puede personalizar el comportamiento
debash(1)
por medio del archivo de configuración "~/.bashrc
".
Por ejemplo, pruebe lo siguiente:
# enable bash-completion if ! 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 upon exiting MC . /usr/lib/mc/mc.sh # set CDPATH to a good one CDPATH=.:/usr/share/doc:~:~/Desktop:~ export CDPATH PATH="${PATH+$PATH:}/usr/sbin:/sbin" # set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH="~/bin${PATH+:$PATH}" fi export PATH EDITOR=vim export EDITOR
![]() |
Sugerencia |
---|---|
Puede encontrar más consejos de personalización de |
![]() |
Sugerencia |
---|---|
The |
En el entorno tipo Unix, hay algunas teclas
que tiene un uso especial. Por favor, tenga en cuenta que en una consola
modo texto de Linux, solo las teclas Ctrl
and
Alt
del lado izquierdo funcionan tal como se
espera. Algunas combinaciones relevantes de teclas que interés recordar:
Tabla 1.14. Lista de combianciones de teclado en bash
tecla | Decripción de la combinación de teclas |
---|---|
Ctrl-U
|
borra el contenido desde el inico de la línea hasta la posición del cursor |
Ctrl-H
|
borra el carácter anterior al cursor |
Ctrl-D
|
fin de la entrada (finaliza el intérprete de órdenes si se esta usando) |
Ctrl-C
|
finaliza el programa en ejecución |
Ctrl-Z
|
para temporalemente el programa convirtiendolo en un trabajo en segundo plano |
Ctrl-S
|
para la salida por pantalla |
Ctrl-Q
|
reanuda la salida por pantalla |
Ctrl-Alt-Del
|
reinicia/apaga el sistema, vea inittab(5) |
tecla izquierda Alt (opcionalmente, tecla de
Windows )
|
meta-tecla para Emacs e interfaces de usuario parecidos |
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 con el nombre de archivo de la órden en
bash
|
Ctrl-V Tab
|
introduce Tab sin completar la órden en
bash
|
![]() |
Sugerencia |
---|---|
La funcionalidad del terminal de |
Las operaciones con el ratón del estilo Unix se fundamentan en un sistema de ratón de tres botones.
Tabla 1.15. Lista de operaciones con el ratón al estilo Unix
acción | respuesta |
---|---|
boton izquierdo y arrastrar el ratón | selecciona y copia al portapapeles |
botón izquierdo | comienzo de la selección |
botón derecho | fin de la selección y copia al portapapeles |
botón de en medio | pegar del portapapeles donde esté posicionado el cursor |
La rueda central que se encuentra en los ratones actuales se considera el botón de en medio y se usa como sustitutive del tercer botón. Si dispone de un ratón con únicamente dos botones, pulsar tanto el izquierdo como el derecho a la vez, realiza la función del botón de en medio. Para usar el manual las consolas de caracteres de Linux, necesita ejecutar gpm(8) como un demonio.
La órden
less(1)
es el paginador mejorado (navegador por el contenido de archivos). Lee el
archivo indicado como parámetro por su órden o la entrada estándar. Pulse
"h
" si necesita ayuda mientras navega con la órden
less
. Puede hacer mucho más que
more(1)
puede ser mejorado ejecutando "eval $(lesspipe)
" o
"eval $(lessfile)
" en el archivo de órdenes de
inicio. Más información en
"/usr/share/doc/lessf/LESSOPEN
". La opción
"-R
" permite la salida en crudo y permite las secuencias
de escape de colores ANSI. Vea
less(1).
Usted debería ser competente en alguno de los programas Vim o Emacs los cuales son comunes en lso sistemas tipo Unix.
Pienso que lo correcto es acostumbrarse a las órdenes de 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 vesrsión nueva ya que ofrece ayuda a través de tecla
F1
mientras es muy parecido y más potente.)
Si elige cualquiera de los dos Emacs o XEmacs como su editor, es una buena opción ciertamente, 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 Emacas durante diez minutos ahora puede ahorrar muchas horas después. Tener el manual de GNU Emacs como fuente cuando se aprende es altamente recomendable.
Todos estos programas normalmente incluyen una aplicación de tutorial para
que usted pueda aprender a través de la practica. Se inicia Vim escribiendo
"vim
" y presione la tecla F1. Usted debería al menos
leer las priemeras treinta y cinco líneas. Entonces 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 comunesmás exóticas. Es una buena ideas usar el entorno X con la localizaciń UTF-8 e instalar los programas y tipografías 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 texto de varios bytes. |
Debian trae in buen número de editores diferentes. Recomendamos instalar el
paquete vim
, como mencionamos con anterioridad.
Debian aprota un acceso unificado al editor por defecto del sistema mediante
la órden "/usr/bin/editor
" de tal manera que otros
programas
(p.
ej.
reportbug(1))
puedan llamarlo. Usted puede cambiarlo con lo siguiente:
$ sudo update-alternatives --config editor
Mi recomendación es la opción "/usr/bin/vim.basic
" mejor
qeu "/usr/bin/vim.tiny
" para los usuario noveles ya que
permite resaltado de sintaxis.
![]() |
Sugerencia |
---|---|
Muchos programas usan la variable de entorno " |
Puede personalizar el comportamiento de
vim(1)
mediante "~/.vimrc
".
Por ejemplo, intente lo siguiente
" ------------------------------- " Local configuration " set nocompatible set nopaste set pastetoggle=<f2> syn on if $USER == "root" set nomodeline set noswapfile else set modeline set swapfile endif " filler to avoid the line above being recognized as a modeline " filler " filler
La salida del intérprete de órdenes pueden colapsar su pantalla y puede perderse por ella. Es una buena práctica registrar la actividad de los intérpretes de órdenes en un archivo para poder revisarlo más tarde. Este tipo de registro es esencial para llevar a buen término cualquier tarea de la admisnistración del sistema.
El método básico de registro del intérprete de comandos es operar bajo script(1).
Por ejemplo, intente lo siguiente
$ script Script started, file is typescript
Ejecute las órdenes que considere después de script
.
Pulse Ctrl-D
para finalizar script
.
$ vim typescript
Vea Sección 9.2.3, “Recording the shell activities cleanly”.
Aprendamos las órdenes fundamentales de UNIX. En este caso usaré "Unix" en
su sentido genérico. Cualquier sistema operativo clon de Unix normalmente
brinda órdenes equivalentes. El sistema Debian no es una excepción. No se
preocupe si algunas órdenes no funcionan ahora como esperaba. Si se usa
alias
en el intérprete de órdenes, sus salidas de las
órdenes correspondientes son diferentes. Estos ejemplos no están preparados
para ejecutarse en este órden.
Pruebe las siguientes órdenes desde una cuenta de usuario no privilegiado.
Tabla 1.16. Lista 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 para el archivo "<foo> "
|
type -p <nombre_de_la_órden>
|
muestra la ubicación del archivo de la órden
"<nombre_de_la_órden> "
|
which <nombre_de_la_órden>
|
, , |
type <nombre_de_la_órden>
|
muestra información de la órden
"<nombre_de_la_órden> "
|
apropos <palabra_clave>
|
encuentra órdenes familiarizadas con la
"<palabra_clave> "
|
man -k <palabra_clave>
|
, , |
whatis <nombre_de_la_órden>
|
muestra una descripción en una línea de la órden
"<nombre_de_la_órden> "
|
man -a <nombre_de_la_órden>
|
muestra la descripción de la órden
"<nombre_de_la_orden> " (al estilo Unix)
|
info <nombre_de_la_órden>
|
muestra una descripción bastante larga de la óden
"<nombre_de_la_órden> " (al estilo GNU)
|
ls
|
enumera el contenido del directorio (excluye aquellos archivos o directorios que comienzan por .) |
ls -a
|
enumera el contenido del directorio (todos los archivos y directorios) |
ls -A
|
enumera el contendido del directorio (casi todos los archivos y directorios,
a saber, oculta ".. " y ". ")
|
ls -la
|
enumera todo el contenido del directorio con información detallada |
ls -lai
|
enumera todo el contenido del directorio con el número del inodo e información detallada |
ls -d
|
enumera todos los directorios que cuelgan del directorio actual |
tree
|
muestra el contenido del árbol de archivos |
lsof <foo>
|
enumera los procesos que tienen abierto el archivo
"<foo> "
|
lsof -p <pid>
|
enumera los archivos abiertos por el proceso con
identificador:"<pid> "
|
mkdir <foo>
|
crear un nuevo directorio "<foo> " en el directorio
actual
|
rmdir <foo>
|
elimina el directorio "<foo> " en el directorio
actual
|
cd <foo>
|
cambia de directorio al directorio "<foo> " en el
directorio actual o en el directorio incluido en la variable
"$CDPATH "
|
cd /
|
cambia el directorio al directorio raíz |
cd
|
cambia el directorio al directorio principal del usuario actual |
cd /<foo>
|
cambia el directorio al directorio con ruta absoluta
"<foo> "
|
cd ..
|
cambia el directorio al directorio padre |
cd ~<foo>
|
cambia el directorio al directorio principal del usuario
"<foo> "
|
cd -
|
cambia el directorio 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> " a un archivo
nuevo "<bar> "
|
rm <junkfile>
|
elimina el archivo "<junkfile> "
|
mv <foo> <bar>
|
renombre el archivo existente "<foo> " con el 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 nuevo nombre "<bar>/<baz> "
(el directorio "<bar> " debe existir con anteriorida
pero el directorio "<bar>/<baz> " no)
|
chmod 600 <foo>
|
hace que sobre un archivo que existe previamente
"<foo> " no se le permita la lectura y la escritura
a otras personas( y no se permite la ejecución a nadie)
|
chmod 644 <foo>
|
hace que un archivo existente "<foo> " tenga
permisos de lectura pero no de escritura por otros (y no ejecutable para
todos)
|
chmod 755 <foo>
|
hace que un archivo "<foo> " tenga permisos de
lectura pero no de escritura por otros (y ejecutable por todos)
|
find . -name <expresión_regular>
|
encuentra archivos que cumplen la
"<expresión_regular> " usando el intérprete de
órdenes (de manera lenta)
|
locate -d . <expresión_regular>
|
encuentra archivos que cumplen
"<expresión_regular> " usando el intérprete de
órdenes (rápidamente usando la base de datos generada de forma periódica)
|
grep -e "<expresión regular>" *.html
|
encuentra la "<expresión_regular> " en los archivos
que terminan con ".html " en el directorio actual y los
muestra todos
|
top
|
muestra información de los procesos usando toda la pantalla, pulse
"q " para terminar
|
ps aux | pager
|
muestra información de todos los procesos ejecutándose usando la salida al estilo BSD |
ps -ef | pager
|
muestra información de todo s los procesos ejecutándose usando para la salida el estilo Unix system-V |
ps aux | grep -e "[e]xim4*"
|
muestra todos los procesos en ejecución "exim " y
"exim4 "
|
ps axf | pager
|
muestra información de todos los procesos ejecutandose con la salida al estilo de arte ASCII |
kill <1234>
|
elimina el proceso identificado por el identificador de proceso: "<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 quebzip2 )
|
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>/
|
almacena el contenido de la carpeta "<bar>/ " en el
archivo "<foo>.tar "
|
tar -cvzf <foo>.tar.gz <bar>/
|
almacena el contenido de la carpeta "<bar>/ " en el
archivo comprimido "<foo>.tar.gz "
|
tar -cvjf <foo>.tar.bz2 <bar>/
|
almacena el contenido de la carpeta "<bar>/ " en el
archivo "<foo>.tar.bz2 "
|
tar -cvJf <foo>.tar.xz <bar>/
|
almacena el contenido de la carpeta "<bar>/ " en el
archivo "<foo>.tar.xz "
|
zcat README.gz | pager
|
muestra el contenido del archivo comprimido "README.gz "
usando 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 órden |
![]() |
Nota |
---|---|
El paginador por defecto del sistema Debian básico
esmore(1)
que no permite el desplazamiento para atrás. Instalando el paquete
|
![]() |
Nota |
---|---|
" |
Por favor, recorra los directorios y de un vistazo al sistema usando las órdenes que acaba de ver como entrenamiento. Si tiene dudas sobre cualquier órden de consola, por favor asegurese 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 man puede ser un poco aspero cuando se usa, ya que puede ser bantante conciso, especialmente las más antiguas y más tradicionales. Pero una vez que se acostumbre, llegará a apreciar su concisión.
Por favor, tenga en cuenta que muchas órdenes de la familia Unix, incluidas las que vienen 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_órden> --help $ <nombre_de_la_órden> -h
Ahora ya tiene una muestra de como usar un sistema Debian. Veamos 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. Veabash(1) para una explicación completa.
Una órden básica es una secuencia de componentes.
Nombramiento de variables (opcional)
Nombre de la órden
Parámetros (opcional)
Redirecciones (optional: >
,
>>
, <
,
<<
, etc.)
Operadores de control (optional: &&
,
||
, <newline> , ;
,
&
, (
, )
)
El valor de algunas variables de entorno cambia el comportamiento de algunas órdenes Unix.
Los valores por defecto de las variables del entonro son iniciados por el sistema PAM y algunas de ellas son reajustadas por los programas de aplicación.
Los gestores de inicio de sesión como gdm3
inicializn las
variables de entorno.
El intérprete de órdenes inicializa las variables de entorno por medio de
"~/.bash_profile
" y "~/.bashrc
".
El valor final de la variable "$LANG
" consiste en tres
partes: "xx_YY.ZZZZ
".
Tabla 1.17. Las tres partes del valor de localización
valor de localización | significado |
---|---|
xx
|
ISO 639 determina los códigos (en minúsculas) de los lenguajes como es "en" |
YY
|
ISO 3166 código de paises (en mayúsculas) como "US" |
ZZZZ
|
codificación, siempre asignado "UTF-8" |
Para códigos de lenguaje y códigos de países, vea la descripción pertinente
en "info gettext
".
Para la codificación en un sistema moderno Debian, usted debería asignar
siempre UTF-8
a menos
que especificamente quiera usar uno antiguo por una buena razón o mejorar su
conocimiento.
Para los pequeños detalles la configuración de localización, vea Sección 8.3, “The locale”.
![]() |
Nota |
---|---|
" |
Tabla 1.18. Lista de recomendaciones de localización
recomendación de localización | Lenguaje (área) |
---|---|
en_US.UTF-8
|
English (USA) |
en_GB.UTF-8
|
Inglés (Gran Bretaña) |
fr_FR.UTF-8
|
Frances (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
|
Portugé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 normal de ejecutar la órden en un intérprete de órdenes es:
$ 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í, el programa
date(1)
se ejecuta con diferentes valores de la variable de entorno
"$LANG
".
La mayor parte de las ejecuciones de órdenes no suelen ir precedidos de definición de variables de entorno. Para el ejemplo anterior, otra forma alternativa es la siguiente:
$ LANG=fr_FR.UTF-8 $ date dimanche 3 juin 2007, 10:27:33 (UTC+0900)
Como se puede ver, la salida de la órden está determinada por la variable de entorno que muestra la salida en francés. Si se quiere que la variable se herede por los subprocesos (p. ej. cuando se ejecuta un archivo de órdenes), necesita usar export como sigue:
$ export LANG
![]() |
Nota |
---|---|
Cuando usa la típica terminal de consola, la variable de entorno
" |
![]() |
Sugerencia |
---|---|
Cuando complementa un informe de error, es una buena idea si no usa un
entorno en inglés, ejecutar y comprobar las órdenes con
" |
Vea
locale(5)
y
locale(7)
para "$LANG
" y las variables de entorno relacionadas.
![]() |
Nota |
---|---|
Mi recomendación es que configure el entorno del sistema unicamente mediante
la variable " |
Cuando ustes escribe una órden en el intérprete de órdenes, este busca la
órden en la lista de directorios contenidos en la variable de entorno
"$PATH
". El valor de la variable de entorno
"$PATH
" es también conocido 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
órden ifconfig
necesita ser ejecutada con la ruta
completa con "/sbin/ifconfig
". (Órdenes parecidas como
ip
está ubicada en "/bin
".)
Se puede cambiar la variable de entorno "$PATH
" del
intérprete de órdenes en los archivos "~/.bash_profile
" o
"~/.bashrc
".
Muchas órdenes almacenan configuraciones especificas del usuario en el
directorio principal de este y cambian su comportamiento en función de
esta. El directorio principal del usuario es determinado por el valor de la
variable de entorno "$HOME
".
Tabla 1.19. Lista de valores de "$HOME
"
valor de "$HOME "
|
Situación de ejecución del programa |
---|---|
/
|
programa ejecutandose por el proceso init (demonio) |
/root
|
programa ejecutándose desde el intérprete de órdenes del superusuario |
/home/<usuario_normal>
|
programa ejecutandose desde el intérprete de órdenes de un usuario normal |
/home/<usuario_normal>
|
programa ejecutandose desde el menú de 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ŕeprete de órdenes cambia " |
Algunas órdenes tienen parámetros. Los parámetros son opciones que comienzan
con "-
" o "--
" y controlan el
comportamiento de la órden.
$ 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 órden "-R
" cambia el
comportamiento de la salida de
date(1)
de acuerdo al formato estándar de fechaRFC2822.
A menudo querrá que una órden afecte a un grupo de archivos sin escribir el nombre de cada uno de ellos. La expansión de patrónes de nombres de archivos usada por el intérprete de órdenes glob, (algunas veces también llamado uso de comodines), cubre esta necesidad.
Tabla 1.20. Patrones de expansión de nombres de archivos del intérprete de órdenes
patrón | descripción de la regla de encaje |
---|---|
*
|
nombre de archivos (parte) no comienza con ". "
|
.*
|
nombre de archivo (parte) no comienza con ". "
|
?
|
un único carácter |
[…]
|
un único carácter con cualquier carácter encerrado entre corchetes |
[a-z]
|
un único carácter con cualquier valor comprendido entre
"a " y "z "
|
[^…]
|
un único carácter que no sea cualquier carácter de los 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
Glob glob(7).
![]() |
Nota |
---|---|
No como la expansión de nombres de archivos normales por parte del
intérprete de órdenes " |
![]() |
Nota |
---|---|
BASH puede cambiar su comportamiento en la expansión de nombres de archivo
con las opciones de su lenguaje interno como " |
Cada órden devuelve como terminó su ejecución (variable:
"$?
") como valor de retorno.
Tabla 1.21. Códigos de finalización de la órden
Estado de finalización de la órden | valor numérico devuelto | valor lógico devuelto |
---|---|---|
éxito | cero, 0 | CIERTO |
error | diferente de cero, -1 | FALSO |
Por ejemplo, pruebe lo siguiente:
$ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1
![]() |
Nota |
---|---|
Por favor 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 ssea poco intuitivo y necesite ser recordado aquí. |
Intentemos recordar los siguientes giros de las órdenes del intérprete de órdenes escritos en una línea como parde de la órden.
Tabla 1.22. Giro de la órden del intérprete de órdenes
Giro de la órden | descripción |
---|---|
órden &
|
ejecución en segundo plano de la
órden en un intérprete de órdenes hijo
|
órden1 | órden2
|
entuba la salida estándar de
órden1 a la entrada estándar deórden2
(se ejecutan de forma concurrente )
|
órden1 2>&1 | orden2
|
entuba tanto la salida estándar como el
error estándar de la órden1 a la entrada estándar de la
órden2 (se ejecutan de forma concurrente )
|
órden1 ; órden2
|
ejecuta la órden1 y la órden2 de forma
secuencial
|
órden1 && órden2
|
ejecuta la órden1 ; si ha tenido éxito, ejecuta la
órden2 secuencialmente
(devuelve éxito si tantoórden1 como órden2 finalizan con éxito)
|
órden1 || órden2
|
ejecuta la órden1 ; si no tiene éxito, se ejecuta la
órden2 de forma secuencial (devuelve éxito si
órden1 o
órden2 se ejecutan con éxito)
|
órden > foo
|
redirecciona la salida estándar de la órden al archivo
foo (sobreescribiendolo si existe)
|
órden 2> foo
|
redirecciona el error estándar de órden al archivo
foo (sobreescribiendolo)
|
órden >> foo
|
redirecciona la salida estándar de órden al
archivofoo (añadiendlola)
|
órden 2>> foo
|
redirecciona el error estándar de órden al archivo
foo (añadiendola)
|
órden > foo 2>&1
|
redirecciona tanto la salida estándar como el error estándar
deórden a un archivofoo
|
órden < foo
|
redirecciona la entrada estándar de órden al archivo
foo
|
órden << delimitador
|
redirecciona la entrada estándar de órden a las líneas
siguientes hasta que encuentra"delimitador " (Aquí
documento)
|
órden <<- delimitador
|
redirect standard input of command to the following lines
until "delimiter " is met (here document, the leading tab
characters are stripped from input lines)
|
El sistema Debian es un sistema multitarea. Los trabajos en segundo plano
permiten a los usuarios ejecutar múltiples programas desde un único
intérprete de órdenes. La gestión de los procesos en segundo plano incluye
sus órdenes internas: jobs
, fg
,
bg
, and kill
. Por favor, lea las
secciones de bash(1) tituladas "SIGNALS", and "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 muestran
la misma cosa, el último ejemplo ejecuta una órden más
cat
y desperdicia recursos sin razón alguna.
El intérprete de órdenes permite abrir archivos usando la órden
internaexec
con un descriptor de archivo arbitrario.
$ echo Hello >foo $ exec 3<foo 4>bar # open files $ cat <&3 >&4 # redirect stdin to 3, stdout to 4 $ exec 3<&- 4>&- # close files $ cat bar Hello
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 asignar alias para las órdenes más comunmente usadas.
Por ejemplo, intente lo siguiente
$ alias la='ls -la'
Ahora, "la
" funciona como forma corta de "ls
-la
" la cual enumera todos los archivos en el formato largo.
Se pueden enumerar los alias existentes mediante alias
(vea
bash(1)
titulado "SHELL BUILTIN COMMANDS").
$ alias ... alias la='ls -la'
Se puede identificar la ruta exacta o la identidad de la órden por el
"type
" (vea
bash(1)
en el epígrafe "SHELL BUILTIN COMMANDS").
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
Aquí ls
fue buscado con recientemente mientras que
"file
" no lo fue, de este modo "ls
"
está "cacheado", a saber, el intérprete de órden tiene un registro interno
para determinar de forma rápida la ubicación de la órden
"ls
".
![]() |
Sugerencia |
---|---|
En un entorno de trabajo del estilo de Unix, el procesamiento de texto se realiza por medio del "entubamiento" de el texto a través de una cadena de herramientas de prcocesamiento de texto. Esta fue otra de las innovaciones esenciales de Unix.
Existen algunas herramientas para el procesamiento de texto que son usadas de forma muy frecuente por un sistema tipo Unix.
No regular expression is used:
cat(1) añade archivos como un todo a la salida.
tac(1) añade archivos del revés como salida.
cut(1) elige secciones de las líneas como salida.
head(1) muestra la primeras líneas de los archivos.
tail(1) muestra las últimas líneas de los archivos.
sort(1) ordena las líneas de texto de los archivos.
uniq(1) borra las líneas duplicadas de un archivo ordenado.
tr(1) sustituye o borra carácteres.
diff(1) compara archivos línea a línea.
Las expresiones regulares básicas (BRE) son usadas:
grep(1) encaja texto con patrones.
ed(1) es un editor de línea antiguo.
sed(1) es un editor de flujo.
vim(1) es un editor interactivo.
emacs(1) es un editor interactivo . (En cierta manera extiende BRE)
Las expresiones regulares extendidas (ERE son usadas por:
egrep(1) encaja texto y patrones.
awk(1) realiza procesado de texto sencillo.
tcl(3tcl) puede realizar cualquier procesamiento de texto imaginable: vea re_syntax(3). Frecuentemente se usa con tk(3tk).
perl(1) puede realizar cualquier procesamiento de texto imaginable. Veaperlre(1).
pcregrep(1)
que esta en el paquete pcregrep
encaja texto con patrones
expresados conExpresiones
Regulares Compatibles con Perl(PCRE).
python(1)
mediante el módulo re
puede realizar cualquier
procesamiento de textos imaginable. Vea
"/usr/share/doc/python/html/index.html
".
Si no esta seguro de que hacen exactamente estas órdenes, por favor use
"man órden
" para solucionarlo por usted mismo.
![]() |
Nota |
---|---|
El criterio de ordenación y alcance de las expresiones son dependientes de
la configuración de localización. Si desea obtener el comportamiento
tradicional de una órden, use la localización C en lugar de UTF-8 anteponiendo la órden
" |
![]() |
Nota |
---|---|
Las expresiones regulars de Perl(perlre(1)),
Perl Compatible Regular
Expressions (PCRE), y las expresiones regulares de Python ofrecidas por su módulo |
Las expresiones regulares Regular expressions son usadas por muchas herramientas de procesamiento de texto. Son similares a la expansión de nombres de archivo el en intérprete de órdenes, aunque más complicadas y poderosas.
Las expresiones regulares especifican un patrón de encaje y está compuesto por carácteres de texto y metacaracteres.
Un metacaracter es solamente un carácter que tiene un significado especial. Existen dos tendencias principales, BRE y ERE, dependiendo de las herramientas de texto como describiremos más adelante.
Tabla 1.24. Metacaracteres para BRE y ERE
BRE | ERE | descripción de la expresión regular |
---|---|---|
\ . [ ] ^ $ *
|
\ . [ ] ^ $ *
|
metacaracteres comunes |
\+ \? \( \) \{ \} \|
|
BRE único metacarácter de escape
"\ "
|
|
+ ? ( ) { } |
|
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 " es metacarácter
por si mismo
|
.
|
.
|
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 en "abc... "
|
[^abc…]
|
[^abc…]
|
encaja con cualquier carácter excepto "abc… "
|
r*
|
r*
|
encaja con cero o más expresiones regulares identificadas por
"r "
|
r\+
|
r+
|
encaja con una o más expresiones regulares identificadas por
"r "
|
r\?
|
r?
|
encaja con cero o una expresión regular identificad por
"r "
|
r1\|r2
|
r1|r2
|
encaja una de las expresiones regulares identificadas por
"r1 " o "r2 "
|
\(r1\|r2\)
|
(r1|r2)
|
encaja una expresión regular identificada por "r1 " o
"r2 " y tratada como una expresión regular entre paréntesis
|
Emacs
usa
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 "escaparlas" con
"\
" en las expresiones regulares en
emacs
.
grep(1) puede usarse para realizar la búsqueda 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 |
---|---|
En la sustitución de expresiones, algunos caracteres tiene un significado especial.
Tabla 1.25. La expresión sustituida
expresión sustituida | descripción del texto que reemplaza a la expresión sustituida |
---|---|
&
|
lo que la expresión regular encaja (use \& en
emacs )
|
\n
|
lo que el enésima expresión regular encaja entre paréntesis (donde "n" es un número) |
En Perl Perl la cadena de sustitución, "$n
" es usada en
lugar de "\n
" y "&
" no tiene un
significado especial.
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=&=
Hay que prestar atención especial a como las expresiones regulares entre corchetes o paréntesis encajan con las cadenas de caracteres en el proceso de sustitución de texto en cada una de las diferentes herramientas.
También se pueden usar estas expresiones regulares para desplazarse por el texto y realizar acciones de sustitución en algunos editores.
La barra invertida "\
" al final de la línea en el
intérprete de órdenes sustituye el carácter de nueva línea por un carácter
de espacio en blanco y permite continuar la misma órden en la siguiente
línea.
Por favor, lea todas las páginas de "man" relacionadas con estas órdenes.
La órden
ed(1)
permite sustituir todas las ocurrencias de
"LA_EXPRESIÓN_REGULAR
" por "EL_TEXTO
"
en el "archivo
".
$ ed file <<EOF ,s/FROM_REGEX/TO_TEXT/g w q EOF
La órden
sed(1)
sustituye todas las ocurrencias de "LA_EXPRESIÓN_REGULAR
"
con "EL_TEXTO
" en el "archivo
".
$ sed -i -e 's/LA_EXPRESIÓN_REGULAR/EL_TEXTO/g' archivo
La órden
vim(1)
puede sustituir todas las ocurrencias de
"LA_EXPRESIÓN_REGULAR
" por "EL_TEXTO
"
en el "archivo
" usando las órdenes
ex(1).
$ vim '+%s/LA_EXPRESIÓN_REGULAR/EL_TEXTO/gc' '+w' '+q' archivo
![]() |
Sugerencia |
---|---|
La bandera " |
Múltiples archivos ("archivo1
",
"archivo2
", y "archivo3
") pueden ser
procesados por las expresiones regulares de manera similar con
vim(1)
o
perl(1).
$ vim '+argdo %s/LA_EXPRESIÓN_REGULAR/EL_TEXTO/ge|update' '+q' archivo1 archivo2 archivo3
![]() |
Sugerencia |
---|---|
La bandera " |
$ perl -i -p -e 's/LA_EXPRESIÓN_REGULAR/EL_TEXTO/g;' archivo1 archivo2 archivo3
En el ejemplo en perl(1), "-i
" es para la edición local
de cada uno de los archivos objetivos, y "-p
" se usa para
el bucle implícito sobre todos los archivos dados.
![]() |
Sugerencia |
---|---|
El uso del parámetro " |
![]() |
Nota |
---|---|
ed(1) y vim(1) usan BRE; perl(1) usa ERE. |
Consideremos un archivo de texto llamado "DPL
" donde
están los algunos nombres de los líderes del proyecto Debian anteriores a
2004 y su fecha de inicio en una lista de campos con el espacio como
separador.
Ian Murdock August 1993 Bruce Perens April 1996 Ian Jackson January 1998 Wichert Akkerman January 1999 Ben Collins April 2001 Bdale Garbee April 2002 Martin Michlmayr March 2003
![]() |
Sugerencia |
---|---|
Vea "Historia breve de Debian" para el último lider del proyecto Debian. |
Awk es usado a menudo para obtener datos de este tipo de archivos.
Por ejemplo, intente lo siguiente
$ awk '{ print $3 }' <DPL # mes de comienzo August April January January April April March $ awk '($1=="Ian") { print }' <DPL # DPL llamado Ian Ian Murdock August 1993 Ian Jackson January 1998 $ awk '($2=="Perens") { print $3,$4 }' <DPL # Cuando Perens empezó April 1996
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 órden interna read
usa los carácteres de
"$IFS
" (campo separador interno) 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.
$ oldIFS="$IFS" # guarda el valor antiguo $ IFS=':' $ while read user password uid gid rest_of_line; do if [ "$user" = "bozo" ]; then echo "$user's ID is $uid" fi done < /etc/passwd bozo's ID is 1000 $ IFS="$oldIFS" # restaura el valor antiguo
(Si se usa Awk para hacer lo mismo, use "FS=':'
" para
asignar el separador de campos.)
IFS is also used by the shell to split results of parameter expansion, command substitution, and arithmetic expansion. These do not occur within double or single quoted words. The default value of IFS is <space>, <tab>, and <newline> combined.
Tenga cuidado al usar estos trucos con el intérprete de órdenes. Cuando el intérprete de órdenes interprete algunas partes del archivo de órdenes y su entrada pueden ocurrir cosas extrañas.
$ IFS=":," # usa ":" y "," como IFS $ echo IFS=$IFS, IFS="$IFS" # muestra si es una función interna IFS= , IFS=:, $ date -R # salida de la órden Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # subintérprete de órdenes --> entrada al principal Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # inicia IFS al valor por defecto $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200
Los siguientes archivos de órdenes hacen grandes cosas como parte de una tubería.
Tabla 1.26. Lista de fragmentos de archivos de órdenes para órdenes entubadas
fragmento de archivo de órdenes (escrito en una única línea) | efecto de la órden |
---|---|
find /usr -print
|
enumera todos los archivos que se encuentran por debajo de
"/usr "
|
seq 1 100
|
escribe del 1 al 100 |
| xargs -n 1 <órden>
|
ejecuta la órden de forma repetida para cada elemento de la tubería teniedo a este como parámetro |
| xargs -n 1 echo
|
divide los elementos separados por espacios en blanco de la tubería en líneas |
| xargs echo
|
mezcla todas la líneas de la tubería en una |
| grep -e <patrón_de_expresión_regular>
|
extrae las líneas de la tubería que contienen <patrón_de_expresión_regular> |
| grep -v -e <patrón_de_expresión_regular>
|
extrae las líneas de la tubería que no contienen el <patrón_de_la_expresión_regular> |
| cut -d: -f3 -
|
extrae el tercer campo de la tubería separado por ": "
(archivo de contraseñas etc.)
|
| awk '{ print $3 }'
|
extrae el tercer campo de la tubería separado por espacios en blanco |
| awk -F'\t' '{ print $3 }'
|
extrae el tercer campo de la tubería separando por tabuladores |
| col -bx
|
elimina los retornos de carro y expande los tabuladores a espacios |
| expand -
|
expande los tabuladores |
| sort| uniq
|
ordena y elimina duplicados |
| tr 'A-Z' 'a-z'
|
convierte mayúsculas en minúsculas |
| tr -d '\n'
|
concatena líneas en una |
| 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 puede repetirse sobre varios archivos usando find(1) yxargs(1) realizando tareas bastante complicadas. Consulte Sección 10.1.5, “Idioms for the selection of files” and Sección 9.3.9, “Repeating a command looping over files”.
Cuando usar órdenes de forma interactiva se complica demasiado, debe considerar escribir un archivos de órdenes (consulte Sección 12.1, “The shell script”).