Linuxnuevo
Linuxnuevo
Linuxnuevo
1.- Tanto BIOS (firmware almacenado en ROM de la placa base) como UEFI hacen primero un
POST (power-on self-test) para detectar fallas simples en dispositivos, y después activan los
componentes básicos para cargar el sistema, como vídeo, teclado y medios de almacenamiento.
2.- Carga de la primera etapa del Boot Loader o Gestor de Arranque, almacenado en un disco duro:
BIOS tradicionales, MBR (primeros 440 bytes del primer dispo). El gestor de arranque
examina la tabla de particiones y encuentra la partición de arranque.
EFI. En lugar de emplear MBR, busca la configuración almacenada en la NVRAM de la
placa base, donde se muestra la ubicación de los programas compatibles con UEFI (EFI
applications, como gestores de arranque, selectores de SO, herramientas de diagnóstico, que
deben estar en un dispo de almacenamiento convencional con un sistema de archivos
compatible como FAT12, 16 y 32=usual, en dispos de bloque e ISO-9660 en medios
ópticos). Se ejecutarán auto o se llamarán desde un menú de arranque. El firmware lee los
datos del Boot Manager para ver desde en qué disco y partición se encuentra la partición
EFI (ESP o EFI System Partition). Esta partición no debe compartirse con otros sistemas de
archivos del sistema, como el raíz o los de datos de usuario. Entonces se inicia la aplicación
UEFI por defecto, generalmente un gestor de arranque, por ejemplo GRUB, que cargará el
kernel. UEFI también admite Secure Boot, permitiendo sólo la ejecución de apps UEFI
firmadas, más seguro, pero que puede dificultar la instalación de SO no cubiertos por la
garantía.
El gestor de arranque de la segunda etapa está en /boot. Pantalla para elegir SO. Entonces se carga
el kernel del SO elegido en la RAM, generalmente descomprimiéndolo, y le pasa el control. Ahora
se realizará una comprobación, análisis e inicialización del hardware.
A partir de ahora, ya tiene acceso a almacenamiento masivo. Hasta entonces, la info de fecha, hora
y periféricos más importantes se cargan de una memoria CMOS, alimentada por batería, incluso
cuando está apagado. GRUB, ISOLINUX (arranque desde medios extraíbles), DAS U-Boot
(arranque desde dispositivos integrados).
Si GRUB no muestra la lista de SO al arrancar, se puede invocar con Shift mientras BIOS está
llamando a GRUB (Esc en UEFI). GRUB tiene varios parámetros de arranque:
acpi=off, deshabilita/habilita compatibilidad con ACPI
init establece un iniciador alternativo; init=/bin/bash inicia shell tras arranque del kernel
systemd.unit, activa systemd; systemd.unit=graphical.target p.ej. También acepta niveles de
ejecución definidos para SysV (p.ej. Añadiendo 1 o S de single, se establece el nivel 1)
mem, establece cantidad de RAM para el sistema, útil en máquinas virtuales; mem=512M
maxcpus, establece número de núcleos, p.ej, maxcpus=0 o nosmp, para desactivar soporte
multiprocesador, o maxcpus=2
quiet oculta la mayoría de los mensajes de arranque
vga selecciona modo de vídeo, p. ej. vga=ask, para que muestre una lista
root establece una partición raíz distinta de la preconfigurada en el gestor, como root
=/dev/sda3
rootflags, opciones de montaje para el sistema de archivos raíz
ro, el montaje inicial del sistema de archivos raíz es de sólo lectura
rw permite escribir en el sistema de archivos raíz durante el montaje inicial
Los parámetros deben agregarse a / etc/ default/ grub en la línea GRUB_CMDLINE_LINUX para
que sean persistentes a los reinicios. Cada vez que este archivo cambie se debe generar un nuevo
archivo de configuración para el gestor de arranque, con grub-mkconfig -o / boot/ grub/ grub.cfg.
Durante la ejecución del SO pueden verse los parámetros usados por el kernel en /proc/cmdline.
3.- El gestor de arranque carga tanto el kernel como el sistema de archivos inicial basado en RAM
(initramfs) en la memoria, por lo que puede ser usado directamente por el kernel. Initramfs es un
archivo que contiene un sistema de archivos utilizado como raíz temporal durante el arranque , y
que proporciona los módulos necesarios para que el núcleo pueda acceder al sistema de archivos
raíz real. Cuando esté disponible, el núcleo montará todos los sistemas de archivos configurados
en /etc/fstab y ejecutará el primer programa, init. El kernel configura la memoria y el hardware,
incluyendo procesadores, dispos de almacenamiento y I/O y algunas aplicaciones de usuario
necesarias. Instalar un kernel personalizado sin una imagen initramfs adecuada puede hacer que el
sistema de archivos raíz sea inaccesible.
4.- El kernel ejecuta sbin/init, el proceso inicial que origina el resto de procesos (excepto los
procesos kernel, que inicia directamente el propio kernel). Cuando se carga, initramfs se elimina de
la RAM. Init también mantiene el funcionamiento del sistema y apagarlo limpiamente, limpiar los
procesos normales cuando han finalizado, reiniciar los servicios de inicio de sesión cuando los
usuarios entran y salen… Este proceso de arranque tradicionalmente se realizaba a través de SysV,
colecciones de scripts que iniciaban y detenían servicios a través de runlevels, o niveles de
ejecución del 1 al 6. Actualmente el método predominante es systemd, que arranca de forma muy
rápida debido a que el proceso es más sencillo y se realiza en paralelo, en lugar de una serie
secuencial. Además soporta ejecución de demonios a demanda, monitoreo de procesos con cgroups,
snapshot, recuperación de sesión, control de punto de montaje… Ahora systemd se hace cargo del
proceso init, ya que sbin/init apunta a /lib/systemd/systemd. El comando systemctl de systemd
verifica el estado, inicia, detiene, reinicia un servicio, o lo habilita/deshabilita del arranque (en el
ejemplo https, el servidor web Apache):
$ sudo systemctl status|start|stop|restart httpd.service
$sudo systemctl enable|disable httpd.service
En muchas ocasiones, el service puede omitirse.
El mensaje ALERT! /dev/sda3 does not exist. Dropping to a shell!! indica que el núcleo no pudo
encontrar ese dispositivo, determinado como el sistema de archivos raíz.
Inspección de la inicialización
El kernel almacena sus mensajes, incluidos los de arranque, en el kernel ring buffer de la memoria,
aunque se pierde al apagar o con dmesg –clear. Dmesg muestra los mensajes actuales del búfer,
mostrando en la principio de las líneas la cantidad de segundos relativos al inicio de la carga del
núcleo. Los mensajes de inicialización pueden verse con journalctl -b, --boot, -k o –dmesg. El
comando journalctl --list-boots muestra una lista de números de arranque relativos al arranque
actual, su hash de identificación y las marcas de tiempo de primer y último mensajes. Los registros
anteriores también están disponibles, por ejemplo -b 0 o –boot=0 muestra los mensajes del arranque
actual, -b -1 o --boot=-1 los de la inicialización anterior, -2 para el anterior…
Los registros de inicialización suelen tener cientos de líneas, por lo que dmesg -H o dmesg --human
paginarán el resultado.
Los mensajes de inicialización y otros se guaradan en /var/log. Las opciones -D o --directory de
journalctl también pueden leer mensajes en directorios que no sean /var/log/journal/, la ubicación
predeterminada. Los mensajes de registro de systemd se almacenan en texto sin formato, por lo que
se requiere del comando journalctl para leerlos.
Para inspeccionar los logs de un disco duro cuyo punto de montaje es /mnt/hd, y que se desconectó
y conectó a otro pc como unidad secundaria, se podría emplear journalctl -D /mnt/hd/var/log/journal
o journalctl –directory=/mnt/hd/var/log/journal.
Sistema de ficheros
Método de organización/ buscar archivos en el disco duro. Una partición es una sección físicamente
contigua del disco, donde reside el sistema de archivos. La organización del sistema de archivos
obedece a un estándar conocido como FHS (Filesystem Hierarchy Standard). Por ejemplo, un
pendrive llamado Fedora del usuario Mika estaría en /run/media/Mika/Fedora.
Para verlo desde la interfaz gráfica, ir a Aplicaciones/Archivos/Otras ubicaciones. Aquí puede verse
todo el equipo.
Escritorio Gráfico
Uno de los últimos servicios en cargarse es el Display Manager, que proporciona 3 funciones:
Seguimiento de las pantallas.
Carga del servidor X, que proporciona servicios gráficos a las aplicaciones o clientes X
(inicio de componentes, su ubicación y movimiento...). Actualmente se está sustituyendo por
Wayland.
Gestión de inicio de sesión gráfica y elección del entorno gráfico adecuado al usuario.
Si no se inicia auto, puede iniciarse con el comando startx (o iniciar un gestor de pantalla concreto
como gdm = gnome, lightdm = Ubuntu < 18,04, kdm = kde…)
Para configurar el fondo , el tema y otras cosas, más allá de lo normal, se puede recurrir a la utilidad
gnome tweaks o a gnome-extensions-app. A veces se ejecutan con Alt-F2 y después escibir el
nombre.
Bloque de pantalla (todo sigue ejecutándose) con clic en esquina superior derecha y bloquear o con
Super-L (Super = tecla Windows).
Podemos tener varias sesiones de usuarios diferentes simultáneas, eligiendo el usuario en la parte
superior derecha. Cambiar de sesión no la cierra, sino que la bloquea, para acceder a la nueva
sesión.
El modo de suspensión mantiene todas las aplicaciones en la RAM, pero apaga el resto del
hardware, conservando energía y reduciendo el tiempo de puesta en marcha. Se reanuda moviendo
ratón o pulsando una tecla.
Aplicaciones Predeterminadas. Configuración/Aplicaciones predeterminadas.
CLI
Hostname. Indica el nombre del host de la máquina útil por ejemplo si tienes varias sesiones ssh
abiertas y no sabes cuál es cuál.
Modificación del símbolo de la línea de comando. Aunque generalmente se muestra la opción por
defecto, el administrador puede querer variar el símbolo de CLI para adecuarlo a los diferentes
roles, etc. La variable PS1 es la cadena de caracteres que se muestra como símbolo de sistema. Si
quisiéramos que se mostrara por ejemplo student@c8 $, configuraríamos PS1 a \u@\h \$:
$ echo $PS1
\$
$ PS1= “\u@\h \$”
student@c8 $ echo $PS1
\u@\h \$
student @c8 $
TIPOS DE USUARIOS
Root (prompt root, home es /root, solo para administracion, identificador de 0), normales )(home
en /home, lo suele crear el root, ID superior a 500 o 1000o de trabajo y de sistema o especiales.
(cuentas de sistema con las que no se puede hacer login, UID 1 a 100, no tienen shell, creadas
generalmente de forma automatica, y ejecutan diversos procesos de sistema como bin, daemon,adm,
mail...)
Los usuarios tienen un directorio home personal al que solo el tiene acceso, una shell y han de
pertenecer al menos a un grupo.
Metacaracteres
Comandos básicos
touch f1– crea un archivo vacío si no existe y si existe actualiza fecha de modificación.
cp origen destino – cp etc/pass . (copia pass en el directorio actual (.) Copiar requiere x para
directorio del archivo y r para el archivo a copiar, y requiere r y x en el directorio al que se copia
dd copia archivos o particiones enteras a nivel de bits. Útil para clonar o eliminar discos o
particiones
dd if=/dev/zero of=/tmp/swapex bs=1M count=50
archivo de entrada, de salida,tamaño de bloque (1mega, usar K, M, G u T para otros tamaños), n.º
de bloques
dd if=/dev/sda of=/dev/sdb para clonar un disco duro no hace falta numero ni tamaño de bloques
cp origen destino – Copia el archivo de origen en el destino. Copy f1.txt f2.txt, copia el archivo f1
en f2 (si no existe lo crea)
cp – i origen destino – nos pregunta si quiero sobreescribir el archivo en caso de que sean iguales,
ya que por defecto lo sobreescribe.
Cp f*.txt /tmp — Copia todos los archivos que empiecen por f en el directorio tmp.
Cp -r dir3 dir6 – Para copiar directorios hay que poner la opción -r (recursivo)
man ls > ejemplo1.txt — Traslada el contenido de man ls a un fichero de texto en lugar de a pantalla
less ejemplo.txt – ve el archivo como en editor, línea a línea con flecha abajo, con barra espaciadora
otra página y con q se regresa
tree – ver el arbol de directorios
touch. Puede crear un archivo vacío (touch filename), y suele usarse para configurar o actualizar
archivos, ya que actualiza por ejemplo la marcha de hora. Con -t puede establecerse una marca de
fecha y hora.
Touch – t 201804301015 somefile # establece la marca de tiempo de somefile a 10:15 del 30 de
abril de 2018
wget – Permite descargar una web o archivo (por su link) de internet
wget https://imgs.xkcd.com/secuity.png
who – usuario conectado
Enlaces
Cuando se crea un archivo, se le asocia un inodo, que contiene los metadatos del archivo (número
de inodo, tamaño, permisos, nombres de grupo/usuario y la dirección de los datos). Hay una tabla
de inodos en el sistema, pero no guarda el nombre del fichero. Estos se guardan en los directorios,
donde se asocia cada nombre de archivo con el número de inodo asociado.
-físicos (hard). Etiqueta o nuevo nombre asociado al archivo, no una copia separada. Son el mismo
fichero con distintos nombres. Son enlaces que apuntan al inodo. Mientras haya un enlace
apuntando al fichero, este no desaparece. Es decir, si tenemos un enlace apuntando a un archivo, y
se borra cualquiera de los dos archivos, permanecerá el otro.
-Simbólicos (soft). Con ln -s. No contiene los datos del archivo, sino que apunta al registro del
sistema de archivos donde se guardan los datos. Es como un acceso directo. Si borramos el fichero
original, el enlace no funciona. Son ficheros independientes que apuntan al fichero que a la vez
apunta al inodo.
Ls -li fichero1.txt – Nos muestra además el numero de inodo
echo adios >> fichero1.txt – añade el texto al final del archivo
du – Tamaño en disco
Historial
History -10 – últimos 10 comandos introducidos (sin número, mostrará el historial completo)
Comandos externos – Son los que tienen un binario o ejecutable, como mkdir, ls, cd
Comandos internos o buildt in– Está integrado en la shell, no tiene un binario, como ps, cd, history.
Por ello son más rápidos que los externos. Pueden variar en shells diferentes. Se pueden ver
escribiendo help en la terminal. Si escribimos type más el comando, nos dice si es una orden interna
o un binario localizado en determinada carpeta.
alias tam=”du -m home/descargas” – Nos permite crear nuestros propios comandos. Aquí se crea
un alias o macro llamado tam. El sistema sustituye tam por todo lo que está entre comillas.
Tiempo
Time ls – nos muestra el tiempo que tarda un comando o proceso en realizarse. Nos muestra tb
cuanto es el tiempo real, y cuanto de ese tiempo se debe a procesos que está ejecutando el sistema
en segundo plano.
Cal – nos muestra el calendario. Cal 2015 – nos muestra el calendario del año 2015, cal -m 8 nos
muestra agosto, o cal -m 8 1999, nos muestra el mes de agosto de 1999
ncal es un poco más potente y tiene algunas opciones, como ncal -M que permite ver el calendario
empezando en lunes, en lugar desde domingo.
Date – Para ver la hora y fecha actual.
Date + ‘%d’ – visualiza el día actual (m nos muestra el mes, y el año) En mayúscula pone el nombre
completo, en minúscula sólo abreviado.
Date + ‘Hoy es %d %B’ – Hoy es 25 de abril. – Nos lo muestra con formato
date 081522002019 – Nos permite establecer la hora (no recomendado). Requiere root.
Uptime – Nos muestra cuanto tiempo ha estado el SO arrancado, numero de usuarios conectados, y
carga media de los últimos 3, 6 y 22 minutos
uptime -p –nos dice cuanto tiempo lleva el sistema trabajando
uptime -s – nos dice cuando se encendió el sistema
Find y locate
REDIRECCIONAMIENTO
La redirección de entrada es con <. Si tenemos un programa llamado do_something que lee desde
stdin y escribe en stdout y stderr, podemos hacer que reciba la entrada en su lugar desde un archivo:
do_something < archivo_entrada
Si no se especifica nada, se toma como do_something 1, o salida estándar. Si lo que queremos es
redirigir a un archivo únicamente los errores:
do_somethind 2> archivo_error
Para enviar cualquier cosa escrita en stderr (2) al mismo sitio que stdout (1):
do_something > archivo_salida 2>&1 o (en bash) do_something >& archivo_salida
echo esto es una prueba >> documento1.txt
tr e x < documento1.txt — sustituye e por x en el documento1.txt
wc -l – cuenta líneas. Se queda a la espera recibiendo líneas (enter entre líneas, Ctrl + D para salir)
wc -l < documento1.txt – cuenta las líneas del archivo
wc -l << final – va contando líneas hasta que se escribe la palabra final, en entrada estándar
tr a p << end – sustituye todas las a por p hasta que encuentra la palabra end
Redirección de errores
cat documento50 2> error.txt - Visualiza documento50, y como no existe y genera error, y lo
guarda en el archivo error.txt (2 es el código de stderr)
SE podría colocar 1> para la STDOUT, pero como por defecto linux asume que es lo que quieres,
no es necesario
Tuberías o Pipe
wc (Word Count)
cat nombres | wc — Nos muestra 7 7 50 , que son líneas, palabras y caracteres
-l cuenta líneas -w cuenta palabras -c cuenta bytes m cuenta caracteres (bytes y caracteres
suele ser lo mismo al trabajar con textos)
-L nos dice cuál es la línea con más caracteres
cat etc/ passwd | wc -l ---- Nos muestra la cantidad de usuarios de nuestro sistema, ya que en el
archivo passwd, cada línea se corresponde con un usuario
ls -l | wc -l – Nos muestra la cantidad de directorios y subdirectorios
uptime | wc -w — Nos muestra la cantidad de palabras de la salida del comando uptime
tee
ls -l | tee listar.txt listar2.txt – Muestra el contenido de ls -l por la salida estándar (pantalla) y al
mismo tiempo lo redirige a los archivos listar.txt y listar2.txt
ping www.google.com | tee archivoping.txt — Nos hace el ping en directo y va guardando en el
archivo las solicitudes que vamos viendo en consola (Ctr + C para detener)
grep
grep antonio nombres – Busca todas las coincidencias de antonio en el archivo nombres
grep antonio * – Busca en todo el sistema
grep -s antonio * – Busca en todo el sistema, pero omite aquellos resultados que producirían
warnings o errores por no tener permisos de lectura o por ser directorio
en var / log están todos los logs del sistema
grep error *.log en este directorio buscará todos los ficheros en los que aparezca la palabra error
grep -sl error *.log – Nos diría únicamente los archivos que contienen error
grep -sc error *.log – Nos dice cuántas veces se encuentra el error
grep -si error * .log – Nos muestra cualquier error generado, ya aparezca la E en mayúscula o
minúscula
grep -r bin / -- Busca en todo el sistema (desde la raíz), recursivamente (en carpetas y subcarpetas)
todas las coincidencias de bin en el nombre del recurso o en la ruta.
ls * | grep D — Recibe la salida del comando ls y filtra todos los elementos que contengan D.
ls * | grep D | wc -l – Además de lo anterior nos cuenta los elementos
ls -l | grep “jul 27” (en var/log) – Nos filtra el resultado de ls. Si el texto tiene comillas o espacios
en blanco, encerrar toda la búsqueda entre comillas.
grep sysadmin passwd – filtra info de passwd que contiene el patrón sysadmin
grep ‘root’ passwd – filtra todas las veces que aparece root en passwd
grep ‘^root’ /etc/passwd – filtra todas las lineas que empiezan por root en passwd
grep ‘r$’ alpha.txt — filtra todas las lineas que acaban en r en alpha.txt
grep ‘r..d’ red.txt – filtra todas las palabras de cuatro letras que empiezan por r y acaban en d
grep ‘[0-9]’ profile.txt – filtra todas las lineas que tienen números
grep ‘[^0-9]’ profile.txt – filtra todas las lineas que contienen caracteres no numericos
grep ‘[.]’ profile.txt – filtra todas las lineas que contienen un punto.
Grep ‘re*d’ red.txt – filtra todas las palabras que empiecen y acaben en r y d, y tengan cero o más e
en el medio
grep ‘r[oe]*d’ red.txt – igual que el anterior, pero con e u o
grep ‘ee*’ red.txt – filtra resultados que contienen al menos una e.
Si no se especifica nada, grep funciona sobre la entrada estándar (el teclado)
Si hacemos cat / etc/passwd , podemos ver todos los usuarios del sistema, y la shell que se está
usando ( o el comando usr/sbin/nologin en caso de usuarios de sistema)
cat / etc/passwd | grep nologin | wc -l – Nos filtra en la salida de cat los usuarios de sistema
(nologin) y los cuenta
sort
Ordenar resultados. Sort nombres o Cat nombres | sort — ordena fichero nombres alfabéticamente
-r es alfabéticamente, pero desde la z
sort nombres -o nombres_ordenados Guarda la salida en el fichero nombres_ordenados. Esto sería
igual que la redirección sort nombres > nombres_ordenados
ls | sort – ordena el ls alfabéticamente
ls | sort -o tmp/etc_ordenados – ordena y guarda en ese archivo
du -ma |sort -n . Ordena el directorio actual por tamaño (de menor a mayor)
cut
Si podemos du -a, nos aparece el tamaño y nombre de todos los ficheros, separados por un
tabulador. Si queremos que sólo aparezca el primer campo, que es el tamaño, obviando nombre y
ubicación, ponemos du -a | cut -f1. Si queremos que sólo muestre el segundo campo, -f2
En cat etc/passwd | cut -f1, las propiedades de cada elemento están separados por : en lugar de por
tabuladores, por lo que se tiene que usar -d, que delimita por :, y en este caso muestra campos 1 y 6
cat /etc/passwd | cut -d ‘:’ -f1,6
ls -l nos muestra varios campos separados por espacios. Para que muestre únicamente el tercer
campo, el propietario: ls -l | cut -d ‘ ‘ -f3. Aquí hay un problema si separamos por tamaño, ya que en
los casos en que el tamaño sea de menos de 4 dígitos (4096), aparecerán más espacios en blanco, no
sólo uno, y linux lo interpreta como que son diferentes campos. Como el tamaño está entre las
posiciones 30 y 39, podríamos poner: ls -l | cut -c 30-39
PROCESOS
Un proceso es una instancia de un programa que se está ejecutando en el SO. Tienen asignados
recursos de CPU y memoria. Estructura jerárquica padre-hijo (procesos adicionales creados, fork).
Estados:
Modo normal.
Daemon o servicios en background
Zombie. Procesos eliminados, pero que no se han limpiado de la lista de procesos.
Propiedades:
PID – Identificador
Usuario y propiedad.
PPID – Proceso padre. Todos excepto en proceso PID 1 (systemd o init en otros SO). Los
procesos hijo se crean por fork del proceso padre, y heredan algunas de sus características
(espacio de direcciones, usuario, grupo…). Pj, ls en proceso hijo de su shell (padre). Para
ver el proceso 1, se puede hacer ls -ls /sbin/ init. Puede verse que el proceso init se ha
convertido ahora en systemd.
Aquí podemos ver que el padre es gnome-terminal, cuyo padre a su vez es el 908. Si seguimos
rastreando padres llegaremos al proceso 1, init o systemd
ps ux | less. Podemos ver de forma paginada todos los procesos que se están ejecutando de nuestro
usuario, con el terminal gráfico Xwindow. Añadiendo ps uxf | less se ve de forma jerárquica en
árbol
ps -ef | grep firefox permite ver los procesos en los que se está ejecutando firefox.
pstree | less permite ver todos los procesos en un árbol jerárquico (pstree -p muestra también los
números id de proceso). Si queremos ver el árbol relacionado con un sólo proceso, no el árbol
completo, podemos poner pstree 1772 (muestra el proceso 1772 y sus hijos) o pstree -s 1772 que
muestra también todos los padres hasta systemd
Prioridades de procesos. La escala de -20 (máx. Prioridad, se les dará más espacio de tiempo para
trabajar) a +19. Por defecto se les dará 0. En ps -l o en ps -elf | less, se puede ver en el campo NI
(nice). Para reducir la prioridad de un proceso:
Tras ejecutar sleep 1000, se crea un proceso dormido de PID 6437. Con ps -eo pueden verse solo
los campos solicitados (en este caso pid, ni y comm = CMD)
renice +10 6437 aumenta el nice del proceso 6437 en 10. Usuarios normales no pueden poner nice
negativos.
Top. Pantalla interactiva de procesos y recursos que consumen (CPU a nivel de usuario, de sistema,
memoria, swap = cuanto menos usada mejor, S = Status, que puede ser Sleeping/Running…).
Se puede ordenar el listado por memoria (M), procesador (C), proceso(P)
c muestra el comando completo
k mata procesos, con esc salimos).
V cambia entre formato normal y árbol,
u permite poner los procesos de determinado usuario escribiendo el nombre del usuario
m la memoria en gráfico de barras, número o no la muestra
t lo mismo con cpu.
Una vez puesto todo como nos gusta, W nos guarda esta personalización, que saldrá cada vez que
usemos top.
Kill. -l nos muestra los códigos de cada señal que puede enviarse a un proceso (más info en man
signal ). Por ejemplo, si creamos un proceso sleep 1000 en la terminal y vemos con ps -ef | grep
sleep que es el proceso 7837, y queremos enviar una señal Kill SIGTERM (código 15 en kill -l),
podemos escribir kill -15 7837.
kill -9 (SIGKILL) mata el proceso evitando que se quede esperando o colgado.
Hacer que un proceso se ejecute en segundo plano (&). sleep 1000 &. Normalmente el proceso
sleep se queda ejecutándose en primer plano y no puedes hacer nada mientras, por lo que si quieres
seguir trabajando tienes que abrir otra terminal. Para ponerlo en segundo plano usas el &, y después
de hacerlo linux nos responde con el ID del proceso o Job que se está ejecutando en segundo plano.
Jobs. Ver todos los procesos o jobs que se están ejecutando en segundo plano. Si creo dos procesos
sleep &, con este comando veré que ambos se están ejecutando. Jobs -l nos muestra también el ID
de los procesos en ejecución
USUARIOS
El archivo less /etc/passwd contiene todos los usuarios del sistema. Por ejemplo puede mostrar
user001:x:1000:1000:Jose ,,,:/home/user001:/bin/bash, que nos dice que el usuario 001, con
clave encriptada (x) tiene ID 1000 y grupo principal ID 1000, su directorio y su bash
less /etc/group nos permite ver los grupos creados en el sistema
id nos muestra toda la info relevante del usuario, incluyendo todos los grupos a los que pertenece.
Ls -l muestra los permisos. X o escribir tb permite modificaciones como borrar el archivo. La x no
quiere decir que se puede ejecutar, ya que al ser del usuario si está permitido, sino que el archivo no
es un ejecutable (necesitaría ser un programa o script). En un directorio, la x quiere decir que se
puede ver el contenido (acceder a la carpeta), w que podemos modificar o borrar archivos del
directorio.
El directorio /etc tiene los permisos drwxr-xr-x, por lo que permite lectura, escritrura y entrada para
propietario, y lectura y entrada para el grupo y otros. Por ello podemos listar su contenido (r) o
entrar. El archivo /passwd tiene permisos -rw-r—r-- y su grupo es /passwd. Como pertenecemos a
otros, podemos leerlo con cat, pero no modificarlo con touch.
El archivo which de la carpeta /bin, tiene permisos -rwxr-xr-x, y su grupo es root. Por ello puede
ser leído, mod y ejec por el propietario, yleído y ejecutado por el grupo y leído por otros.
El directorio /root tiene permisos drxw------, por lo que sólo tiene permisos para el usuario (nadie
más puede leer, entrar o acceder, por lo que el usuario normal no puede listar el directorio, ni
escribir o leer un fichero dentro de esa carpeta).
Podemos ver que los permitos de shadow, archivo de /etc son -rw-r----- y que su grupo es shadow.
Por lo tanto no lo podemos modificar con touch o leer con cat(usuario por defecto es user001)
Ahora veremos un script para crear un usuario.
Comando chmod
chmod u | g | o | a (para usuarios, grupo, otros o todos)
Si tenemos el archivo prueba cuyos permisos son -rw-r—r--, para darle permisos de escritura a
grupos pondríamos chmod g+w prueba pasando a -rw-rw-r--.
chmod go+wr prueba añade permisos de escritura y lectura para el grupo y otros.
Chmod g+rw,o+r prueba añade permisos de escritura y lectura para grupo y lectura a otros.
chmod a-x prueba eliminaría permisos de ejecución para todos.
Con los directorios funciona igual. Si tenemos un directorio dir_prueba, y vemos con ls -ld que sus
permisos son drwxr-xr-x , podemos quitar de escritura en otros con chmod o-x dir_prueba.
Octal. 4 – r 2 – w 1 – x 0 – sin permiso. Se halla la suma para cada parte de los permisos
rw-r- - r - - - - - > 644 rwxrwxrwx - - - > 777 - - x - - x - - x - - > 111
000 o retirar todos los permisos, evita la modificación accidental, aunque como usuario y
propietario, podría cambiar los permisos a unos que sí lo permitan en caso de necesidad.
chmod 444 prueba establece los permisos a r - - r - - r - - en prueba.
Los permisos por defecto de los archivos son 644 (rwxr- - r - -) y 755 para directorios 644
VARIABLES
printenv o env muestra las variables de entorno, gralmente en mayúsculas, y seguidas de un valor
set muestra variables de entorno y de shell
Para visualizar las variables, puede escribirse printenv USER (se visualizará user001, la variable
que representa nuestro usuario) o printenv PWD (se visualizará /home/user001, la variable que
maneja nuestro directorio home.
Sin embargo, para trabajar con variables en shell script, hay que ponerlas con $, ya que sino las
interpreta como texto plano.
# echo $PWD Nos indica el directorio en el que estamos, por ejemplo /home/user001
$DISPLAY Terminal en el que estamos conectados. :0 es terminal X-Windows.
#echo $TERM Tipo de terminal con el que estamos conectados. Linux en terminal con entorno
tipo carácter Ctrl+Alt+F3, o xterm-256color en un terminal gráfico de X-Window
#echo $HOME Nos permite saber cuál es el directorio home que tenemos actualmente. P. ej.
/home/user001. #cd $HOME nos lleva directamente a la carpeta Home.
#echo $SHELL nos indica la shell que se está ejecutando (bin/bash p.ej)
#echo $LANG nos indica el lenguaje y el juego de caracteres (p.ej. es_ES.UTF-8)
#echo $PATH #/usr/local/bin:/usr/bin:/usr/local/games:/usr/games
indica los directorios donde han de encontrarse los ejecutables.
#echo $PS1 identifica el prompt
Las variables de sistema suelen ir en mayúscula, las que creamos en minúscula. No aparecen con
printenv ya que aquí no se ven las de entorno, pero si con set, con las que se ven las variables de
entorno y las creadas para la shell. Podemos ir modificando el valor de la variable en la shell.
# v=10
# echo $v muestra 10. Para usar la variable, hay que emplear $.
# v=20
# echo $y muestra 20
PATH. Nos indica la ruta de los ejecutables. Si el ejecutable está en el path, basta con escribir si
nombre para ejecutarlo. Sino, has de usar ./programa o con la ruta completa.
Crearemos un ejecutable para que Linux lo encuentre. Desde el directorio ejecutable creado en
nuestro directorio personal.
$ echo “ls -l” > listar.sh # creamos un script muy simple listar.sh, que contiene ls -l
$ chmod +x listar.h # le damos permisos de ejecución
$ listar.sh # linux no lo encuentra si lo ejecutamos. Tendríamos que poner
el path completo /home/yolanda/ejecutable/listar.sh o ./listar.sh (./ es directorio actual)
$ set PATH=$PATH:/home/yolanda/ejecutable #Añadimos la dirección al PATH, colocando
también $PATH para no eliminar el contenido que ya tiene, y así se puede ejecutar directaemente
listar.sh
PS1 ( Variable de prompt). Podemos cambiar nuestro prompt. Se suelen usar las siguientes
variables de control:
\u – usuario \H – nombre del equipo
\t o \T – hora actual \s – Nombre del shell
\w – directorio actual \n – Nueva línea
\v – versión de bash \d – Fecha actual
\[ inicio de secuencia de caracteres no imprimibles, para poner scripts
\] -- fin de secuencia de caracteres no imprimibles
$ PS1=”Mi prompt: ” #Cambia nuestro prompt a Mi prompt:
$ PS1=”Usuario \u: ” #Cambia nuestro prompt a Usuario yolanda:
/etc/profile carga las variables de login del sistema, las más globales, una vez al cargar el sistema
/etc/bash.bashrc o /etc/bash_profile carga las variables de entorno de bash, cada vez que se inicia el
bash. Estas dos variables son para todos los usuarios.
Si queremos crear alguna para usuarios específicos, podemos hacerlo en los archivos
ocultos .profile, .bash.
w nos permite ver qué usuarios están conectados ahora al sistema, incluyendo cuándo se ha
autenticado, el tiempo que lleva conectado, etc.
whoami quién soy yo ahora
sudo whoami (pide contraseña del usuario actual). Con sudo tienes privilegios para cambiar
permisos.
finger yolanda info del usuario como nombre, directorio, shell (si no tiene bin/false). Es importante
que los usuarios tengan shell para poder hacer intrusión desde ellos.
Uname -a nos proporciona info de la versión del kernel
cat /proc/cpuinfo | meminfo nos proporciona info del procesador
free memoria libre
df espacio libre en disco en cada partición
Contraseñas
passwd – cambia pass de ese usuario
passwd -S sysadmin para ver info
sysadmin P 12720/2020 0 999999 7 -1
user, activa (L=locked, NP=no pass), fecha, dias que tienen que pasar para poder cambiar,
caducidad, dias en los que la cuenta quedara activa tras expiración de pass