Linux¶
Enlaces¶
- Tricks de Carlos Fenollosa
- Programar en Bash, pequeño manual de referencia
- Bash Conditional Expressions
- Linux Command Library
Gestión de paquetes¶
Equivalencias entre apt/dpkg y pacman¶
| Acción | Debian/Ubuntu | Arch |
|---|---|---|
| Actualizar la base de datos de paquetes | apt update |
sudo pacman -Syy |
| Actualizar el sistema | apt upgrade |
sudo pacman -Syu |
| Instalar un paquete | apt install <paquete> |
sudo pacman -S <paquete> |
| Desinstalar un paquete dejando sus dependencias | apt remove <paquete> |
sudo pacman -R <paquete> |
| Desinstalar un paquete y sus dependencias dejando las usadas por otros | apt autoremove |
sudo pacman -Rs <paquete> |
| Desinstalar paquete, dependencias y ficheros de configuración | apt purge |
sudo pacman -Rns <paquete> |
| Eliminar paquetes huérfanos | apt autoremove |
sudo pacman -Rns $(pacman -Qdtq) |
| Buscar un paquete | apt search / apt-cache search |
pacman -Ss <paquete> |
| Comprobar si un paquete está instalado | dpkg -l \| grep <paquete> |
pacman -Q <paquete> |
| Listar los ficheros de un paquete | dpkg -L <paquete> |
pacman -Ql <paquete> |
| Comprobar a qué paquete pertenece un archivo | dpkg -S <archivo> |
pacman -Qo <archivo> |
| Listar todos los paquetes instalados | apt list --installed |
pacman -Q |
| Listar paquetes instalados fuera de los repositorios | apt list --installed \| grep -v / |
pacman -Qm |
Comandos apt y dpkg¶
- Encontrar un paquete por su nombre:
apt-cache search 'cadena' - Encontrar un paquete ya instalado que contiene un fichero:
dpkg -S 'fichero' - Encontrar un paquete no instalado que contiene un fichero:
apt-file search 'fichero' - Localizar el repositorio del que procede un paquete:
apt-cache policy 'paquete' - Listar los ficheros que contiene un paquete ya instalado:
dpkg -L paquete - Listar los ficheros que contiene un paquete no instalado:
apt-file list paquete(antes hay que hacerapt-file update) - Listar los ficheros de un fichero .deb:
dpkg -c paquete.deb - Purgar los paquetes que quedaron en estado
rctras eliminarse (configuración residual):sudo apt purge ~c - Solucionar problemas con paquetes mal instalados:
dpkg --configure -a
Para usar apt-file hay que instalarlo y actualizar su base de datos previamente:
1 2 | |
Aplicaciones y servicios interesantes¶
- ReText: Editor Markdown.
- Franz: Configuración de icono en GNome.
- App Grid: Repositorio de aplicaciones.
- OpenWeather Shell Extension: Información del tiempo meteorológico en la barra de menú.
- KodExplorer
- Gitea
Comandos útiles¶
strace -e file [command]: runscommand, printing out any time a file is opened or checked.strace -e file,network,process [command]: the same as above, but also printing network process and subcommands run.strace -e file,process -f [command]: the -f parameter follows forks -- in case it's not main command but a subshell that you're interested in.strace -p [PID]: Connect to pid PID and start tracing.route -n/netstat -nr: Tabla de rutas del sistema (muestra IPs en lugar de hostnames).du -h --max-depth=1 .: Tamaño de un directorio y sus subdirectorios directos.du -sh */ | sort -h: Muestra los directorios del directorio actual ordenados por tamaño (en formato humano) indicando su tamaño.find [directorio] ! -user [usuario] -ls: Lista los ficheros que NO pertenecen a un usuario.badblocks -swv /dev/sda: Bloquear sectores defectuosos (sustituir/dev/sdapor el dispositivo que corresponda.sudo badblocks /dev/sda > badblocks.txt; sudo fsck -l badblocks.txt /dev/sda: Bloqueo de sectores defectuosos del disco duro (fuente).mkdosfs -F 32 -v -n "" /dev/sdc1: Formato de partición en FAT32.cat fichero.txt | awk '{print $5}': Imprime la quinta columna (separando por espacios) de cada linea del fichero.cat fichero.txt | cut -d' ' -f5: Imprime la quinta columna (separando por espacios) de cada linea del fichero.cat fichero.txt | sed -e 's/ /\n/g': Sustituye todos los espacios del fichero por retornos de carro.netstat -ntu|grep :80|wc -l: número de conexiones al servidor HTTP.netstat -ntu|grep :21|wc -l: número de conexiones al servidor FTP.netstat -tulanp: Lista los puertos TCP/UDP abiertos (tanto de servidores como de clientes).netstat -tlnp: Lista los puertos TCP abiertos de los servicios.sudo netstat -lp --inet: Puertos de red abiertos y procesos asociados.crontab -e: Añadir un job a cron.sudo blkid: Lista los dispositivos de bloques (discos) disponibles en el sistema.sudo nmap -sP 192.168.1.0/24: Descubrir todos los equipos presentes en la red192.168.1.0.sudo dd if=/dev/zero of=/dev/mmcblk0: Formateo de una tarjeta de memoria (en realidad vale para cualquier dispositivo de almacenamiento).sudo tcpdump -s 0 -i ppp0 -w trafico.pcap: Captura de tráfico por el interfaz ppp0.iptables -L -n: Listar reglas iptables en formato numérico (muestra IPs en lugar de hostnames).iptables -t nat -L: Listar reglas iptables de tabla NAT.wget -q -O - url: Hace la request de la URL sin emitir trazas (-q = no verbose) y redireccionando la response a la salida estándar (-O -).cat /etc/resolv.conf: Muestra el gateway en uso.nmcli dev show <adaptador_red>: Muestra los parámetros de la conexión de red (IP, gateway, DNS's, etc.).ldd <binario>: Indica las librerías que usa el binario.exiftool -AllDates='2010:08:08 15:35:33' -overwrite_original photo.jpg: Actualiza todas las fechas dentro de la metainformación de un JPG.exiftool -all= photo.jpg: Borrar toda la metainformación de una foto (por cuestiones de privacidad antes de subirla a un sitio por ejemplo).mplayer -vo caca MovieName.avi: Reproduce un vídeo en consola con ascii. Para verlo en blanco y negro sustituircacaporaa.sudo traceroute -4T -p 22 192.168.1.203: Comprobar la traza hasta alcanzar un determinado puerto en una determinada máquina.dig @8.8.8.8 -t any eduardofilo.es: Query DNS de los registros de cualquier tipo a través del servidor8.8.8.8al dominioeduardofilo.es.sudo stat /proc/1/exe: Nos da pistas de si el sistema funciona sobre SysV, Upstart o Systemd (fuente).stty < /dev/port: (sustituirportpor lo que corresponda) Interroga el puerto para encontrar sus parámetros de conexión.zenity: Para dotar de cuadros de diálogo a los scripts bash. Documentacióntaskset: Para fijar un proceso a un conjunto de CPUs. Por ejemplotaskset -c 0-3 <command>fija el proceso<command>a las CPUs 0-3.
SSH¶
Alias SSH¶
Para asimilar un identificador a una pareja user@host, editar el fichero ~/.ssh/config y añadir un bloque como el siguiente (fuente):
1 2 3 | |
Tunel de un puerto remoto por SSH¶
(Fuente) Para conducir el tráfico hasta un host:puerto remoto canalizándolo por un tunel seguro, se puede utilizar el comando ssh. Por ejemplo, vamos a tunelizar una conexión contra el puerto telnet de la máquina remota telnet.example.com por medio del usuario ssh-user para tenerlo disponible en el puerto 2000 local de nuestra máquina:
1 | |
A partir de ahora podremos conectarnos al telnet conectando con localhost:2000.
Autentificación automática por SSH¶
Conseguiremos que la autentificación del cliente se haga por medio de una pareja de claves privada/pública en lugar de con identificador de usuario/password. Primero generamos la pareja de claves pública-privada ejecutando en el cliente ssh-keygen:
1 2 3 4 5 6 7 8 9 | |
Las claves se almacenan por defecto en ~/.ssh/, quedando el directorio así:
1 2 3 4 5 | |
Los ficheros id_rsa e id_rsa.pub contienen respectivamente las claves privada y pública. El fichero known_hosts contiene la lista de las claves públicas de las máquinas reconocidas.
Ahora se debe copiar la clave pública al servidor, al fichero ~/.ssh/authorized_keys. Para ello se utiliza el comando ssh-copy-id:
1 2 | |
ssh-copy-id es un script que se conecta a la máquina y copia el archivo (indicado por la opción -i) en ~/.ssh/authorized_keys, y ajusta los permisos a los valores adecuados.
Si no se dispone del programa ssh-copy-id se puede realizar una copia manual a la máquina remota del fichero conteniendo la clave pública (por ejemplo usando scp o sftp) y añadir su contenido al fichero ~/.ssh/authorized_keys.
Ahora la conexión debería funcionar sin necesidad de introducir la clave. Si no es así es posible que sea un problema de permisos en los ficheros. Los permisos correctos deben ser similares a estos:
1 2 | |
La conexión SSH se realizará indicando el fichero con la clave privada como argumento de la siguiente forma:
1 | |
(Si el nombre del fichero con la clave privada es precisamente el del ejemplo, es decir id_rsa, creo que no es necesario indicarlo con la opción -i).
Ejecución remota de aplicaciones XWindow¶
- Abrir el servidor X (Cygwin)
- Iniciar sesión remota: ssh -X [usuario]@[máquina]
- Ejecutar la aplicación
Uso básico de screen¶
A continuación indico el uso típico:
-
Arrancamos una sesión:
1shell ~$ screen -
Aparece una splashscreen que cerramos pulsando enter y ya podemos trabajar
-
Lanzamos un comando:
1screenshell_1 ~$ top -
Para cerrar la sesión screen que acabamos de abrir, tan sólo hay que lanzar el comando
exit(en este ejemplo, parando previamente el comandotopque habíamos lanzado). Ahora sin embargo pretendemos dejarla abierta, con el comandotopen ejecución, para volver a ella más adelante. Es lo que se llama un detach (sirve para recordar la tecla que se pulsa al final de la combinación de teclas). Para ello pulsamos la combinación de teclas:1"Ctrl-a" "d" -
Habremos vuelto a nuestro bash inicial. Cuando en cualquier momento queramos recuperar la sesión screen, lo haremos con el comando:
1shell ~$ screen -r -
Ahora estaremos viendo de nuevo la salida del comando top que habíamos dejado arrancado dentro de la sesión screen. Volvemos a abandonar la sesión sin cerrarla procediendo por tanto como en el paso 4:
1"Ctrl-a" "d" -
De vuelta al bash inicial, vamos a abrir una segunda sesión screen para ver cómo podemos movernos a una u a otra. Arrancamos la sesión como hicimos con la primera:
1shell ~$ screen -
Cerramos la splashscreen y ejecutamos algún comando para reconocer la sesión cuando volvamos a ella. Por ejemplo:
1screenshell_2 ~$ ping 8.8.8.8 -
Abandonamos la sesión dejándola abierta:
1"Ctrl-a" "d" -
De vuelta al bash inicial ahora tenemos dos sesiones screen lanzadas. Ahora el comando
screen -rno se puede lanzar sin especificar el identificador de la sesión tras la opción-r. Obtenemos la lista de sesiones con el siguiente comando:1 2 3 4 5
shell ~$ screen -list There are screens on: 12629.pts-7.eduardo-HP-Folio-13 (04/04/15 13:55:03) (Detached) 12609.pts-7.eduardo-HP-Folio-13 (04/04/15 13:54:51) (Detached) 2 Sockets in /var/run/screen/S-edumoreno. -
Ahora, para recuperar una de ella, por ejemplo la más vieja que contenía lanzado el comando
topincorporaremos el identificador de la sesión tras la opción-r(si la sesión aparece en el listado como Attached, no podremos conectar a no ser que añadamos la opción-d):1shell ~$ screen -r 12609.pts-7.eduardo-HP-Folio-13 -
Como se comentaba en el punto 4, para cerrar las sesiones simplemente saldremos con
exit, aunque también, y sobre todo en caso de que la sesión se quedara bloqueada con algún comando que no se pudiera cerrar, se puede matar la sesión con la siguiente combinación de teclas:1"Ctrl-a" "k"
GRUB¶
Configuración de opción predeterminada en GRUB¶
- Editar fichero
/etc/default/gruby modificar el parámetroGRUB_DEFAULTdando el valorsaveden lugar del valor numérico que encontraremos. - Ejecutar
sudo update-grub. - Ejecutar
sudo grub-set-default Nsiendo N la posición de la entrada del menú de GRUB que queremos que actúe como predeterminada (contando desde 0).
Problemas con GRUB¶
UEFI¶
- How to get GRUB to be the default bootloader instead of Windows Boot Manager on a UEFI laptop?
- UEFI boot: how does that actually work, then?
Arranque y servicios¶
Ficheros implicados en arranque¶
/etc/rc.local: This script is executed at the end of each multiuser runlevel.
Instalación/desinstalación de scripts SysV/Upstart¶
Los scripts del serivicio deberán tener una cabecera especial que indique cómo deben comportarse en cada nivel de ejecución. Por ejemplo éste es el que tiene MySQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
- Instalar:
sudo update-rc.d SERVICE defaults - Desinstalar:
sudo update-rc.d -f SERVICE remove
Creación de servicios Systemd¶
- Crear un archivo en
/etc/systemd/system/con el nombre del servicio y la extensión.service. -
Insertar el siguiente contenido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
[Unit] Description=Nombre del servicio Wants=network-online.target After=network-online.target [Service] Type=simple ExecStart=/bin/bash /home/usuario/script_arranque.sh Restart=on-abort User=usuario Group=usuario [Install] WantedBy=multi-user.target -
Activar el nuevo servicio:
1$ sudo systemctl enable mi_servicio.service -
Para no esperar al reinicio, arrancar manualmente el servicio:
1$ sudo systemctl start mi_servicio.service -
Para comprobar si el servicio se inicia correctamente:
1$ sudo systemctl status mi_servicio.service
Gestión de servicios Systemd¶
systemctl start SERVICE- Use it to start a service. Does not persist after rebootsystemctl stop SERVICE- Use it to stop a service. Does not persist after rebootsystemctl restart SERVICE- Use it to restart a servicesystemctl reload SERVICE- If the service supports it, it will reload the config files related to it without interrupting any process that is using the service.systemctl status SERVICE- Shows the status of a service. Tells whether a service is currently running.systemctl enable SERVICE- Turns the service on, on the next reboot or on the next start event. It persists after reboot.systemctl disable SERVICE- Turns the service off on the next reboot or on the next stop event. It persists after reboot.systemctl is-enabled SERVICE- Check if a service is currently configured to start or not on the next reboot.systemctl is-active SERVICE- Check if a service is currently active.systemctl show SERVICE- Show all the information about the service.systemctl mask SERVICE- Completely disable a service by linking it to/dev/null; you cannot start the service manually or enable the service.systemctl unmask SERVICE- Removes the link to/dev/nulland restores the ability to enable and or manually start the service.
Kernel y módulos¶
Añadir un módulo al kernel¶
1 | |
Si se quiere añadir de forma permanente, es decir, de forma automática en el arranque, se incorpora el nombre del módulo al fichero /etc/modules.
Cuando el módulo que se carga es un driver de un dispositivo, el kernel envía un evento al subsistema udev. La monitorización de estos mensajes se puede hacer teniendo abierto un terminal con el siguiente comando lanzado (fuente):
1 | |
Listado de módulos¶
1 | |
Información de un módulo¶
1 | |
Usuarios¶
Gestión de usuarios¶
sudo adduser userName: Añade usuario creando home.sudo usermod -a -G groupName userName: Añade el usuario userName ya existente al grupo groupName ya existente.sudo userdel -r userName: Borra el usuario eliminando su home.
Cambiar ID de usuario¶
Por ejemplo para sincronizar con los IDs de un sistema de archivos montado por NFS y así no tener problemas de permisos. En el siguiente ejemplo se cambia el ID del usuario edumoreno a 1002:
1 | |
Eliminar petición password en sudo¶
Es necesario reconfigurar el fichero /etc/sudoers para que no se solicite el password del usuario a la hora de hacer sudo, dado que necesitamos que se haga sudo desde un proceso que no tendrá interacción con el usuario. Para conseguir esto hay que hacer dos cosas:
- Incorporar el usuario que nos interesa al grupo
sudodel sistema - Situar al final del fichero de configuración
/etc/sudoerslo siguiente:
1 | |
Hay que fijarse que la linea anterior normalmente ya aparece en el fichero pero comentada con una almohadilla. Se puede aprovechar la linea quitando el carácter almohadilla del principio, pero hay que tener en cuenta que no es suficiente con eso. Hay que mover la linea al final del fichero ya que las lineas siguientes pueden sobreescribir su efecto.
Importante: La edición del fichero /etc/sudoers sólo se puede hacer con el comando visudo. Este comando hay que lanzarlo con sudo a su vez, por lo que se hará de la siguiente forma:
1 | |
Migración masiva de usuarios¶
(Fuente)
Para los casos en los que sea necesario replicar los usuarios de un servidor Linux a otro o en los que se vaya a migrar a un servidor con más recursos, el siguiente procedimiento puede ser de utilidad.
Los escenarios son varios, desde los servidores que ejecutan algún tipo de base de datos, los que tienen ciertas aplicaciones, los que alojan páginas Web, etcétera. Para fines de la demostración pensaremos que el servidor está dedicado como servidor de archivos, mismos que se almacenan en el home de cada uno de los usuarios. NOTA: El presente procedimiento da por hecho que se hayan realizado las configuraciones necesarias en el nuevo servidor.
Primero, lo que debe respaldarse es la lista de usuarios con su respectiva contraseña.
El archivo /etc/passwd contiene las cuentas de los usuarios en el sistema bajo el siguiente formato de ejemplo:
1 2 3 4 5 6 7 8 | |
Como se observa, el segundo campo respectivo al hash de la contraseña no se muestra. La contraseña se encuentra en el archivo /etc/shadow
1 2 3 4 5 6 7 8 | |
Se procederá a unir el usuario con su contraseña utilizando el comando pwunconv para “desactivar” el shadow, quedando así las contraseñas en el archivo passwd.
1 2 3 4 5 6 7 8 9 10 | |
Depuración de /etc/passwd¶
Se copiará el archivo /etc/passwd a uno de trabajo /etc/passwd.migracion. Ahora se editará el archivo y se quitarán todos los usuarios propios del sistema (root, usuarios de demonios, etcétera) dejando sólo los usuarios que van a ser autenticados.
1 2 3 | |
También se copiará el archivo /etc/group a /etc/group.migracion
1 2 3 4 5 6 7 8 9 | |
Y se editará para dejar sólo los grupos de los usuarios:
1 2 3 | |
Ahora se respaldará el home de los usuarios, suponiendo que se encuentra bajo el directorio/home, se hará lo siguiente desde raíz (/):
1 | |
En el que las banderas:
- c = crea el archivo
- p = preserva los permisos
- z = comprime el archivo .tar generado
- v = da salida detallada
- f = especifica el archivo a crear (para este caso home.tgz)
Ahora bien, se realizará la transferencia de los archivos home.tgz, passwd.migracion y group.migracion al nuevo servidor:
1 2 3 4 5 | |
Una vez en el nuevo servidor se deberá verificar que no se repitan tanto los UID como los GID entre los dos servidores. Se realizará:
1 2 3 4 5 | |
Configuración del sistema¶
Ficheros interesantes¶
| Fichero | Utilidad |
|---|---|
/usr/lib/os-release |
Información sobre la distribución |
/etc/security/limits.conf |
Configuration file for the pam_limits module. Permite limitar el número de ficheros abiertos por el sistema, el número de procesos, etc. |
Ficheros definición variables de entorno¶
Si se necesita definir una variable global se podrá hacer en los ficheros:
/etc/environment/etc/profile/etc/profile.d/etc/bashrco/etc/bash.bashrc
Si es a nivel de usuario se hará en:
~/.bashrc~/.bash_profile
Error "error while loading shared libraries: ..."¶
Runtime error. The linker hasn't found your libraries. Either they are not installed properly or the linker doesn't know where they are (most probably in /usr/local/lib). To get your linker to update its list of libraries type:
1 | |
or as a temporary measure:
1 | |
En este documento se dan más detalles.
Proxy HTTP en consola¶
Setting up proxy at Firefox do not have effects at console, which means your wget, ssh, apt-get, yum etc do not access through the proxy you set at Firfox browser. To setup http proxy at console, you can do as bellow, assume the proxy IP is 219.93.2.113 and port 3128:
1 | |
Remember, you have to specified http://, and to know more about export, check out HERE. To clear your http proxy and use back yours, do this:
1 | |
Redirección de salidas en bash¶
Para redirigir ambas salidas de un programa (estandar y error) hacer lo siguiente:
1 | |
Para redirigir la salida de error a un fichero o dispositivo:
1 | |
En esta página se documenta con más detalle este tema.
Convertir nombres de ficheros de ISO a UTF-8¶
Al migrar una web, o al copiar un sistema de archivos, te puedes encontrar con nombres de ficheros en otras codificaciones de caracteres. Mediante el siguiente comando transformaríamos los nombres de ficheros desde ISO-8869-1 a UTF-8:
1 | |
Recodificar contenido de ficheros de Windows a UTF-8¶
1 | |
Para todos los ficheros de texto de un directorio:
1 | |
Obtener hash MD5 de una cadena¶
1 | |
Localización de ficheros .desktop¶
- Los del usuario se encuentran en:
~/.local/share/applications - Los del sistema en:
/usr/share/applications
Permisos¶
Ajustes de permisos a ficheros y directorios por separado¶
1 2 3 4 | |
Bits SUID, SGID y sticky¶
Discos, particiones y montaje¶
Reparación del sistema de archivos cuando se pone en modo "sólo lectura"¶
1 | |
Recuperación de pendrive o tarjeta de memoria corrupta¶
Con TestDisk/Photorec.
Enlaces¶
Montar imagen de disco o partición¶
-
Averiguar la estructura de las particiones:
1 2 3 4 5 6 7 8 9 10 11
$ fdisk -l Rpi_8gb_wheezy_backup.img Disco Rpi_8gb_wheezy_backup.img: 7,5 GiB, 8068792320 bytes, 15759360 sectores Unidades: sectores de 1 * 512 = 512 bytes Tamaño de sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes Tipo de etiqueta de disco: dos Identificador del disco: 0x000981cb Dispositivo Inicio Comienzo Final Sectores Tamaño Id Tipo Rpi_8gb_wheezy_backup.img1 8192 122879 114688 56M c W95 FAT32 (LBA) Rpi_8gb_wheezy_backup.img2 122880 15759359 15636480 7,5G 83 Linux -
Calcular el offset multiplicando el sector de comienzo de la partición por el tamaño del sector:
1122880 * 512 = 62914560 -
Montar:
1$ sudo mount -t ext4 -o loop,offset=62914560,ro,noexec Rpi_8gb_wheezy_backup.img mnt
Backup de un FileSystem¶
Backup:
1 | |
Restauración:
1 | |
Montar ext4 para usuario¶
Normalmente al automontar una partición ext4 se respetarán los ID's de los propietarios:grupos de los ficheros. Para montar temporalmente con permisos ajustados para un usuario, utilizar bindfs de esta forma:
1 2 3 | |
Compartir ficheros en red¶
Compartir ficheros con Samba¶
Aparte de instalar y configurar Samba (fichero /etc/samba/smb.conf) hay que dar de alta los usuarios UNIX que se usarán a través de Samba y asignarles un password para el acceso por el mismo. Esto se hace con el comando:
1 | |
Montaje de carpeta compartida samba en /etc/fstab¶
Crear un fichero /home/usuario/.smbcredentials con el siguiente contenido:
1 2 | |
Añadir la siguiente línea a /etc/fstab:
1 | |
Montado de unidades de red con autofs¶
NFS¶
(Fuente)
-
Instalar paquetes:
1$ sudo apt-get install autofs nfs-common -
Añadir lo siguiente al final del fichero
/etc/auto.master:1/home/usuario/red /etc/auto.red -
Crear fichero
/etc/auto.redcon el siguiente contenido (cambiar rw por ro si se desea acceso de sólo lectura):1montaje -fstype=nfs4,rw 192.168.1.100:/path/directory -
Crear enlaces a los directorios montados con autofs:
1 2
$ cd ~ $ ln -s /home/usuario/red/montaje montaje
SMB/CIFS¶
(Fuente)
-
Instalar paquetes:
1$ sudo apt-get install autofs smbclient cifs-utils -
Añadir lo siguiente al final del fichero
/etc/auto.master:1/home/usuario/red /etc/auto.red --timeout=600 -
Crear fichero
/etc/auto.redcon el siguiente contenido:1montaje -fstype=cifs,rw,noperm,netbiosname=${HOST},credentials=/home/usuario/.smbcredentials ://192.168.1.100/carpeta_compartida -
Crear fichero
/home/usuario/.smbcredentialscon el siguiente contenido:username=<usuario> password=<password> -
Proteger el fichero:
1$ chmod 600 /home/usuario/.smbcredentials -
Crear enlaces a los directorios montados con autofs:
1 2
$ cd ~ $ ln -s /home/usuario/red/montaje montaje
Escritorio¶
Configuración de gedit¶
Al menos las últimas versiones de gedit no tienen un panel de ajustes para las opciones predeterminadas. Cada vez que arranca aparecen preajustados 8 espacios como anchura del tabulador y no sustituye por espacios. Puede sacarse una lista de todos los ajustes que se pueden cambiar con el siguiente comando:
1 | |
Los ajustes del tabulador mencionados antes, para pasar a 4 espacios, ejecutar:
1 2 | |
Otro ajuste interesante es el del wrap mode. Se puede hacer con (puede valer 'none', 'word', 'char', o 'word-char'):
1 | |
Recursos gráficos¶
1 2 3 4 5 6 7 8 9 | |
Multimedia¶
Redimensionado de imágenes en lote¶
Por ejemplo a 1080 de alto manteniendo el ratio dentro de un directorio llamado resized:
1 | |
En ocasiones, si hay varios miles de fotos, se puede llenar la memoria. En este caso hacer la conversión con el siguiente comando, que trata las imágenes una a una:
1 2 3 4 5 6 | |
Crop y resize de imágenes en lote¶
1 2 3 4 5 6 | |
donde:
- w: ancho del crop
- h: alto del crop
- x: posición horizontal esquina superior derecha del crop
- y: posición vertical esquina superior derecha del crop
- ws: ancho del reescalado final
- hs: alto del reescalado final
Conversión de formato de imágenes en lote¶
1 2 3 4 5 | |
Montaje de gif a partir de imágenes¶
1 | |
donde:
- n: milisegundos entre cada frame.
Split de vídeos¶
(Fuente)
Con el siguiente comando:
1 | |
Donde el valor de la opción -ss es el instante de inicio en hh:mm:ss y el valor de -t es la longitud en hh:mm:ss
Es importante respetar el orden de las opciones, sobre todo poner al principio la opción -i que indica el fichero de entrada. De no hacerlo así (se explica aquí) las opciones de codec no saben localizar bien los codecs del fichero de entrada.
Un par de codecs comprobados que suelen dar buen resultados son h264 y aac:
1 | |
Crop en video¶
1 | |
donde:
- w: ancho final
- h: alto final
- x: coordenada x del punto superior izquierdo del recuadro
- y: coordenada y del punto superior izquierdo del recuadro
Extraer frame de video¶
1 | |
donde el argumento -ss marca el instante del frame en hh:mm:ss
Montaje de vídeo StopMotion a partir de imágenes¶
A 10fps por ejemplo :
1 | |
Compresión batch de vídeos¶
Instalar el cliente de linea de comando de Handbrake.
Dependiendo de la extensión habrá que cambiar el ls inicial. Los vídeos de salida son MP4, por lo que si la extensión inicial no es esa, habrá que cambiarla en los ficheros finales.
1 2 | |
Resampleado de video con HandBrake¶
(Fuente)
On the Video tab use Avg Bitrate and use 2500 to 3000 depending if a big action movie(3000) or if less fast action/movement in the movie(2500). Make sure to click on 2-Pass Encoding and Turbo first pass.
Convertir APE a WAV¶
Los ficheros .ape con que se distribuyen algunos CD's se puede convertir a WAV para poder quemarlo a un CD (con un fichero .cue que normalmente acompaña al .ape se puede quemar directamente con el Burn del Mac por ejemplo) instalando el paquete ffmpeg y ejecutando el siguiente comando:
1 | |
Hay que acordarse de sustituir dentro del fichero .cue la referencia al fichero original .ape por el nuevo .wav.
Convertir FLAC a WAV¶
Los ficheros .flac con que se distribuyen algunos CD's se puede convertir a WAV para poder quemarlo a un CD (con un fichero .cue que normalmente acompaña al .flac se puede quemar directamente con el Burn del Mac por ejemplo) instalando el paquete flac y ejecutando el siguiente comando:
1 | |
Hay que acordarse de sustituir dentro del fichero .cue la referencia al fichero original .flac por el nuevo .wav.
Tratamiento de ficheros en lote¶
Renombrado de archivos en lote¶
Por ejemplo una serie de archivos jpg:
1 2 3 4 5 6 | |
Renombrado de ficheros de mayúsculas a minúsculas¶
(Fuente)
1 2 3 4 5 | |
Quitar los primeros 5 caracteres de los ficheros de un directorio¶
1 2 3 | |
Compresión de ficheros en lote¶
1 2 3 4 5 | |
Comprimir uno a uno los ficheros de un directorio¶
Por ejemplo ficheros de extensión .gba:
1 2 3 4 | |
Sustitución de cadena en ficheros en lote¶
1 2 3 4 5 | |
Búqueda de ficheros que contienen una cadena¶
1 2 3 4 5 6 7 8 9 10 11 | |
En realidad el script anterior hace lo mismo que el simple comando siguiente:
1 | |
PDFs¶
Instalar pdftk, programa en linea de comando para procesar ficheros PDF. Está para casi todas las plataformas.
1 2 3 4 | |
Concatenar¶
Concatenar todos los archivos facilmente que tengas en una carpeta:
1 | |
Fusión de varios ficheros en uno (equivalente a la anterior):
1 | |
División¶
División en múltiples ficheros (uno por página):
1 | |
Tiene muchas mas funcionalidades consultables con –help, pero si quieres, puedes echarle un vistazo a un articulo de Linux-Magazine “PDF a tope”.
Wireshark¶
Configurar Wireshark para poder capturar con usuarios no-root¶
Ejecutar lo siguiente:
1 2 | |
Reiniciar la sesión.
Arch Linux¶
Enlaces¶
- Chaotic-AUR: Compilación automática de paquetes AUR.
Paquetes interesantes¶
pamac-aur(AUR): Interfaz gráfica para pacman/yay.
Comandos yay¶
yay -Syu: Actualizar el sistema, incluyendo paquetes de AUR. Equivalente en Debian aapt upgrade.yay -S <paquete>: Instalar un paquete desde AUR. Equivalente en Debian aapt install.yay -Rns <paquete>: Desinstalar un paquete de AUR, sus dependencias y archivos de configuración. Equivalente en Debian aapt purge.
Modificación manual de paquetes AUR¶
Este es el procedimiento oficial cuando un paquete falla, quieres aplicar un parche personalizado o necesitas cambiar una opción de compilación antes de instalar.
1. Clonar el repositorio del paquete¶
En lugar de usar un helper (como yay), descargamos el código fuente directamente desde los servidores de AUR usando Git.
1 2 | |
2. Modificar el PKGBUILD o archivos fuente¶
Aquí es donde editas lo que necesites.
- Para errores de rutas: Edita las funciones
build()opackage()dentro del archivoPKGBUILD. - Para cambiar versiones: Modifica la variable
pkgver.
Tip
Si modificas archivos que están listados en el array source() (como un parche .patch o un script .sh), las sumas de verificación (checksums) fallarán. Para arreglarlo automáticamente, ejecuta:
1 | |
3. Compilar e Instalar¶
Una vez que el PKGBUILD está a tu gusto, usamos el comando makepkg.
1 | |
Desglose de flags:
-s(sync): Instala automáticamente las dependencias necesarias usandopacman.-i(install): Instala el paquete generado (.pkg.tar.zst) en tu sistema una vez terminada la compilación.
Resumen de comandos¶
| Acción | Comando |
|---|---|
| Bajar fuentes | git clone [https://aur.archlinux.org/paquete.git](https://aur.archlinux.org/paquete.git) |
| Actualizar sumas | updpkgsums |
| Limpiar y compilar | makepkg -f (el -f fuerza a sobrescribir si ya compilaste antes) |
| Compilar e instalar | makepkg -si |
| Limpiar basura | makepkg -c (borra los directorios temporales src/ y pkg/ tras terminar) |
¿Cómo manejar las actualizaciones futuras?¶
Si modificaste un paquete manualmente, la próxima vez que uses yay -Syu, el helper verá que hay una versión nueva en AUR e intentará sobrescribir tu versión modificada. Tienes dos opciones:
- Si el error ya se arregló en AUR: Deja que
yaylo actualice normalmente. - Si quieres mantener tu modificación: Puedes añadir el paquete a la línea
IgnorePkgen/etc/pacman.confpara que pacman no lo toque sin tu permiso.
Ubuntu¶
Enlaces¶
Paquetes a instalar en Xubuntu¶
font-viewer: Visor/instalador de tipos de letra.python3-pip: PIP instalado desde los repositorios (facilita la instalación de virtualenvwrapper).python-is-python3: Abre Python3 ejecutandopython.android-file-transfer: Para transferir ficheros por MTP (hacia Android o las Oculus Quest).qpdfview: Visor PDF.thunar-archive-plugin: Crear archivadores y descomprimir desde Thunar.gvfs gvfs-common gvfs-backends gvfs-fuse thunar-volman: Soporte MTP para Android.
Limpieza de paquetes snap¶
Localizar los paquetes desactivados con:
1 | |
Y luego borrarlos con:
1 | |
Por ejemplo:
1 2 3 4 5 6 7 | |
Configuración de idiomas del sistema (locales)¶
1 | |
Configuración de SWAP en disco SSD¶
Siguiendo esta página, añado lo siguiente al fichero /etc/sysctl.conf para bajar el 60% que usa Ubuntu por defecto a 10%:
1 | |
Problema con aplicaciones root en Wayland¶
Hay que ejecutar el comando:
1 | |
Se puede automatizar en el arranque añadiendo el comando en las Aplicaciones al incio (fuente).