💾 Archived View for gmi.osiux.com › linux-sysadmin.gmi captured on 2023-04-26 at 13:11:03. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-03-20)
-=-=-=-=-=-=-
Los objetivos con que se creó determinaron una *filosofía* de *UNIX* caracterizada por:
Algunas directivas son:
En estos conceptos se basa la mayoría del software libre existente, por lo que servidores como `sendmail` o `postfix`, están diseñados en pequeños servidores y/o programas que hacen partes de todo un proceso y, mediante sus ficheros de configuración, se pueden enlazar de una u otra forma, así como usar otros programas y/o servidores en lugar de los que vienen por defecto y, así, extender su funcionalidad.
Sobre *filosofía Unix*, de una forma más extensa, *Mike Gancarz*, escribe las siguientes líneas:
La *filosofía UNIX* supone crear programas rápidos, simples, con poca intervención por parte del usuario, o en caso de necesitarla, esta se produzca al principio o lo más mínima posible. Esta se acopla perfectamente a las necesidades de computación de los laboratorios científicos, puesto que *Unix* fue originalmente desarrollado en uno de estos.
A continuación algunas premisas:
En resumidas cuentas la *filosofía Unix* se puede describir como bien lo dice *Doug Mcllroy*:
"Escribe programas que hagan una cosa y la hagan bien, que trabajen en armonía con otros y que manejen flujos de texto, pues esta es una interfaz universal." - *Doug Mcllroy*
"Aquellos que no pueden entender UNIX, están condenados a reinventarlo, pobremente." - *Henry Spencer*, 1987
/ +-- bin binarios +-- boot inicio del sistema, imágenes del kernel +-- dev dispositivos, presentes y futuros +-- etc configuraciones +-- home directorios personales de los usuarios +-- lib bibliotecas +-- lost+found archivos y/o cadenas perdidas +-- media dispositivos extraerles +-- mnt dispositivos montados +-- opt binarios fuera de la distro +-- proc procesos en ejecución +-- root directorio personal del /root/ +-- run archivos de procesos en ejecución +-- sbin binarios del sistema +-- selinux secure linux +-- srv servicios ej: ftp +-- sys system +-- tmp temporales +-- usr archivos compartidos +-- var archivos que varían de tamaño, ej: logs
Es un pseudo-sistema de ficheros que se usa como interfaz para las estructuras de datos del núcleo en lugar de leer e interpretar /dev/kmem. La mayor parte de este sistema de ficheros es de sólo lectura, pero algunos ficheros permiten cambiar variables del núcleo.
Podemos ver las particiones que leyó el *kernel*:
cat /proc/partitions
#+RESULTS:
major minor #blocks name
:
8 0 488386584 sda 8 1 52428800 sda1 8 2 52428800 sda2 8 3 383527960 sda3 11 0 1048575 sr0 254 0 383525912 dm-0
El `uptime` de nuestro equipo puede ser consultado directamente en `/proc/uptime`,
cat /proc/uptime
#+RESULTS:
1901728.32 3010323.20
Si utilizamos el comando `uptime`, éste lee el valor expresado en **epoc** (segundos que pasaron desde el 01/01/1970) y nos informa hace cuántos días y horas nuestro servidor está prendido, además de informar otros valores, como la cantidad de usuarios y el **average**:
uptime
#+RESULTS:
10:53:05 up 22 days, 15 min, 6 users, load average: 1,63, 1,70, 1,58
Aquí se encuentran todos los dispositivos del sistema, presentes y futuros.
Este dispositivo es muy especial y sumamente útil, es un agujero negro, todo lo que se envía a `/dev/null` desaparece
ls -lh /dev/null
#+RESULTS:
crw-rw-rw- 1 root root 1, 3 ene 20 10:37 /dev/null
Si enviamos algo y luego miramos con un `ls` no vemos que se incremente el tamaño del archivo:
echo "hola" >/dev/null ls -lh /dev/null
#+RESULTS:
crw-rw-rw- 1 root root 1, 3 ene 20 10:37 /dev/null
Los discos están identificados con el prefijo `sd`, luego una letra `a`, `b`, `c`, etc y finalmente un número `1`, `2`, `3`, etc que identifica la partición:
Listamos el disco `sda`
ls /dev/sda*
#+RESULTS:
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3
Vemos si esta montado `sda`:
mount | grep sda
#+RESULTS:
/dev/sda1 on /mnt/sda1 type ext4 (rw,relatime,user_xattr,barrier=1,data=ordered)
Visualizamos el espacio disponible:
df -h | grep sda
#+RESULTS:
/dev/sda1 50G 14G 34G 29% /mnt/sda1
Existen 3 descriptores básicos de archivos:
┌─────┬──────────┬───────────────────┐ │ │ │ │ ╞═════╪══════════╪═══════════════════╡ │ `0` │ `stdin` │ entrada estándar │ ├─────┼──────────┼───────────────────┤ │ `1` │ `stdout` │ salida estándar │ ├─────┼──────────┼───────────────────┤ │ `2` │ `stderr` │ salida de errores │ └─────┴──────────┴───────────────────┘
Es posible redireccionar cada uno de éstos descriptores mediante los operadores `>`, `<` y `|`
Buscar el texto **model** en el archivo `/proc/cpuinfo` y enviar el resultado a un nuevo archivo llamado `/tmp/cpu` que contendrá únicamente las líneas que coinciden con el texto **model**:
grep model /proc/cpuinfo > /tmp/cpu cat /tmp/cpu
#+RESULTS:
model : 28 model name : Intel(R) Atom(TM) CPU D425 @ 1.80GHz model : 28 model name : Intel(R) Atom(TM) CPU D425 @ 1.80GHz
Buscar el texto **cache** en el archivo `/proc/cpuinfo` y agregar el resultado al archivo `/tmp/cpu`
grep cache /proc/cpuinfo >> /tmp/cpu cat /tmp/cpu
#+RESULTS:
model : 28 model name : Intel(R) Atom(TM) CPU D425 @ 1.80GHz model : 28 model name : Intel(R) Atom(TM) CPU D425 @ 1.80GHz cache size : 512 KB cache_alignment : 64 cache size : 512 KB cache_alignment : 64
Enviar la salida con errores a `/dev/null`:
xkcd 2>/dev/null
Redireccionar la salida con errores a la salida estandar:
echo "xkcd" | grep 2>&1
El símbolo `|` es usado para redireccionar la salida de un comando a la entrada de otro comando.
Ejemplo:
Lista el directorio `/var/log` ordenando los archivos más nuevos al principio y muestra sólo las primeras 10 líneas mediante el comando `head`
ls -lht /var/log | head
total 14M -rw-rw-r-- 1 root utmp 107K feb 10 20:46 wtmp -rw-r----- 1 root adm 769K feb 10 20:45 mail.info -rw-r----- 1 root adm 769K feb 10 20:45 mail.log -rw-r----- 1 root adm 356K feb 10 20:45 syslog -rw-r----- 1 root adm 337K feb 10 20:45 auth.log -rw-r----- 1 root adm 3,1K feb 10 19:49 messages -rw-r----- 1 root adm 2,9K feb 10 19:49 kern.log -rw-r--r-- 1 root root 29K feb 10 16:42 Xorg.0.log -rw-r----- 1 root adm 1,9K feb 10 16:42 daemon.log
lista el directorio `/var/log` mostrando el tamaño de cada archivo, se filtra el resultando por Megabytes (`M`), luego ordena de mayor a menor y finalmente limita la lista a los primeros 10 archivos que más espacio ocupan, incluyendo el total del directorio:
cd /var/log;du -ch * | grep M | sort -nr | head
#+RESULTS:
496M total 468M atop 15M installer 14M installer/cdebconf 3,3M mail.log.1 3,3M mail.info.1 1,5M auth.log.1
El separador de archivos y directorios es la barra `/`
ejemplos:
/ directorio raíz (*root*) /etc directorio usr (sub-directorio de la raíz =/=) /etc/apache2 apache2 subdirectorio de /etc
1. `pwd`
Muestra el directorio actual.
2. `cd`
Cambia al directorio definido en `HOME`
3. `cd /etc/php5`
Cambia el directorio actual a `/etc/php5`
4. `cd apache2`
Cambia al subdirectorio `apache2` del directorio actual
5. `cd ..`
Cambia al directorio inmediato superior
6. `cd $HOME`
Cambia al directorio definido en la variable `HOME`
7. `cd ~osiris`
Cambia al directorio del usuario osiris
1. `ls -l`
Listar en formato ancho, de esta manera se visualizan gran parte de los atributos de cada archivo y/o directorio
2. `ls` Listar directorio actual 3. `ls -a` Listar directorio actual incluyendo archivos ocultos (comienzan con `.`) ## Cambiando permisos y atributos
r = read 4
w = write 2
x = execute 1
propietario 7 = rwx lectura, escritura y ejecución
grupo 5 = rx- lectura y ejecución
todos 0 = --- ningún permiso
Es necesario ser el propietario del archivo/directorio (o *root*) para realizar el cambio de `usuario` o `grupo`. ### `chmod 750 archivo` Listamos los permisos del archivo `~/.bash_history`
ls -l ~/.bash_history
-rwxr-x--- 1 osiris osiris 326316 feb 10 21:55 /home/osiris/.bash_history
Cambiamos el permiso a `750` y volvemos a listar:
chmod 750 ~/.bash_history
ls -l ~/.bash_history
-rwxr-x--- 1 osiris osiris 326316 feb 10 21:55 /home/osiris/.bash_history
Finalmente cambiamos el permiso a `600` y volvemos a listar:
chmod 600 ~/.bash_history
ls -l ~/.bash_history
-rw------- 1 osiris osiris 326316 feb 10 21:55 /home/osiris/.bash_history
### `chgrp grupo archivo` Establece el grupo al archivo ### `chown usuario archivo` Establece el usuario como propietario del archivo ### `chown usuario archivo` Establece el usuario como propietario del directorio y todo su contenido recursivamente. ## Moviendo, renombrando y copiando archivos:o Copiamos el archivo `~/.bash_history` a `~/.bash_history.bak` y verificamos que sea igual:
ls -lh ~/.bash_history
cp ~/.bash_history ~/.bash_history.bak
ls -lh ~/.bash_history.bak
md5sum ~/.bash_history ~/.bash_history.bak
-rw------- 1 osiris osiris 310K feb 11 11:07 /home/osiris/.bash_history
-rw------- 1 osiris osiris 310K feb 11 11:07 /home/osiris/.bash_history
7b862a967fc7096882583f9a6f662230 /home/osiris/.bash_history
7b862a967fc7096882583f9a6f662230 /home/osiris/.bash_history.bak
Movemos el archivo `~/.bash_history.bak` a `~/historial.bak`:
mv -vi ~/.bash_history.bak ~/historial.bak
ls -l ~/.bash_history ~/historial.bak
«/home/osiris/.bash_history.bak» -> «/home/osiris/historial.bak»
-rw------- 1 osiris osiris 316801 feb 11 11:07 /home/osiris/.bash_history
-rw------- 1 osiris www-data 316801 feb 11 11:13 /home/osiris/historial.bak
Renombramos el archivo `~/historial.bak` a `~/historial.log`
mv -vi ~/historial.bak ~/historial.log
ls -l ~/historial.log
«/home/osiris/historial.bak» -> «/home/osiris/historial.log»
-rw------- 1 osiris www-data 316801 feb 11 11:13 /home/osiris/historial.log
## Ver y editar arhivos: ### `cat`
cat /etc/issue
Debian GNU/Linux 7.0 \n \l
: ### `head`
head /proc/meminfo | head
MemTotal: 2062464 kB
MemFree: 872100 kB
Buffers: 56052 kB
Cached: 642468 kB
SwapCached: 10928 kB
Active: 520204 kB
Inactive: 570096 kB
Active(anon): 366124 kB
Inactive(anon): 211844 kB
Active(file): 154080 kB
### `head -2`
head /proc/meminfo | head -2
MemTotal: 2062464 kB
MemFree: 871860 kB
### `tail`
tail /etc/passwd
hplip:x:106:7:HPLIP system user,,,:/var/run/hplip:/bin/false
pulse:x:107:114:PulseAudio daemon,,,:/var/run/pulse:/bin/false
saned:x:108:118::/home/saned:/bin/false
Debian-gdm:x:109:119:Gnome Display Manager:/var/lib/gdm3:/bin/false
alumno:x:1001:1000:alumno,,,:/home/alumno:/bin/bash
osiris:x:2222:33:OSiRiS,,,:/home/osiris:/bin/bash
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
postfix:x:111:120::/var/spool/postfix:/bin/false
rodrigo:x:1002:1001:Rodrigo Fernandez,,,:/mnt/data/musica:/bin/bash
davfs2:x:112:122::/var/cache/davfs2:/bin/false
tail -2 /etc/passwd
rodrigo:x:1002:1001:Rodrigo Fernandez,,,:/mnt/data/musica:/bin/bash
davfs2:x:112:122::/var/cache/davfs2:/bin/false
### `sed`
cat /etc/issue
sed s/"7.0"/"8.0"/g /etc/issue
cat /etc/issue
Debian GNU/Linux 7.0 \n \l
:
Debian GNU/Linux 8.0 \n \l
:
Debian GNU/Linux 7.0 \n \l
: ## Expresiones regulares Se utilizan para definir patrones para la búsqueda y filtrado: ### `[a-z]` Minúsculas Rango de la **a** a la **z** ### `[A-Z]` Mayúsculas Rango de la **A** a la **Z** ### `[0-9]` Números Rango de 0 a 9 ### `[^..]` Patrón distinto Negación ### `^` comienzo de línea ### `gemini - kennedy.gemi.dev fin de línea ### `.` cualquier carácter ### `?` cero o una aparición ### `*` ninguna o muchas repeticiones ### `+` una o más repeticiones # Acceso remoto usando ssh # Entornos gráficos, ejecución remota de aplicaciones gráficas ## `ssh -X` Es posible ejecutar una aplicación gráfica de un servidor remoto visualizando en el equipo local por medio de `ssh`, solo es necesario incluir el parámetro `-X` y el servidor *X* se redireciona a nuestro *host*
ssh -X caipiroska 'gnome-calculator'
## `DISPLAY\`:0= Utilizando la aplicación `notify-send` se puede enviar un mensaje de notificación, normalmente es utilizado para visualizar eventos del sistema, y estoy lo podemos hacer en un equipo remoto mediante `ssh`:
ssh -X osiris@localhost "DISPLAY=:0 notify-send 'hola!'"
## `vnc4server` Habitualmente se utiliza **VNC** para compartir la sesión actual, pero también se pueden levantar instancias nuevas, pudiendo tener entornos gráficos diferentes en cada sesión de usuario en el mismo servidor. Es necesario ejecutar en el servidor:
vnc4server
# Procesos # Automatizando tareas: `sleep`, `jobs`, `crontab` # Análisis de tráfico de red con `tcpdump` y `wireshark` # Introducción a las redes TCP/IP # Configuración de servicios básicos ## Apache ## PHP ## MySQL ## Postfix `TODO` ## DHCP ### `dhcp3` 1. configuración Es muy simple la sintaxis del archivo `/etc/dhcp3/dhcpd.conf` donde podemos especificar los sevidores de dns (**domain-name-servers**) entre otros parámetros, lo importante es definir la subred, en el caso de tratarse de una LAN es muy común la siguiente configuración:
2. iniciar y detener el servicio
`TODO`
[DONE]{.done .DONE} Sprint <2012-08-06 lun>--<2012-08-10 vie>
1. disponibilidad horaria estimada
| | lun | mar | mie | jue | vie | tot | |--------|------|-----|-----|------|-----|------| | diego | 2.5 | 3 | 0 | 1.5 | 3 | 10. | | joac | 3 | 3 | 0 | 1.5 | 3 | 10.5 | | jose | 6 | 6 | 0 | 3 | 6 | 21 | | hugo | 4 | 0 | 0 | 3 | 6 | 13 | | osiris | 3 | 3 | 0 | 3 | 6 | 15 | | | 18.5 | 15 | 0 | 12. | 24 | 69.5 |
2. disponibilidad horaria real | | lun | mar | mie | jue | vie | tot | |--------|------|-----|-----|------|-----|------| | diego | 2.5 | 3 | 0 | 1.5 | 3 | 10. | | joac | 3 | 3 | 0 | 1.5 | 3 | 10.5 | | jose | 6 | 6 | 0 | 3 | 6 | 21 | | hugo | 4 | 0 | 0 | 3 | 6 | 13 | | osiris | 3 | 3 | 0 | 3 | 6 | 15 | | | 18.5 | 15 | 0 | 12. | 24 | 69.5 |=vsum(@I..@II) ```">
3. estimado versus real
4. burndown
`TODO`
`TODO`
`TODO`