Compare commits

...
3 Commits
Author SHA1 Message Date
admin 736733384d Merge branch 'main' of https://gitea.xiberus.com/admin/guias_informatica 2026-08-04 19:34:33 +02:00
admin 4b228d87e6 2commit 2026-08-04 19:32:55 +02:00
admin 46901fbb7f first commit 2026-08-04 19:24:21 +02:00
20 changed files with 5364 additions and 0 deletions
Vendored
BIN
View File
Binary file not shown.
+386
View File
@@ -0,0 +1,386 @@
# Guía Práctica de BorgBackup
# https://www.borgbackup.org/
## ¿Qué es Borg?
BorgBackup es una herramienta de backup deduplicado, incremental y
opcionalmente cifrado, diseñada para sistemas Unix/Linux. Es muy
eficiente en espacio y segura.
---
# Instalación
## Ubuntu / Debian
```bash
sudo apt update
sudo apt install borgbackup
```
## Installar borgbackup offline
Desde otro ordenador con internet, ve a la página de releases de Borg en GitHub:https://github.com/borgbackup/borg/releasesDescarga
El binario correspondiente a tu arquitectura (normalmente borg-linux64 o borg-linux64-glibc228 si tu sistema es antiguo).
Elige la versión estable más reciente de la serie 1.x (actualmente alrededor de 1.4.x).
Copia el archivo al equipo sin internet (por USB, pendrive, red local, etc.).
En el equipo objetivo:
```bash
chmod +x borg-linux64 * hazlo ejecutable
sudo cp borg-linux64 /usr/local/bin/borg
sudo chown root:root /usr/local/bin/borgsudo
chmod 755 /usr/local/bin/borg
```
opcional (para el comando borgfs):sudo ln s /usr/local/bin/borg /usr/local/bin/borgfs
verifica: borg --version
## macOS (Homebrew)
```bash
brew install borgbackup
```
Verificar instalación:
```bash
borg --version
```
## Windows (WSL)
En PowerShell como administrador:
```
wsl --install
```
Reinicia el equipo si lo pide.
Instalar Borg dentro de Ubuntu (WSL)
Abre Ubuntu desde el menú inicio y ejecuta:
```
sudo apt update
sudo apt install borgbackup
```
Verifica:
```
borg --version
```
📂 Acceder a tus archivos de Windows desde WSL
Tus discos Windows están en:
/mnt/c
Ejemplo:
```
borg create /mnt/d/backups/borg_repo::backup1 /mnt/c/Users/TU_USUARIO/Documents
```
Conceptos Importantes
- \*\*Repositorio (Repo):\*\* Lugar donde se almacenan los backups.
- \*\*Archive (Snapshot):\*\* Cada backup individual dentro del
repositorio.
- \*\*Deduplicación:\*\* Solo guarda bloques nuevos o modificados.
- \*\*Incremental real:\*\* Cada backup parece completo, pero solo guarda
cambios.
- \*\*Prune:\*\* Elimina snapshots antiguos según reglas.
- \*\*Compact:\*\* Recupera espacio tras borrar snapshots.
------------------------------------------------------------------------
Crear un Repositorio
Con cifrado (recomendado)
```
borg init --encryption=repokey /ruta/al/repositorio
```
Sin cifrado
```bash
borg init --encryption=none /ruta/al/repositorio
```
---
# Crear un Backup
```bash
borg create --stats --progress /ruta/al/repositorio::nombre-backup /ruta/a/respaldar
```
Ejemplo:
```bash
borg create --stats --progress /mnt/backup_usb/ocis_borg::ocis-2026-02-11 /srv/ocis
```
```bash
borg create --stats --progress \
/mnt/backup_usb/ocis_borg::ocis-$(date +%Y-%m-%d_%H-%M) \
/srv/ocis
```
```bash
borg create --stats --progress \
/ruta/al/repositorio::backup-{now:%Y-%m-%d} \
/ruta/a/respaldar
```
Esto creará backups como:
backup-2026-02-23
backup-2026-02-24
### Opciones útiles
- `--stats` → Muestra estadísticas al finalizar.
- `--progress` → Muestra progreso en tiempo real.
- `--compression lz4` → Compresión rápida (recomendado).
- `--dry-run` → Simulación sin ejecutar realmente.
---
# Listar Backups Disponibles
```bash
borg list /ruta/al/repositorio
```
---
# Restaurar Backup Completo
```bash
cd /
borg extract /ruta/al/repositorio::nombre-backup
con progreso
borg extract --progress /ruta/al/repositorio::nombre-backup
```
---
# Restaurar Archivo o Carpeta Específica
Se necesita FUSE:
1. Linux sudo apt install fuse3
2. WSL sudo apt install fuse3
3. MacOs https://macfuse.github.io/ Montar snapshot:
```bash
mkdir /mnt/tmp
borg mount /ruta/al/repositorio::nombre-backup /mnt/tmp
```
Explorar y copiar archivos necesarios.
Desmontar:
```bash
umount /mnt/tmp
```
Si se quiere restaurar en otra carpeta:
cd /tmp
borg extract /Users/jesus/test_repo::backup4
# Eliminar Backups Antiguos (Prune)
Ejemplo típico:
```bash
borg prune -v --list /ruta/al/repositorio --keep-daily=7 --keep-weekly=4 --keep-monthly=6
```
Luego compactar:
```bash
borg compact /ruta/al/repositorio
```
---
# Eliminar repositorio-backup
Eliminar un repositorio Borg completo - carpeta
```bash
rm -rf /mnt/backup_usb/ocis_borg
```
Borrar backups (archives) pero mantener el repo
1. Borrar el repositorio completo Este comando elimina el repositorio junto con todos los archivos (archives) contenidos en él, además de borrar el caché local asociado. Comando estándar:
```bash
borg delete /ruta/al/repositorio
```
En versiones más recientes (Borg 1.2+): Se recomienda usar el comando específico:
```bash
borg repo-delete /ruta/al/repositorio
```
Usa el código con precaución.
[!IMPORTANT]
Al ejecutarlo, el sistema te pedirá confirmación escribiendo YES en mayúsculas para proceder con la eliminación irreversible.
2. Opciones adicionales útiles
Simulación (--dry-run): Para ver qué se borraría sin ejecutar la acción real, usa:
```
bash
borg delete --list --dry-run /ruta/al/repositorio.
```
Conservar info de seguridad (--keep-security-info): Útil si planeas reemplazar un repositorio corrupto con una copia pero quieres mantener los contadores de seguridad (nonces) locales.
Solo caché local (--cache-only): Si solo quieres limpiar los archivos temporales locales del repositorio sin borrar los datos en el servidor/disco.
3\. Liberar espacio en disco
Si solo borraste archivos (archives) individuales dentro del repositorio y no el repositorio completo, el espacio no se liberará automáticamente. Debes ejecutar el comando de compactación:
```
bash
borg compact /ruta/al/repositorio
```
Borrar un backup específico:
```
bash
borg delete /mnt/backup_usb/ocis_borg::ocis-2026-02-11_18-30
```
Después: (Para recuperar espacio real)
```
bash
borg compact /mnt/backup_usb/ocis_borg
```
---
# Verificar Integridad
```bash
borg check /ruta/al/repositorio
```
---
# Exportar Clave (Si usas cifrado)
```bash
borg key export /ruta/al/repositorio /ruta/segura/clave.key
```
⚠️ Si pierdes la passphrase y la clave, el backup no se puede recuperar.
---
# Información de un repo
```bash
borg info /Users/jesus/test_repo
```
Te mostrará algo como:
Repository ID: xxxxx
Location: /Users/jesus/test_repo
Number of archives: 5
Original size: 120 GB
Compressed size: 80 GB
Deduplicated size: 10 GB
Ver tamaño de cada backup individual
```bash
borg info /Users/jesus/test_repo::backup4
```
---
IMPORTANTE PARA MANTENER ESTRUCTURA DE CARPETAS:
### Hacer backup desde `/`
```
cd /
borg create /mnt/backup_usb/borg_repo::ocis-$(date +%F_%H-%M) srv/ocis
```
---
### Restaurar
```
cd /
borg extract /mnt/backup_usb/borg_repo::ocis-xxxx
```
Si haces:
```
cd /srv/ocis
borg create repo::backup .
```
### Opciones útiles:
Ver qué contiene un backup:
```borg list /backups/repositorio::backup-2026-05-09```
Extraer sin preservar permisos/owner:
```borg extract --numeric-ids --noacls --noxattrs ...```
Mostrar progreso:
```borg extract --progress /destino repo::archivo```
# Buenas Prácticas
- Probar restauraciones periódicamente.
- Guardar la passphrase en lugar seguro.
- No guardar el backup en el mismo disco que los datos.
- Desmontar correctamente discos externos.
- Usar cifrado si el disco puede perderse o salir del entorno físico.
---
# Flujo Típico de Uso Manual
1. Montar disco externo.
2. Parar servicio (ej. Docker).
3. Ejecutar `borg create`.
4. Arrancar servicio.
5. Desmontar disco.
---
# Resumen
Borg es:
- Rápido
- Seguro
- Incremental
- Deduplicado
- Ideal para servidores Linux y Docker
Un backup no probado no es un backup.
+51
View File
@@ -0,0 +1,51 @@
**AYUDA Go**
=========
**https://https://go.dev/
-------------------
**Flujo correcto siempre en Go**
Cada proyecto:
mkdir mi-proyecto\
cd mi-proyecto\
go mod init nombre\
go get dependencia\
go run main.go
--------
go mod init agenda
go get modernc.org/sqlite
go run agenda.go
⚠️ MUY IMPORTANTE (para SQLite)
Recuerda esto o te dará error después:
sudo apt install build-essential
**Crear ejecutable**
Dentro de tu proyecto:
go build -o agenda
Esto genera:
agenda
▶️ Ejecutarlo
./agenda
🪟 Para Windows
go build -o agenda.exe
🌍 Cross-compiling (MUY potente)
Puedes compilar para otros sistemas desde Linux:
Windows:
GOOS=windows GOARCH=amd64 go build -o agenda.exe
Linux:
GOOS=linux GOARCH=amd64 go build -o agenda
Mac:
GOOS=darwin GOARCH=amd64 go build -o agenda
-------------------
+47
View File
@@ -0,0 +1,47 @@
#### Scripts instalacion Alpine-linux
**Descargar iso: alpine-standard-3.22.2-aarch64.iso**
User: root
password: rootpass
**Instalación basica**
setup-alpine
Zona horaria Europe/Madrid
User: user
password: userpass
**Instalar escritorio**
setup-desktop
Which desktop environment? ('gnome', 'plasma', 'xfce', 'mate', 'sway', 'lxqt' or 'none') [none]
xfce
**Idioma español**
apk add nano lang hunspell-lang
cd /etc/profile.d/
nano 20locale.sh
doas cp 20locale.sh 20locale\_backup.sh
doas nano 20locale.sh
```
export CHARSET=UTF-8
export LANG=es\_ES.UTF-8
export LC\_COLLATE=es\_ES.UTF-8
```
cd /etc/
doas nano environment
LANG=es\_ES.UTF-8
**Sonido**
doas apk add pulseaudio pulseaudio-alsa
doas apk add xfce4-whiskermenu-plugin xfce4-screenshooter xfce4-pulseaudio-plugin
Reboot y quitar la carga de la iso
**Iniciar entorno grafico**
starx (iniciar entorno grafico)
+142
View File
@@ -0,0 +1,142 @@
La configuración del tunel se guarda en:
~.cloudflared/archivos.json
~/.cloudflared/config.yml
Iniciar tunel
cloudflared tunnel run nombre\_tunel
Instalar tunel como servicio
cloudflared service install
Creara servicio llamado cloudflared.service
sudo systemctl start cloudflared - iniciar el tunel
sudo systemctl stop cloudflared - detener el tunel
sudo systemctl restart cloudflared - reiniciar tunel
sudo systemctl status cloudflared - estado tunel
cloudflared tunnel list - Lista los tuneles
cloudlared tunnel delete nombre\_tunel - Elimina tunel
Borrar archivos locales
rm ~/.cloudflared/nombre\_tunel.json
rm ~/.cloudflared/config.yml
sudo systemctl disable cloudflared - desactiva servicio sistema
sudo systemctl stop cloudflared - detiene servicio
Eliminar servicio del sistema
sudo rm /etc/systemd/system/cloudflared.service
sudo systemctl daemon-reexec
Conectarse por SSH
Opcion 1
linux
ssh -o Proxycommand="cloudflared access tcp --hostname ssh.xiberus.com" usuario@localhost
Windows - Descargar cloudflared.exe
ssh -o Proxycommand="cloudflared.exe access tcp --hostname ssh.xiberus.com" usuario@localhost
\-----------------
metodo 2 desde la web
1. nuevo tunel
1. Instalar y ejecutar el conector (debian)
1. crear el tunel
1. cloudflared tunnel login. (terminal)
1. indica una URL en la terminal, copiarla en navegador para autorizar en cloudflared el tunel.
sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml
\------------------
Metodo que ha funcionado
cloudflared tunnel login
cloudflared tunnel create xiberus-tunnel
Cloudflared tunnel list
sudo nano /home/jesus/.cloudflared/config.yml
tunnel: 1cfce1cf-b10e-4c52-ae2e-e89d733149e5
credentials-file: /home/jesus/.cloudflared/1cfce1cf-b10e-4c52-ae2e-e89d733149e5.json
/root/.cloudflared/config.yml
tunnel: xiberus-tunnel
credentials-file: /root/.cloudflared/<UUID-del-tunnel>.json
ingress:
- hostname: server.xiberus.com
service: http://localhost:80 # o el puerto que uses (ej. panel Pterodactyl, etc)
- hostname: portainer.xiberus.com
service: https://localhost:9443
originRequest:
noTLSVerify: true # Importante porque Portainer usa self-signed por defecto
- service: http\_status:404
Añadir las dos
cloudflared tunnel route dns xiberus-tunnel server.xiberus.com
cloudflared tunnel route dns xiberus-tunnel portainer.xiberus.com
cloudflared service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
cloudflared tunnel run
\--------
cloudflared tunnel list
systemctl status cloudflared -l
sudo systemctl restart cloudflared
+207
View File
@@ -0,0 +1,207 @@
AYUDA DJANGO
\============
Proyecto Django: Blog Simple
Este proyecto creará un blog básico donde los usuarios podrán ver una lista de publicaciones y acceder a los detalles de cada una.
Paso 1: Instalar Django
Si no tienes Django instalado, ejecuta:
pip install django
Paso 2: Crear un Proyecto Django
django-admin startproject blog\_project
cd blog\_project
Paso 3: Crear la Aplicación del Blog
python manage.py startapp blog
Registre la aplicación en blog\_project/settings.pydentro de INSTALLED\_APPS:
INSTALLED\_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # Agregamos nuestra aplicación
]
Paso 4: Definir el modelo de publicación
Edita blog/models.py:
from django.db import models
class Post(models.Model):
title = models.CharField(max\_length=200)
content = models.TextField()
created\_at = models.DateTimeField(auto\_now\_add=True)
def \_\_str\_\_(self):
return self.title
Aplica las migraciones para crear la tabla en la base de datos:
python manage.py makemigrations
python manage.py migrate
Paso 5: Registrar el Modelo en el Panel de Administración
Edita blog/admin.py:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
Crea un superusuario:
python manage.py createsuperuser
Corre el servidor y accede al panel de administración en http://127.0.0.1:8000/admin:
python manage.py runserver
Desde ahí, puedes agregar publicaciones manualmente.
Paso 6: Crear las Vistas y URL
Edita blog/views.py:
from django.shortcuts import render, get\_object\_or\_404
from .models import Post
def lista\_posts(request):
posts = Post.objects.all().order\_by('-created\_at')
return render(request, 'blog/lista\_posts.html', {'posts': posts})
def detalle\_post(request, post\_id):
post = get\_object\_or\_404(Post, id=post\_id)
return render(request, 'blog/detalle\_post.html', {'post': post})
Crea blog/urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.lista\_posts, name='lista\_posts'),
path('post/<int:post\_id>/', views.detalle\_post, name='detalle\_post'),
]
Registra las rutas en blog\_project/urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
Paso 7: Crear las Plantillas HTML
Dentro de blog/templates/blog/, crea lista\_posts.html:
<!DOCTYPE html>
<html>
<head>
<title>Blog</title>
</head>
<body>
<h1>Publicaciones</h1>
<ul>
{% for post in posts %}
<li>
<a href="{% url 'detalle\_post' post.id %}">{{ post.title }}</a>
({{ post.created\_at|date:"d M Y" }})
</li>
{% endfor %}
</ul>
</body>
</html>
Crea detalle\_post.html:
<!DOCTYPE html>
<html>
<head>
<title>{{ post.title }}</title>
</head>
<body>
<h1>{{ post.title }}</h1>
<p>{{ post.created\_at|date:"d M Y" }}</p>
<p>{{ post.content }}</p>
<a href="{% url 'lista\_posts' %}">Volver al blog</a>
</body>
</html>
Paso 8: Ejecutar el Proyecto
Corre el servidor:
python manage.py runserver
Abre http://127.0.0.1:8000/y prueba la aplicación.
+245
View File
@@ -0,0 +1,245 @@
## AYUDA DOCKER
docker desktop start        abrir docker desktop
docker info                     verificar que docker esta corriendo
docker ps                  # Ver contenedores en ejecución
docker ps -a                 # contenedores creados
docker stop mi-web     # Parar el contenedor
docker start mi-web      # Iniciar el contenedor nuevamente
docker rm mi-web         # Eliminar el contenedor (cuando ya no lo necesites)
docker images Imagenes existentes en local
Dockerfile                  Archivo texto instrucciones crear imagen docker.
docker build .             Construir una imagen a partir de Dockerfile
docker login             Iniciar sesion docker hub
docker logout           Cerrar sesion docker hub
docker pull nombreimagen:version descargar imagen docker
docker push nombreimagen publicar imagen
docker searh nombreimagen buscar imagen
Iniciar un contenedor
docker run nombre_contenedor
docker run -d --name owncloud -p 8080:80 owncloud:latest
Docker compose
docker compose up -d
docker compose down Detiene y eliminar el contenedor
docker stop vaultwarden # parar contenedor
docker start vaultwarden # arrancar contenedor
docker restart vaultwarden # reiniciar contenedor
---
#### 🐳 Contenedores
**Acceder a la terminal de un contenedor existente:**
```
docker exec -it <nombre_o_id_del_contenedor> /bin/bash
# O si bash no está disponible:
docker exec -it <nombre_o_id_del_contenedor> sh
```
docker exec -it nombrecontenedor whereis bash/sh
docker exec -it caddy /bin/sh (para caddy por ejemplo cambia a sh)
Comando largo - Alias corto Descripción
docker container ls docker ps Listar contenedores en ejecución
docker container ls -a docker ps -a Listar todos los contenedores
docker container stop <id> docker stop Parar un contenedor
docker container start <id> docker start Arrancar un contenedor detenido
docker container restart <id> docker restart Reiniciar un contenedor
docker container rm <id> docker rm Eliminar un contenedor
---
#### 📦 Imágenes
Comando largo - Alias corto Descripción
docker image ls docker images Listar imágenes
docker image rm <id> docker rmi Eliminar una imagen
docker image prune (no tiene alias) Borrar imágenes no usadas
Crear/levantar contenedor si ya tienes la imagen, sin dockerfile:
docker run -d \
--name vaultwarden \
-e DOMAIN="https://vw.domain.tld" \
-v $(pwd)/vw-data:/data \
-p 8000:80 \
vaultwarden/server:latest
---
#### 🔧 Volúmenes y redes (sin alias cortos)
Comando largo - Descripción
docker volume ls Listar volúmenes
docker volume rm <id> Eliminar volumen
docker volume prune Limpiar volúmenes no usados
docker network ls Listar redes
docker network rm <id> Eliminar red
docker network prune Limpiar redes no usadas
---
#### 🔧 Opciones disponibles para restart
Docker ofrece cuatro opciones principales para controlar el comportamiento de reinicio:
no (por defecto) El contenedor no se reinicia nunca automáticamente, ni al fallar ni al reiniciar Docker.
always El contenedor siempre se reinicia, incluso si lo detuviste manualmente o al reiniciar Docker Desktop.
unless-stopped Igual que always, pero no se reinicia si tú lo detuviste manualmente antes de apagar Docker.
on-failure[:n] Solo se reinicia si el contenedor termina con error (exit code ≠ 0). Puedes limitar el número de intentos con :n.
Ejemplo: on-failure:5.
---
#### Mover imagenes
🔁 Mover una imagen Docker a otro equipo (recomendado)
Exportar la imagen a un archivo .tar
docker save -o nombre_imagen.tar nombre_imagen
Ejemplo:
docker save -o mi_app.tar mi_app:latest
Importar la imagen en el segundo equipo
docker load -i nombre_imagen.tar
docker load -i mi_app.tar
docker run ...
✅ Si quieres exportar la imagen con los datos
docker save flask-contactos > flask-contactos.tar
cp ./data/contacts.db contactos.db
En el nuevo equipo, haz:
docker load < flask-contactos.tar
mkdir data
cp contactos.db ./data/
docker run -d -p 5000:5000 -v $(pwd)/data:/data flask-contactos linux
docker run -d -p 5000:5000 -v ${PWD}/data:/data flask-contactos windows
---
Docker build (despues de contruir imagen con build, despues se puede quitar y usar solo image: nombreimagen)
services:
app:
\- build: .
\+ image: mi_app_python:1.0`
---
#### Instalar docker
Uninstall old versions
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
Set up Docker's apt repository.
**Add Docker's official GPG key:**
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
**Add the repository to Apt sources:**
echo \
"deb [arch=(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
(. /etc/os-release && echo "{UBUNTU_CODENAME:-VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Install the Docker packages.
To install the latest version, run:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Verify that the installation is successful by running the hello-world image:
sudo docker run hello-world
This command downloads a test image and runs it in a container. When the container runs, it prints a confirmation message and exits.
1. (Opcional) Evitar usar sudo con Docker Para no tener que escribir sudo cada vez, agrega tu usuario al grupo docker: sudo usermod -aG docker $USER newgrp docker # Recarga los grupos sin reiniciar sesión Ahora puedes probar sin sudo: docker run hello-world
Para instalar además docker Desktop en Ubuntu Desktop:
1.sudo apt install gnome-terminal
2\. Descargar el paquete .deb de docker Desktop
3\. sudo apt-get update
sudo apt-get install ./docker-desktop-amd64.deb
---
#### Docker Windows
Habilitar wsl 2
Abrir PowerShell como Administrador
wsl --install
Descargar/instalar docker Desktop
Configuración importante:
· ✅ Instalar componentes adicionales para WSL 2
· ✅ Agregar acceso directo al escritorio
· ✅ Usar contenedores de Windows
Abrir PowerShell o Command Prompt
docker --version
docker-compose --version
docker run hello-world
wsl --list --verbose
---
#### Copia base de datos mysql
Copia seguridad base mysql (backup)
docker exec -it mysql-db mysqldump -u root -p testdb > backup.sql
mysql-db → es el nombre del contenedor (en tu docker-compose.yml).
\-u root -p → usará la contraseña root que definiste.
testdb → es el nombre de la base de datos.
> backup.sql → guarda la copia en tu máquina (no dentro del contenedor).
> 👉 Al ejecutarlo te pedirá la contraseña (root).
Restaurar desde un backup (restore)
docker exec -i mysql-db mysql -u root -p testdb < backup.sql
Esto sobrescribirá la base de datos testdb con el contenido del backup.
---
#### Puetos docker Ubuntu Server
navidrome          4533
kanboard         8081 - 443
owncloud         8082
owncloud-mariadb  3306
owncloud-redis     6379
jellyfin               8096
transmission        9091
portainer          9443
plex             32400
+110
View File
@@ -0,0 +1,110 @@
GhostScript
LINUX
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=salida.pdf entrada.pdf
WINDOWS
CMD
gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=salida.pdf entrada.pdf
POWERSHELL (comillas)
gswin64c "-sDEVICE=pdfwrite" "-dCompatibilityLevel=1.4" "-dPDFSETTINGS=/ebook" "-dNOPAUSE" "-dQUIET" "-dBATCH" "-sOutputFile=output\_PRO.pdf" "progit.pdf"
\---
Significado por partes:
gs Ejecuta Ghostscript
- sDEVICE=pdfwrite Establece que el dispositivo de salida es un archivo PDF
- dCompatibilityLevel=1.4 Define la compatibilidad del PDF de salida (1.4 es común)
- dPDFSETTINGS=/screen Controla la compresión y calidad (ver abajo)
- dNOPAUSE No hace pausa entre páginas
- dQUIET Oculta mensajes en consola
- dBATCH Ejecuta sin esperar interacción del usuario
- sOutputFile=salida.pdf Nombre del archivo de salida
entrada.pdf Archivo de entrada
Opciones de compresión (PDFSETTINGS):
Opción Compresión Calidad
/screen Alta compresión Calidad baja (para visualizar en pantalla)
/ebook Media Calidad aceptable para lectura
/printer Baja Calidad buena para impresión
/prepress Mínima compresión Alta calidad (prensa)
\---
LINUX
Simplificación como alias (temporal para tu sesión actual):
alias comprimirpdf='gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH'
Uso:
comprimirpdf -sOutputFile=salida.pdf entrada.pdf
O con script permanente (comprimir-pdf.sh):
#!/bin/bash
\# Uso: ./comprimir-pdf.sh entrada.pdf salida.pdf
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
- dNOPAUSE -dQUIET -dBATCH \
- sOutputFile="$2" "$1"
Dale permisos:
chmod +x comprimir-pdf.sh
WINDOWS
comprimir-pdf-auto.bat
@echo off
:: Script para comprimir un PDF usando Ghostscript (Windows)
:: Uso: arrastrar un solo archivo PDF sobre este script.
:: Generará un nuevo archivo con \_compress.pdf al final.
if "%~1"=="" (
echo Arrastra un archivo PDF sobre este script para comprimirlo.
pause
exit /b
)
set "input=%~1"
set "output=%~dpn1\_compress.pdf"
:: Ejecutar Ghostscript
gswin64c "-sDEVICE=pdfwrite" "-dCompatibilityLevel=1.4" "-dPDFSETTINGS=/ebook" "-dNOPAUSE" "-dQUIET" "-dBATCH" "-sOutputFile=%output%" "%input%"
echo PDF comprimido generado: %output%
pause
+264
View File
@@ -0,0 +1,264 @@
**AYUDA GIT**
=========
**https://git-scm.com/**
-------------------
**CONFIGURAR GIT. CONFIGURACION LOCAL**
git config --global user.name "Tu Nombre"
git config --global user.email "tuemail@example.com"
git config --global init.defaultBranch main Establecer main como rama por defecto en configuracion global
git config --global --list muestra datos configuracion global del repositorio
git config --list Muestra datos configuración global (usuario, email, etc.)
git config --global core.autocrlf true Uso en windows
git config --global core.autocrlf input Uso en Mac/Linux
-------------------
**CREAR REPOSITORIO EN GITHUB**
Inicia sesión en tu cuenta de GitHub.
Haz clic en el botón "New" en la esquina superior derecha.
Asigna un nombre a tu repositorio, elige la visibilidad (público o privado) y haz clic en "Create repository".
cd ruta/de/tu/carpeta
GitHub, por defecto, crea repositorios con la rama main
-------------------
**COMANDO GIT BASICOS**
git init Inicia un repositorio, crea una carpeta oculta .git donde Git almacenará los cambios.
git add . Agrega los archivos al área de preparación (staging):
git add nombre-del-archivo agregar uno específico
git commit -m "mensanje descriptivo" Guardar los cambios, registra los cambios en el historial de Git
git commit -am "mensaje" Agrega archivos modificados y hace el commit (no para archivos nuevos)
git add . && git commit -m "mensaje" Agrega archivo nuevos y hace commit
git log Ver el Historial de Cambios, lista de commits
git log --oneline --graph --all resumen compacto
git reset nombre_archivo Deshacer los cambios, quitar archivos del area de preparacion. (antes de commit)
git checkout -- nombre_archivo
git reset --soft HEAD~1 Deshacer el último commit
git reset --hard HEAD~1 Eliminar completamente el último commit
git rm archivo Eliminar del stage
git mv Cambiar nombre del stage
.gitignore Ignorar archivos para seguimiento de Git
Crear archivo .gitignore / editar archivos a ignorar
git add .gitignore / git commit -m "commit git ignore"
-------------------
**PULL / PUSH**
git push -u origin main Subir los archivos a repositorio remoto (GitHub, gitlab, etc, confirmar que se esta en la rama en git)
git push -u origin master subir archivos si la rama local se llama master
git push -u origin master:main Sube a remoto a la rama main el repositorio local de rama master
git status status-s Ver el Estado del Repositorio / -s info resumida
git pull origin main --rebase Sincroniza el local con el remoto (cambios en remoto que no hay que perder)
Sobreescribir repo remoto (el remoto tiene cambios que no me interesan y se pueden sobreescribir con la version de local)
git push --force origin main
-------------------
**REPOSITORIOS**
git remote add origin NUEVA_URL Agregar un nuevo remoto
git remote -v Ver el remoto actual
git remote set-url origin NUEVA_URL Cambiar el remoto
git remote remove origin Eliminar el remoto
git remote add origin https://github.com/tu-usuario/tu-repositorio.git Conectar el repositorio local con GitHub git remote add origin URL_DEL_REPO Añadir repositorio remoto (github, gitlab, etc...)
git pull origin main Obtener Cambios del Repositorio Remoto (actualizar el codigo)
git pull --rebase origin main Trae cambios (archivos) del remoto sin afectar al local. Despues add y commit.
git clone URL_DEL_REPO Clonar un Repositorio
-------------------
**RAMAS**
git branch Ver las ramas esistentes
git branch -a Ver todas las ramas, incluyendo las remotas
git branch nueva-rama Crear una nueva rama (no te situa en la rama creada)
git checkout nueva-rama Cambiar a una rama
git switch nueva-rama Cambiar a una rama (nuevo sistema recomendado)
git checkout -b nueva-rama Crear rama y cambiar a ella automaticamente
git switch -c nueva-rama Crear rama e ir a ella, nuevo comando
git merge rama Fusionar rama, integrar cambios (previamente situarse en la rama main/master)
Si hay conflictos, Git te pedirá que los resuelvas manualmente antes de confirmar la fusión.
git branch -d nueva-rama Eliminar una rama local (usa -D si la rama no ha sido fusionada y quieres forzar su eliminación).
git push origin --delete rama Eliminar una rama remota:
git fetch Trae rama a tu repositorio local git checkout nombre-de-la-rama
git pull origin nombre-de-la-rama Trae rama a tu repositorio local con un solo comando
git branch -m master main cambiar nombre de rama (cambia nombre rama master a main, para GitHub)
git branch -d nombre-de-la-rama Eliminar una rama localmente
git branch -m master main Renombrar rama máster a main
-------------------
**Resumen**
Usa ramas para desarrollar nuevas funciones sin afectar main.
Cambia entre ramas con git switch o git checkout.
Fusiona cambios con git merge.
Borra ramas innecesarias con git branch -d.
Sube ramas con git push -u origin rama.
-------------------
**GITHUB TOKEN**
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
clonar un repositorio privado utilizando el toquen
git clone https://<TOKEN>@github.com/codibytex/python_scripts.git
ejemplo practico con el token generado:
git clone https://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@github.com/codibytex/python_scripts.git
https://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@github.com/codibytex/detenpol.git
echo "# fusionar_comprimir_pdf" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/codibytex/fusionar_comprimir_pdf.git
git push -u origin main
---
###### GITEA BACKUP
###### **Gitea en docker**
**backup**
docker exec -it gitea bash
gitea dump
Esto generará un archivo tipo:
`gitea-dump-YYYY-MM-DD.zip`
Normalmente se guarda en:
`/data`
Copia el backup al host
`docker cp gitea:/data/gitea-dump-YYYY-MM-DD.zip .`
**Restore**
1️⃣ Copia el dump al contenedor (si no está ya dentro)
Si el ZIP está en el host:
docker cp gitea-dump-YYYY-MM-DD.zip gitea:/data/
2️⃣ Detén el contenedor de Gitea
docker stop gitea
⚠️ Importante: no restaures con Gitea corriendo.
3️⃣ Entra al contenedor
docker exec -it gitea bash
4️⃣ Ejecuta la restauración
gitea restore --file /data/gitea-dump-YYYY-MM-DD.zip
Esto:
- Restaura repositorios
- Restaura base de datos
- Restaura configuración
- Restaura issues, PRs, usuarios, etc.
5️⃣ Sal y arranca el contenedor
exit docker start gitea
**Gitea en volumen docker.**
Copiar directamente los volúmenes (rápida y eficaz)
Si usas `docker-compose`, normalmente tienes algo así:
`volumes: - ./gitea:/data`
`docker compose down`
tar czvf gitea_backup.tar.gz gitea/`
`docker compose up -d`
###### Copiar solo los repositorios (NO recomendado como único backup)
Los repositorios están en:
`/data/git/repositories`
Puedes copiarlos así:
`docker cp gitea:/data/git/repositories ./repos_backup`
---
**Gitea snap**
**backup**
sudo gitea dump
Esto genera un archivo como:
gitea-dump-YYYY-MM-DD.zip
Por defecto se guarda en: /var/snap/gitea/common
**Restaurar**
1️⃣ Detén Gitea:
sudo snap stop gitea
2️⃣ Restaura:
sudo gitea restore --file gitea-dump-YYYY-MM-DD.zip
3️⃣ Arranca Gitea:
sudo snap start gitea
Backup automático con cron (recomendado) Snap
Ejemplo de **backup diario a las 2:00 AM**:
`sudo crontab -e`
Añade:
`0 2 * * * gitea dump --file /var/backups/gitea/gitea-$(date +\%F).zip`
(asegúrate de crear antes la carpeta `/var/backups/gitea`)
+16
View File
@@ -0,0 +1,16 @@
**dell windows**
ipconfig
192.168.18.120
**ubuntu server**
ip -a
192.168.18.235
**macos**
ipconfig getifaddr en0
ifconfig
en0: inet
192.168.18.212
**asus bea**
192.168.18.174
+941
View File
@@ -0,0 +1,941 @@
# AYUDA LINUX
**Navegación y Exploración**
clear ctrl+l limpiar terminalpwd Muestra el directorio actual (Print Working Directory).ls Lista archivos y directorios.
ls -R Lista filas y subdirectorios
ls -l Lista en formato largo (permisos, tamaño, fecha).
ls -a Muestra archivos ocultos (incluye . y ..).
tree Muestra la estructura de directorios en forma de árbol.
ls | wc -l Cuenta filas/archivos y directorios
ls -a | wc -l Cuenta tambien archivos ocultos
ls -R | wc -l Cuenta files en directorio atual y subdirectorios
ls \*.txt | wc -l Cuenta filas con determinada extension
**Creación y Manipulación de Archivos**
touch Crea un archivo vacío o actualiza su fecha de modificación.
Ejemplo: touch archivo.txt
mkdir Crea un directorio.
Ejemplo: mkdir carpeta
cp Copia archivos o directorios.
cp archivo.txt destino/
cp -r directorio/ destino/ (copia recursiva para directorios).
cp -r directorio/origen . (copia directorio origen al directorio donde estas situado usando con punto al final)
mv Mueve o renombra archivos.
mv archivo.txt nuevo\_nombre.txt (renombra).
mv archivo.txt /ruta/destino/ (mueve).
rm Elimina archivos.
rm archivo.txt
rm -r directorio/ (elimina recursivamente).
rm -f (fuerza eliminación sin confirmación).
**Visualización de Archivos**
cat Muestra el contenido de un archivo.
Ejemplo: cat archivo.txt
less / more Muestra el contenido paginado (para archivos largos).
head Muestra las primeras líneas (por defecto, 10).
head -n 5 archivo.txt (muestra 5 líneas).
tail Muestra las últimas líneas.
tail -f archivo.log (sigue cambios en tiempo real, útil para logs).
**Búsqueda de Archivos**
find Busca archivos por nombre, tipo, tamaño, etc.
find /ruta -name "\*.txt" (busca archivos .txt).
find / -type f -size +10M (archivos >10MB).
grep Busca texto dentro de archivos.
grep "palabra" archivo.txt
grep -r "texto" /directorio/ (búsqueda recursiva).
**Buscar y borrar duplicados**
sudo apt install fdupes
fdupes -r /ruta/de/la/carpeta        Buscar duplicados (sin borrar)
fdupes -rd \~/Documentos            Te pregunta cuáles borrar
fdupes -rdN \~/Documentos        Borra todos menos uno
**Permisos y Propiedad**chmod Cambia permisos (lectura, escritura, ejecución).chmod 755 archivo.sh (permisos en formato numérico).chmod -R 777 db permisos a carpeta y contenidochmod +x script.sh (agrega permiso de ejecución). chown Cambia el propietario de un archivo. chown usuario:grupo archivo.txt
**Compresión y Descompresión**
tar Empaqueta y descomprime archivos.
tar -cvf archivo.tar directorio/ (crea un .tar).
tar -xvf archivo.tar (extrae).
tar -czvf archivo.tar.gz directorio/ (comprime con gzip).
gzip / gunzip Comprime/descomprime archivos .gz.
zip / unzip Trabaja con archivos .zip.
**Transferencia y Descarga**
wget Descarga archivos desde la web.
Ejemplo: wget <https://ejemplo.com/archivo.zip>
curl Transferencia de datos desde/hacia servidores.
Ejemplo: curl -O <https://ejemplo.com/archivo.txt>
**Comparación de Archivos** diff Compara dos archivos línea por línea. Ejemplo: diff archivo1.txt archivo2.txt
**Enlace simbolico**
Enlaces ln Crea enlaces (links) entre archivos.
ln -s /ruta/origen /ruta/enlace (enlace simbólico).
**Puertos**
Mostrar os puertos ocupados
sudo ss -tulpn &#x20;
ejemplo resultado:
Netid Local Address:Port Process
tcp 0.0.0.0:22 sshd
tcp 0.0.0.0:80 nginx
tcp 0.0.0.0:443 nginx
**Buscar un puerto concreto**, por ejemplo el 8080:
sudo ss -ltnp | grep :8080
**Ver qué proceso usa un puerto:**
sudo lsof -i :8080
sudo lsof -i :443
**Formatear discos**
sudo fdisk /dev/sdX     Borrar el disco
Dentro de `fdisk`:
`g → GPT (recomendado) | n → nueva partición | w → guardar cambios`
lsblk para comprobar
sudo mkfs.ext4 /dev/sdX1 formatear particion en ext4
sudo mkfs.ext4 /dev/sdX formatear todo el disco en ext4
sudo mkfs.ext4 -L DATOS /dev/sdX1 formatear y asignar etiqueta
(mejor usars particiones y no todo el disco)
sudo e2label /dev/sdX1 DATOS asignar etiqueta
sudo mkdir /mnt/datos    crear punto de montaje
sudo mkdir /mnt/datos     montar el disco
df -h     verificar
Montaje automático de disco
blkid /dev/sdX1    obtener UUID
sudo nano /etc/fstab     editar fstab
UUID=xxxx-xxxx /mnt/datos ext4 defaults 0 2 añadir linea para el disco
Resumen rapido discos
lsblk sudo umount /dev/sdX1
sudo mkfs.ext4 /dev/sdX1
sudo mount /dev/sdX1 /mnt/datos
TERMINAL CTRL + ATL + T abrir terminal
ctrl + l = clear limpiar terminal
bash terminal normal
zsh terminal zsh
echo \$SHELL info shell activa chsh -s /bin/bash cambiar shell bash - cerrar sesion aplicar cambios chsh -s /bin/zsh cambiar shell zsh - cerrar sesion aplicar cambios
**USUARIOS** - GRUPOS
uname -a Datos instalacion linux
whoami Usuario actual
cut -d: -f1 /etc/passwd Ver usuarios del sistema sudo adduser nombre\_usuario Crear usuario sudo passwd nombre\_usuario Cambiar contraseña de usuario
id nombre\_usuario Informacion de usuario su - nombre\_usuario Cambiar a otro usuario sudo su cambiar a root (superusuario)
**HOSTS**
/etc/hosts
sudo nano /etc/hosts
**PATH**
Añadir al PATH
nano \~/.bashrc     Ver/editar path usando bash nano
\~/.zshrc                    Ver/editar path usando zshrc
export PATH=PATH:/opt/lampp/bin
Editar al final del archivo, ejemplo echo 'export LS\_COLORS="LS\_COLORS:di=36"' >> \~/.bashrc Escribir directamente en PATH source \~/.bashrc
**PARAR/MATAR PROCESOS**
ps aux Ver procesos
ps aux | grep gunicorn Localizar un proceso
kill \<PID> Matar proceso&#x20;
kill -9 \<PID> Forzar matar proceso&#x20;
sudo systemctl stop gunicorn Parar proceso iniciado como servicio systemd
**DIRECTORIOS Y ARCHIVOS**
ls listar directorio
ls -lah -l lista, -a ocultos, -h tamaño
ls -d \*/ mostrar solo directorios
ls -1 mostrar 1 columna
ls -lh -l lista, -h tamaño
Crear enlace simbólico/acceso directo:
ln -s /home/juan/Documentos/Proyectos \~/Escritorio/Proyectos
du -h Lista directorios y subdirectorios - tamaño
du -sh \* Archivos y directorios - tamaño (ruta actual)
du -sh \*/ Directorios - tamaño (ruta actual)
du -sh /home Directorios home - tamaño
du -sh Tamaño total de la carpeta actual
du -sh \* | sort -hr Tamaño archivos/directorios ordenados
crear alias tamaños archivos/directorios
alias size='du -sh \* 2>/dev/null | sort -hr'
source \~/.bashrc
lsblk Listar discos y particiones
df -h Ver discos y tamaño
sudo fdisk -l Detalle de particiones
free -h Saber memoria total y disponible del equipo
uname -r kernel en uso
dpkg --list | grep linux-image lista de kernels instalador en sistema
sudo reboot Actualizar a ultimo kernel si esta instalado
mkdir crear directorios rmdir o rm -d eliminar directorios vacíos. rm -r eliminar directorios no vacíos. mv nombreviejoarchivo1 nombrenuevoarchivo1 cambiar nombre de arhivos/directorios cat >> nombre\_del\_archivo.txt crear un archivo echo "Esto es un ejemplo" > nombre\_del\_archivo.txt crear un archivo
**Montar/Desmontar USB**
sudo mkdir -p /mnt/mi\_usb # Cambia "mi\_usb" por el nombre que prefieras
sudo mount /dev/sdb1 /mnt/mi\_usb # Reemplaza "/dev/sdb1" con tu dispositivo
sudo mount -t ntfs-3g /dev/sdb1 /mnt/mi\_usb # Para NTFS
sudo mount -t vfat /dev/sdb1 /mnt/mi\_usb # Para FAT32
sudo mount -o rw /dev/sdb1 /mnt/mi\_usb Si el dispositivo está en modo solo lectura, intenta montarlo con permisos de escritura
sudo apt install ntfs-3g Para dispositivos NTFS, ntfs-3g
sudo umount /dev/sdb1
sudo umount /mnt/mi\_usb
Montaje automático al recinicar (opcional)
sudo nano /etc/fstab
UUID=.... /mnt/mi\_usb ntfs-3g defaults 0 0
UUID=.... /mnt/externo ext4 defaults,nofail 0 2
Para obtener el UUID del dispositivo, usa: sudo blkid sudo blkid /dev/sdb1
**Servicios**
sudo systemctl start nombre\_del\_servicio     Iniciar servicio
sudo systemctl stop nombre\_del\_servicio Detener servicio
sudo systemctl restart nombre\_del\_servicio Reiniciar servicio
sudo systemctl status nombre\_del\_servicio Estado servicio
sudo systemctl enable nombre\_del\_servicio Habilitar el servicio al inicio del sistema
sudo systemctl disable nombre\_del\_servicio Deshabilitar arranque automatico
poweroff / sudo shutdown -h now Apagar
reboot / sudo shutdown -r now Reiniciar
systemctl suspend Suspender
ctrl + alt + sup cerrar sesion
gnome-session-quit --logout cerrar sesion terminal
alt + f2 ejecutar orden
alt + f4 cerrar ventana
super + h minimizar ventana
super + d mostrar escritorio
crtl + q cerrar ventana
sudo apt update && sudo apt upgrade -y     Actualizar sistema
lsb\_release -a Versión linux instalada
top Info procesos
htop Info procesos color
**ABRIR EDITOR DE TEXTO GNOME, GEDIT, NANO (terminal)**
gnome-text-editor Abrir editor gnome
gedit Abrir editor gedit (gedit prueba.txt)
nano Abrir editor nano
**BUSCAR ARCHIVOS**
find /ruta/de/busqueda -name "archivo.ext"
find / nombre\_archivo Busca en todo el sistema
sudo find / -type f -name "nombre\_programa" 2>/dev/null Buscar en todo el sistema ignora permisos whereis nombre\_archivo locate nombrearchivo sudo apt install plocate sudo updatedb actualiza la base de datos para buscar grep -r "texto a buscar" /ruta Buscar el texto dentro de archivos which nombre\_programa Buscar si esta dentro del PATH
**Clonar USB**
lsblk o fdisk -l Identificar unidades usb
sudo dd if=/dev/sdX of=/dev/sdY bs=4M status=progress     clonar directamente usb1 a usb2
sudo dd if=/dev/sdX of=backup\_usb.img bs=4M status=progress     clonar imagen sudo dd if=backup\_usb.img of=/dev/sdY bs=4M status=progress Restaurar imagen
opcion2 (utilizar gnome disks) abre discos - seleccionar usb origen - menu (...) - crear imagen disco. guardar archivo .img Para restaurar usasr "restaurar imagen de disco"
**Cambiar fecha/hora**
sudo date --set="Sep 30 08:55:00 2025"
**Instalar/Desinstalar paquete DEB desde la Terminal**
sudo dpkg -i google-chrome-stable\_current\_amd64.deb dpkg --list ver lista de paquetes instalados sudo dpkg remove teamviewer Desintalar paquete .deb sudo apt-get remove nombre\_del\_paquete Desinstalar paquete.deb
**APT**
sudo apt install nombre\_paquete Instalar programa
sudo apt list muestra los paquetes instalados
apt search nombre\_paquete Buscar paquete apt
apt-cache search nombre\_paquete Buscar más específicamente
apt show nombre\_paquete Información del paquete
sudo apt remove nombre\_paquete Eliminar programa
sudo apt purge auto-remove teamviewer Eliminar programa y dependencias
sudo apt-get autoclean Autolimpiar paquetes apt
sudo apt-get clean Eliminar cache
sudo apt-get autoremove Eliminar paquetes y dependencias que ya no hacen falta
apt-get download \<nombre\_del\_paquete> Descargar paquete apt
apt-cache depends \<nombre\_del\_paquete> Saber dependencias de un paquete / despues descargar
cada dependencias con apt-get download
sudo apt-get install -f resolver errores dependencias
Descargar paquetes con apt-offline
sudo apt install apt-offline
Instalar en el equipo con conexion
apt-offline set --install-packages solicitud.sig
Generar solicitud descarga en equipo sin conexion apt-offline get solicitud.sig --bundle paquetes.zip Copia solicitud.sig en equipo conexion apt-offline install paquetes.zip Ejecutar en equipo sin conexion
**INSTALAR PAQUETES SNAP**
sudo snap install nombre-del-paquete
sudo snap install nombre-del-paquete --channel=versión # Instalar una versión específica
snap find término-de-búsqueda # Buscar paquetes disponibles
snap info nombre-del-paquete # Ver información detallada de un paquete
snap list # Listar todos los paquetes instalados
snap list --all # Ver paquetes instalados con más detalles
sudo snap remove nombre-del-pquete # Eliminar un paquete
sudo snap remove --purge nombre-del-paquete # Eliminar completamente (incluyendo datos)
sudo snap revert nombre-del-paquete # Revertir a versión anterior
sudo snap refresh nombre-del-paquete # Actualizar un paquete específico
sudo snap refresh # Actualizar todos los paquetes snap refresh --list # Ver actualizaciones disponibles
**INSTALAR PAQUETES .AppImage** (autoejecutables)
Make it executable
chmod a+x Subsurface\*.AppImage
and run!
./Subsurface\*.AppImage
**INSTALAR .XZ**
unxz edit-1.0.0-x86\_64-linux-gnu.xz Descomprimir, dejara archivo ejecutable
chmod +x edit-1.0.0-x86\_64-linux-gnu Hacer archivo ejecutable
sudo mv edit-1.0.0-x86\_64-linux-gnu /usr/local/bin/edit Opcional-Mover para usar en cualquier parte del sistema
**INSTALAR tar.gz**
tar -xzf nombrearchivo.tar.gz --descomprimir el archivo
ejecutar el script, normalmente bin/nombrescript.sh
Nota: NO SE DEBE extraer una nueva instancia sobre una ya existente. La carpeta de destino debe estar vacía.
**ARCHIVOS COMPRIMIR/DESCOMPRIMIR RAR**
sudo apt update
sudo apt install unrar rar
unrar x archivo.rar Descomprimir archivo
unrar e archivo.rar Descomprimir sin estructura carpetas
rar a nombre\_archivo.rar archivo1 archivo2 directorio/ Crear archivo rar
rar a backup.rar /ruta/al/archivo.txt /ruta/al/directorio
rar a -m5 archivo.rar directorio/ Maxima compresion
unrar l archivo.rar Listar contenido archivo rar
unrar x -pcontraseña archivo.rar Extraer archivo con contraseña
**INSTALAR tar.xz DESDE LA TERMINAL**
tar -xf nombre\_del\_paquete.tar.xz
cd nombre\_del\_paquete
./configure
make
sudo make install
##### Instalar ZIP
Descomprimir: unzip nombrearchivo.zip
Cd a la carpeta descomprimida
./configure
make
sudo make install
INSTALAR GESTOR PAQUETES SYNAPTIC
sudo apt install synaptic
**INSTALAR CODECS MULTIMEDIA**
sudo apt install Ubuntu-restricted-extras
Instalar paquetes habituales en conjunto
sudo apt install idle python3-pip onedrive sqlite3 sqlitebrowser timeshift speedtest-cli gnome-shell-extension-manager neofetch
htop gdebi zsh nodejs npm filezilla apache2 mysql-client mysql-server php libapache2-mod-php php-mysql php-sqlite3 phpmyadmin
sudo snap install bitwarden spotify gitea nextcloud mysql-workbench-community
INSTALACION PROGRAMAS
sudo snap install bitwarden Bitwarden (también .deb en web)
sudo apt install wine Wine
gnome contacts (centro aplicaciones) contacts
wine /ruta/a/heidisql\_installer.exe Heidisql con wine
OhMyZsh
wget OhMyZsh sh -c "\$(wget -O- <https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/uninstall.sh>)" local-wp (descargar .deb/web)
sudo apt install nextcloud-desktop Instalar cliente escritorio nextcloud ubuntu-desktop (diferente aplicacion snap)
Desinstalar libreoffice
sudo apt update
sudo apt remove --purge libreoffice\*
sudo apt clean
sudo apt-get autoremove
##### INSTALAR/DESINSTALAR XAMPP
xampp (descargar .run de web) XAMPP
sudo chmod +x xampp-linux-x64-*-installer.run
sudo ./xampp-linux-x64-*-installer.run
Desinstalar Xampp
sudo /opt/lampp/lampp stop
sudo rm -rf /opt/lampp
sudo rm -f /usr/share/applications/xampp-control-panel.desktop
##### INSTALAR LAMP
sudo apt update && sudo apt upgrade
sudo apt install apache2
sudo apt install mysql-server
sudo mysql\_secure\_installation
sudo apt install php libapache2-mod-php php-mysql php-sqlite3
echo "" | sudo tee /var/www/html/info.php
sudo rm /var/www/html/info.php
sudo systemctl restart apache2
sudo apt install phpmyadmin
seleccionar apache - aceptar dbconfig-common
sudo snap install mysql-workbench-community
Crear usuario phpmyadmin para acceder:
sudo mysql Entrar mysql
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'clave\_segura';
GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON nombre\_basedatos.\* TO 'usuario'@'localhost'; # Acceso a una sola base datos
FLUSH PRIVILEGES; Aplicar canbios
EXIT;
<http://localhost/phpmyadmin> Iniciar sesion en phpmyadmin
Eliminar usuario
DROP USER 'nombre\_usuario'@'host';
FLUSH PRIVILEGES;
UBUNTU DESKTOP ACCESOS mysql root (no tiene contraseña) 123Passowrd! Contraseña de phpmyadmin para mysql (ojo se puso mal pero es 123Passowrd! admin - 123Password! Phpmyadmin usuario
**ACTUALIZAR DISTRO UBUNTU DESDE TERMINAL**
sudo apt update && sudo apt upgrade && sudo apt dist-upgrade
sudo do-release-upgrade
**PAPELEREA EN ESCRITORIO**
gsettings set org.gnome.shell.extensions.ding show-trash true gsettings set org.gnome.shell.extensions.ding show-trash false
**LIMPIAR EL SISTEMA**
sudo apt autoclean
sudo apt autoremove
sudo apt clean
**GRUB (cambiar orden)**
sudo gedit /etc/default/grub GRUB DEFAULT= y un número que empieza en cero, equivalente al sistema operativo que arrancará en primer lugar por defecto.
sudo update-grub -actualizar cambios
**CREAR LANZADOR PYTHON**
1. Abre una terminal y navega a tu directorio personal: cd \~
2. Crea un nuevo archivo `.desktop` en la carpeta de aplicaciones locales: nano \~/.local/share/applications/python3.desktop
3. En ese archivo, pega el siguiente contenido: \[Desktop Entry] Version=1.0 Name=Python3 Script Launcher Exec=/usr/bin/python3 %f Icon=utilities-terminal Terminal=true Type=Application MimeType=text/x-python;
4. Guarda y cierra el archivo con `CTRL + O`, luego `ENTER`, y finalmente `CTRL + X`.
5. Actualiza las asociaciones MIME. Para que el sistema reconozca los cambios, actualiza la base de datos de MIME: update-desktop-database \~/.local/share/applications
6. Selecciona Python3 como aplicación predeterminada
PIP UBUNTU 24
Atención instalar complementos pip en ubuntu 24.04:
1. Permitir instalar con PIP normal: Eliminar el archivo que indica cambio de criterio cd /usr/lib/python3.11 sudo rm EXTERNALLY-MANAGED Restaurar: sudo touch EXTERNALLY-MANAGED
ERRORES PYTHON CON IMAGENES PIL - PILLOW
sudo apt-get install python3-pil python3-pil.imagetk
**CREAR UN ACCESO DIRECTO:**
Si el programa es una aplicación gráfica y quieres ejecutarlo desde el menú de aplicaciones, puedes crear un archivo .desktop en \~/.local/share/applications/.
Ejemplo de archivo .desktop:
\[Desktop Entry]
Name=Nombre del Programa
Exec=/ruta/al/directorio/nombre\_del\_programa
Icon=/ruta/al/icono.png
Type=Application
Categories=Utility;Application;
Guarda con la extensión .desktop y hacer ejecutable:
chmod +x \~/.local/share/applications/nombre\_del\_programa.desktop (hacer ejecutable)
**COPIAR ACCESO A APLICACIONES EN ESCRITORIO**
Los accesos directos estan en /usr/share/applications/ hace falta copiar y pegar en carpeta Escritorio
**XAMPP**
sudo /opt/lampp/lampp start Iniciar Xampp
sudo /opt/lampp/lampp stop Detener Xampp
Panel de control lamp sudo /opt/lampp/manager-linux-x64.run
Php.ini ubicacion /opt/lampp/etc
Elige la arquitectura para tu Linux OS, versión de 32-bits o de 64-bits.
1. Cambia los permisos al instalador chmod 755 xampp-linux-\*-installer.run
2. Ejecuta el instalador sudo ./xampp-linux-\*-installer.run directorio /opt/lampp.
SQLITE En aplicaciones con Sqlite3 la carpeta donde está la base de datos tiene que tener permisos de lectura y escritura porque si no da error en las updates-delete,etc.. En cambio, sí que lee la base de datos
**PERMISOS**
Qué son los permisos en Linux?
Cada archivo o carpeta tiene tres tipos de permisos para tres tipos de usuarios.
Tipos de usuarios:
Propietario (owner) quien creó el archivo.
Grupo otros usuarios del mismo grupo.
Otros (others) todos los demás.
Tipos de permisos:
r = lectura (read) → ver contenido.
w = escritura (write) → modificar o eliminar.
x = ejecución (execute) → ejecutar como programa/script.
Representación numérica:
Cada permiso tiene un valor:
r = 4
w = 2
x = 1
Se suman por grupo. Ejemplo:
Permisos Valor
rwx 7 (4+2+1)
r-x 5 (4+0+1)
rw- 6 (4+2)
r-- 4
Entonces:
chmod 755 archivo
Significa:
7 (rwx) → dueño: todo permitido
5 (r-x) → grupo: leer y ejecutar
5 (r-x) → otros: leer y ejecutar
Comandos comunes:
chmod → cambia permisos
chown → cambia el propietario
ls -l → muestra los permisos de archivos
Supongamos que tienes esto:
mkdir proyecto
cd proyecto
touch script.sh
Paso 1: Ver los permisos actuales
ls -l
Salida típica:
-rw-r--r-- 1 usuario usuario 0 abr 29 12:00 script.sh
Esto significa:
-rw-r--r-- = el propietario puede leer y escribir, los demás solo leer.
No tiene permiso de ejecución (x), por eso no puedes correrlo como programa.
Paso 2: Dar permisos de ejecución al archivo
chmod +x script.sh
Ahora, ls -l muestra:
-rwxr-xr-x 1 usuario usuario 0 abr 29 12:00 script.sh
Ya puedes ejecutarlo:
./script.sh
Paso 3: Dar permisos de escritura a una carpeta (para copiar, crear o modificar dentro)
chmod 775 proyecto
Esto significa:
Dueño y grupo pueden leer, escribir y entrar (rwx).
Otros pueden leer y entrar, pero no escribir (r-x).
Paso 4: Hacer que Apache (u otro usuario) pueda escribir ahí
Si estás en un servidor web:
sudo chown -R www-data:www-data proyecto
sudo chmod -R 775 proyecto
chmod +x archivo.sh # hacer que un archivo sea ejecutable.
chmod 777 archivo.txt o ruta (Todos los permisos para todos)
sudo mkdir -m 777 /home/carpeta\_nueva crea una carpeta con permisos
chmod 755 script.sh Significa:7 (rwx) → El propietario puede leer, escribir y ejecutar. 5 (r-x) → El grupo y otros pueden leer y ejecutar, pero no modificar.
chmod 644 documento.txt Significa: 6 (rw-) → El propietario puede leer y escribir. 4 (r--) → El grupo y otros solo pueden leer.
chmod -R 755 /ruta/de/la/carpeta chmod -R (Aplicar permisos de forma recursiva)
Permisos de grupo a varios usuarios
sudo groupadd media # crear grupo
sudo usermod -aG media jesus # añadir usuario al grupo
sudo usermod -aG media transmission-daemon # añadir usuario al grupo
sudo chgrp media /mnt/Toshiba # cambiar el grupo de la carpeta
sudo chmod g+rw /mnt/Toshiba # Dar permisos de lectura y escritura al grupo:
newgrp media # Aplicar cambios (reinicia sesión o ejecuta):
Permisos con setfacl
sudo apt update && sudo apt install acl -y sudo setfacl -m u:jesus:rwx /mnt/Toshiba #asigna permisos de lectura y escritura -m: Modifica los permisos ACL. u:jesus:rwx: Da permisos de lectura (r), escritura (w) y ejecución (x) al usuario jesus. sudo setfacl -Rm u:jesus:rwx /mnt/Toshiba sudo setfacl -dm u:jesus:rwx /mnt/Toshiba -R: Aplica recursivamente en los archivos existentes. -d: Establece permisos por defecto para nuevos archivos. getfacl /mnt/Toshiba
CREAR ACCESOS DIRECTOS enlace simbolico ln -s /home/jesus/Documentos /home/jesus/Escritorio #este ejemplo crea acceso directo a documentos en escritorio ln -s /path destino /path colocacion acceso directo /home/jesus/Documentos
CARPETA FONDOS DE ESCRITO /usr/share/backgrounds
EXTENSIONES <https://extensions.gnome.org/> Blur my shell Add to desktop Dash to dock Caffeine Coverflow Alt-Tab ArcMenu Vitals Custom Hot Corners Extended Places status indicator Apps menu Bluetooth Quick connect Services Systemd show desktop applet
VELOCIDAD INTERNET desde terminal (speedtest) speedtest speedtest-cli // speedtest --simple
JUEGOS LINUX frozen bubble Cannonball Supertuxkart Supertux Killbots Kapman Quadrapassel Trackmania Nations Forever Chess gnome kobodeluxe (apt) open-invaders (apt) astromenace (apt) chromium-bsu (sudo apt)
WINE wine aplicacion.exe #ejecutar una aplicacion .exe
PDF HERRAMIENTAS sudo apt install pdfarranger pdfarranger sudo dpkg -i pdfsam\_\*.deb pdfSam Basic (descargar del sitio web) sudo apt install ghostscript ghostscript (comprimir pdf) gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=salida.pdf entrada.pdf Puedes cambiar /screen por /ebook, /printer o /prepress según el nivel de calidad/ tamaño.
INSTALAR GNOME
Para instalar GNOME con la menor cantidad de utilidades de GNOME, tendrías que instalar un paquete llamado vanilla-GNOME usando el comando dado: sudo apt install vanilla-gnome-desktop Y si quieres tener una experiencia GNOME completa, puede simplemente instalar el gnome paquete: sudo apt install gnome desintalar gnome ubuntu sudo apt-get remove --auto-remove gnome-shell sudo apt-get purge --auto-remove gnome-shell
ENTORNOS DE ESCRITORIO
Sudo apt-get install Ubuntu-mate-desktop Sudo apt-get install cinnamon-desktop-environment Sudo apt-get install kde-standard
REINICIAR EL DOCK
dconf reset -f /org/gnome/shell/extensions/dash-to-dock/ dconf reset -f /org/gnome/shell/extensions/favorite-apps
DOCK UBUNTU MINIMIZAR APLICACIÓN
gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize' gsettings reset org.gnome.shell.extensions.dash-to-dock click-action #quitar gsettings range org.gnome.shell.extensions.dash-to-dock click-action #opciones
REINICIAR UBUNTU POR DEFECTO (DOCK, FONDOS, ETC... como recien instalado) dconf reset -f /
**ACTUALIZAR LA APP UBUNTU STORE**
snap refresh snap-store --channel=latest/stable/ubuntu-24.04 This command may fail and output something look like: snap snap-store has running apps, pids: 2205. In the case, just kill snap-store using the ID number (replace 2205 to yours): Sudo kill 9 2205 (o el numero que salga) Then, re-run the snap refresh command.
DOCK TRANSPARENTE
gsettings set org.gnome.shell.extensions.dash-to-dock transparency-mode 'FIXED'
gsettings set org.gnome.shell.extensions.dash-to-dock background-opacity 0.2
Change 0.0 to any number between 0 and 1.
To reset to the default setting:
gsettings reset org.gnome.shell.extensions.dash-to-dock background-opacity
MAME Ruta: /usr/share/games
CONFIGURAR TECLADO
KALI LINUX
Poner idioma español
sudo dpkg-reconfigure localeses\_ES.UTF-8 UTF-8
reiniciar
Unbuntu, etc. sudo dpkg-reconfigure keyboard-configuration Desde Ajustes Teclado y poner español
Cambiar permisos desde la consola
Nos vamos a Aplicaciones -> Accesorios -> Terminal
Por ejemplo yo le quiero dar permisos de lectura, escritura y ejecución para los 3 grupos a una carpeta llamada Prueba que está en el Escritorio, así que navego hasta el escritorio:
cd Escritorio
Y tengo dos opciones,la numérica y la alfabética:
1.- chmod 777 Prueba
2.- chmod rwx Prueba
Si la carpeta pertenece a root, tendremos que hacerlo asi:
1.- sudo chmod 777 Prueba
2.- sudo chmod rwx Prueba
Si queremos que se haga de manera recursiva, es decir, que los ficheros y carpetas contenidos en Prueba, también reciban estos cambios, hacemos esto:
1.- chmod -R 777 Prueba
2.- chmod -R rwx Prueba
Cualquiera de las dos y teniendo en cuenta lo de sudo.
Un par de ejemplos más:
Queremos que el usuario tenga RWX, el grupo RW y los demás R, en la carpeta Prueba:
1.- chmod 764 Prueba
2.- chmod u=rwx,g=rw,o=r Prueba
u equivale a usuario (user) g a grupo (group) y o a otros (others). También sirve lo de -R y sudo.
Queremos que el usuario tenga RW, el grupo R y los demás R, en la carpeta Prueba:
1.- chmod 644 Prueba
2.- chmod u=rw go=rw Prueba
Igualmente sirve lo de -R y sudo.
Para quitar permisos, realmente es cambiarlos por otros, asi que es lo mismo que aquí se explica.
SOLUCION FALTA DE SONIDO ubuntu (no reconoce audio)
sudo apt-get install --reinstall alsa-base pulseaudio
sudo alsa force-reload
SOLUCION ERROR PYTHON PYSIDE6
sudo apt install libxcb-cursor0 libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0
AÑADIR PROGRAMA/CARPETA AL PATH
nano \~/.bashrc - nano \~/.zshrc
export PATH=PATH:HOME/ruta/al/directorio - Guardar y cerrar.
Ejemplo - export PATH=PATH:HOME/python/venv/lib/python3.12/site-packages/PySide6\`\`
source \~/.bashrc - Actualizar
Verificar path
echo \$PATH
**GITEA**
Gitea (arrancar y parar) Instalado desde snap
localhost:3000 (puerto 3000)
Iniciar Gitea sudo snap start gitea
Detener Gitea sudo snap stop gitea
Verificar estado sudo snap services gitea
Deshabilitar inicio sudo snap disable gitea
Reiniciar Gitea sudo snap restart gitea
Eliminar Gitea sudo snap remove gitea
**LOCAL-WP (solucion problema)**
Local-wp ubuntu 24.04 (solucionar problemas de instalación con dependencias)
curl -O <http://launchpadlibrarian.net/648013231/libtinfo5_6.4-2_amd64.deb>
sudo dpkg -i libtinfo5\_6.4-2\_amd64.deb
curl -O <http://launchpadlibrarian.net/648013227/libncurses5_6.4-2_amd64.deb>
sudo dpkg -i libncurses5\_6.4-2\_amd64.deb
curl -O <http://launchpadlibrarian.net/646633572/libaio1_0.3.113-4_amd64.deb>
sudo dpkg -i libaio1\_0.3.113-4\_amd64.deb
sudo apt install ./local-9.1.1-linux.deb (o bien)
sudo dpkg -i local-9.1\*.deb
resolver error: sudo apt install libxapp-gtk3-module sudo apt install libxapp-gtk3-module
**DOCKER**
Para instalar Docker en Ubuntu, sigue estos pasos:
1. Eliminar versiones antiguas (si existen) sudo apt remove docker docker-engine docker.io containerd runc
2. Instalar dependencias necesarias sudo apt update sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
3. Agregar el repositorio oficial de Docker curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb \[arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://download.docker.com/linux/ubuntu> \$(lsb\_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. Instalar Docker Engine sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io
5. Verificar que Docker esté funcionando sudo systemctl status docker (Deberías ver active (running)). Para probarlo, ejecuta: sudo docker run hello-world (Si funciona, verás un mensaje de confirmación).
6. (Opcional) Evitar usar sudo con Docker Para no tener que escribir sudo cada vez, agrega tu usuario al grupo docker: sudo usermod -aG docker \$USER newgrp docker # Recarga los grupos sin reiniciar sesión Ahora puedes probar sin sudo: docker run hello-world
docker ps # Ver contenedores en ejecución docker stop mi-web # Detener el contenedor docker start mi-web # Iniciar el contenedor nuevamente docker rm mi-web # Eliminar el contenedor (cuando ya no lo necesites)
**ARREGLAR GRUB**
Confirmar si se usa UEFI y ver archivo .efi
ls -l /boot/efi/EFI/ubuntu/
Verificar modo de arranque
\[ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS"
Archivo BIOS para grub - uefi.
/boot/efi/EFI/ubuntu/grubx64.efi - Sin secure boot
/boot/efi/EFI/ubuntu/shimx64.efi - Con secure boot
Reinstalar grub EN UEFI
sudo grub-install --target=x86\_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
Reparar el arranque UEFI
sudo mount /dev/sdXY /mnt # Reemplaza sdXY con tu partición raíz (ej: sda2)sudo mount /dev/sdXZ /mnt/boot/efi # Reemplaza sdXZ con tu partición EFI (ej: sda1)sudo grub-install --efi-directory=/mnt/boot/efisudo update-grubsudo update-grub
sudo fdisk -l -para identificar particion y la de linux/ubuntu
sudo mount /dev/nvme0n1p6 /mnt --Particion linux
sudo mount /dev/nvme0n1p1 /mnt/boot/efi --Particion efi
sudo mount --rbind /dev /mnt/dev
sudo mount --rbind /proc /mnt/proc
sudo mount --rbind /sys /mnt/sys
sudo chroot /mnt --Entrar como root
grub-install /dev/nvme0n1 --Instala grub en efi
update-grub
exit
sudo reboot
script automatico
\#!/bin/bash
echo "📦 Montando particiones..."
sudo mount /dev/nvme0n1p6 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
echo "🔧 Entrando a chroot para instalar GRUB..."
sudo chroot /mnt /bin/bash -c "
grub-install /dev/nvme0n1 &&
update-grub &&
echo '✅ GRUB instalado correctamente dentro de chroot'
"
echo "🚀 Reparación completa. Puedes reiniciar ahora."
nano reparar-grub.sh
chmod +x reparar-grub.sh
sudo ./reparar-grub.sh
Saber si se esta en UEFI o Legacy BIOS
ls /sys/firmware/efi - Si hay contenido esta en UEFI
\[ -d /sys/firmware/efi ] && echo "Estás en modo UEFI" || echo "Modo legacy bios"
Añadir windows a Grub si ha desaparecido
Actualiza GRUB con detección de otros sistemas operativos:
sudo apt install os-prober
sudo update-grub
Esto ejecutará os-prober, que buscará otros sistemas instalados, como Windows, y regenerará el menú de GRUB.
⚠️ Si Windows no aparece aún, puede que os-prober esté deshabilitado (desde Ubuntu 22.04):
Edita el archivo de configuración de GRUB:
sudo nano /etc/default/grub
GRUB\_DISABLE\_OS\_PROBER=false
sudo update-grub
sudo reboot
**CRON**
systemctl status cron Estado servicio cron
crontab -e Tabla de cron propio de cada usuario
crontab -u www-data -e cron del usuario www-data
sudo crontab -e Cron de sudo
crontab -l Lista las tareas cron
grep CRON /var/log/syslog Logs cron
###### Sintaxis de una regla en `cron`
Cada línea en `crontab` sigue este formato:
* comando\_a\_ejecutar │ │ │ │ │ │ │ │ │ └── Día de la semana (0-6, donde 0 = domingo) │ │ │ └──── Mes (1-12) │ │ └────── Día del mes (1-31) │ └──────── Hora (0-23) └────────── Minuto (0-59)
* Ejecutar un script cada día a las 2:30 AM 30 2 \* \* \* /ruta/al/script.sh
* Ejecutar cada 5 minutos: \*/5 \* \* \* \* /ruta/al/script.sh
* Ejecutar todos los lunes a las 8:00 AM: 0 8 \* \* 1 /ruta/al/script.sh
######
minuto hora día\_mes mes día\_semana
###### Ubicación de los crontabs
1. **Usuario actual:** `crontab -e` → se guarda en `/var/spool/cron/crontabs/usuario`
2. **Global (para todos los usuarios):**
* `/etc/crontab`
* Archivos en `/etc/cron.d/`
* Directorios especiales:
* `/etc/cron.daily/` (se ejecuta una vez al día)
* `/etc/cron.hourly/` (cada hora)
* `/etc/cron.weekly/` (una vez a la semana)
* `/etc/cron.monthly/` (una vez al mes)
#### GENERAR TOKENS
**Linux / macOS**
OpenSSL
openssl rand -hex 32
Genera 32 bytes aleatorios en hexadecimal (64 caracteres).
/dev/urandom
cat /dev/urandom | tr -dc 'a-f0-9' | head -c 64
echo
UUID
uuidgen
Ejemplo:
550e8400-e29b-41d4-a716-446655440000
**Windows**
PowerShell
\[guid]::NewGuid()
O un token más largo:
-join ((48..57) + (97..102) | Get-Random -Count 64 | % {\[char]$\_})
OpenSSL en Windows
Si tienes instalado OpenSSL
openssl rand -hex 32
**Python (multiplataforma)**
Funciona igual en Linux, macOS y Windows:
import secrets
token = secrets.token\_hex(32)
print(token)
+108
View File
@@ -0,0 +1,108 @@
Atajos de teclado F11 → Muestra el escritorio (en muchos teclados tendrás que usar Fn + F11).
Command (⌘) + F3 → También muestra el escritorio. Fn + F11 → En MacBooks más nuevos, hace lo mismo.Gestos en el trackpad.
F4. Muestra launchpad.
Pellizcar con cuatro dedos hacia afuera → Muestra el escritorio.
Deslizar con tres/four dedos hacia arriba → Activa Mission Control (puedes ver todas las ventanas abiertas).
Desde la barra superior
Clic en el Centro de control (esquina superior derecha) → “Mission Control” → “Mostrar Escritorio”.
Renombrar archivo.
Simplemente pulsar Enter sobre archivo seleccionado (no F2)
📁 Copiar, pegar y mover
⌘ + C → Copiar archivo/carpeta seleccionada
⌘ + V → Pegar (copia el archivo)
⌘ + ⌥ + V → Mover archivo (pegar en nueva ubicación)
⌘ + D → Duplicar archivo/carpeta seleccionada
🔎 Navegación rápida
⌘ + ↑ → Ir a la carpeta contenedora (subir un nivel)
⌘ + ↓ → Abrir archivo/carpeta seleccionada
⌘ + ⌫ → Enviar archivo/carpeta seleccionada a la papelera
⇧ + ⌘ + ⌫ → Vaciar papelera
🔄 Selección
⌘ + A → Seleccionar todo
⌘ + clic → Selección múltiple no contigua
⇧ + clic → Selección de rango
🔍 Búsqueda y vist
⌘ + F → Buscar en la carpeta actual
⌘ + 1 → Vista como iconos
⌘ + 2 → Vista como lista
⌘ + 3 → Vista como columnas
⌘ + 4 → Vista como galería
🖥️ Atajos útiles para escritorio
F11 o ⌘ + F3 → Mostrar escritorio
⌘ + Tab → Cambiar entre aplicaciones abiertas
⌘ + H → Ocultar ventana activa
⌘ + ⌥ + H → Ocultar todas menos la activa
Atl-Gr equivale a tecla ⌥ (Option/Alt).
~ ⌥ (Option) + ñ
**Finder/terminal**
open . Abrir el finder desde la terminal
open /ruta/a/la/carpeta abrir otra ruta específica
open -R archivo.ext abrir la carpeta que contiene un archivo
**Alinear ventanas**
fn + control + flecha izq/der/up/down # situa ventana izq/der/up/down
**alias**
alias nombre_alias="comando -opciones" Crear alias
alias ll="ls -la"
unalias nombre_alias Eliminar alias sesion actual
alias Ver alias
Alias permanente
nano ~/.zshrc
alias ll="ls -la"
alias ls='ls -G' poner color a carpetas en terminal
source ~/.zshrc
Linux
nano ~/.bashrc
alias ll="ls -la"
source ~/.bashrc
Windows
Set-Alias ll Get-ChildItem. alias temporal
Alias permanenete
notepad $PROFILE
\# Alias simple
Set-Alias ll Get-ChildItem
\# Función personalizada
function gs { git status }
function gc { git commit -m $args }
function gp { git push }
Editar hosts
nano /etc/hosts
windows - C:\\Windows\\System32\\drivers\\etc\\hosts
**Evitar arranque automatico**
sudo nvram BootPreference=%00 - no iniciar al abrir tapa o conectar corriente
sudo nvram BootPreference=%01 - evitar arranque al abrir la tapa
sudo nvram BootPreference=%02 - evitar arranque al conectar corriente
sudo nvram -d BootPreference - volver a habilitar por defecto
Homebrew instalar
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Minimizar ventana al pulsar app del dock
activar
defaults write com.apple.dock minimize-to-application -bool true; killall Dock
desactivar
defaults delete com.apple.dock minimize-to-application; killall Dock
Cambiar nombre a Archivo
Seleccionar archivo + Tecla Enter/Retur = F2 en windows/linux
Saber IP
curl ifconfig.me ip pública
ipconfig getifaddr en0 (o en1 para Ethernet) ip privada
+560
View File
@@ -0,0 +1,560 @@
AYUDA MYSQL
\===========
Acceso consola de mysql/mariadb
./mysql u- root (si no tiene password)
./mysql u- root -p <password>
Backups mysqldump desde terminal
./mysqldump -u root -p nombre\_base\_datos > backup.sql
./mysqldump -u root -p --all-databases > all\_databases\_backup.sql
mysqldump -h localhost -u root -p --port=3307 mi\_base > backup.sql Para establecer puerto 3307
Restaurar un backup mysql/mariadb
Terminal del sistema operativo
mysql -u root -p nombre\_base\_datos < backup.sql
mysql -h localhost -u usuario -p --port=3307 nombre\_base < backup.sql Estableciendo puerto
Consola mysql/mariadb
show databases; Mostrar bases de datos
use database\_name; Seleccionar base de datos
drop database database\_name Borrar base de datos
create database database\_name Crear base de datos
DROP USER 'juan'@'localhost'; Borrar usuario
DROP USER 'juan'@'%'; Si el usuario se conecta desde cualquier host (%):
SELECT user, host FROM mysql.user; Ver usuarios
Modificar tablas a InnoDb
SELECT CONCAT('ALTER TABLE ', table\_name, ' ENGINE=InnoDB;')
FROM information\_schema.tables
WHERE table\_schema = 'nombre\_base\_datos' AND engine = 'MyISAM';
Luego ejecutas las sentencias generadas.
ALTER TABLE tabasunto ENGINE=InnoDB;
ALTER TABLE tabmodus ENGINE=InnoDB;
ALTER TABLE tabobjetos ENGINE=InnoDB;
ALTER TABLE taboficios ENGINE=InnoDB;
ALTER TABLE tabdetenpol ENGINE=InnoDB;
ALTER TABLE tabusers ENGINE=InnoDB;
ALTER TABLE tabregistro ENGINE=InnoDB;
Usar mysqldump en linux con Xampp
/opt/lampp/bin/mysqldump -u [usuario] -p [nombre\_base\_de\_datos] > [archivo\_salida.sql]
gzip ~/copia\_seguridad\_mi\_basedatos.sql Comprimir la copia de seguridad
export PATH=/opt/lampp/bin:$PATH Activar mysqldump en el PATH
mysqldump -u root -p mi\_basedatos > ~/copia\_seguridad.sql
PhpMyAdmin
Aumentar liminte de carga. Editar php.ini (/etc/php/ c:\xampp\php)
modificar los valores:
upload\_max\_filesize = 2000M
post\_max\_size = 2000M
max\_execution\_time = 300
max\_input\_time = 300
Reiniciar apache
sudo systemctl restart apache2 Linux
Poner en mayusculas / minusculas
UPDATE productos SET categoria = UPPER(categoria); (actualizar)
SELECT id, UPPER(nombre) AS nombre\_mayusculas FROM categorias; (solo visualizar)
UPDATE tabla SET columna = LOWER(columna);
UPDATE tabla SET columna = CONCAT(
UPPER(SUBSTRING(columna, 1, 1)), -- Primera letra en mayúscula
LOWER(SUBSTRING(columna, 2)) -- Resto en minúsculas
SELECT nombre, CONCAT(UPPER(SUBSTRING(nombre, 1, 1)), LOWER(SUBSTRING(nombre, 2))) AS nombre\_formateado
FROM categorias; (solo visualizacion select)
Guardar datos de una tabla a otra de la misma base de datos.
INSERT INTO tabla1 (apellido, nombre, sexo) SELECT apellido, nombre, sexo FROM tabla2;
Guardar datos de una tabla a otra de la misma base de datos.
INSERT INTO tabla1 (apellido, nombre, sexo) SELECT apellido, nombre, sexo FROM tabla2;
Guardar datos de una tabla a otra en diferente base de datos.
INSERT INTO db1.tabla (rut, apellido, nombre, sexo) SELECT rut, apellido, nombre, sexo FROM dbo2.tabla;
Insert into db1.tabla select \* from db2.tabla; (ambas tablas tienen que tener la misma estructura).
Actualizar datos tabla
UPDATE tabla\_nombre SET column1 = value1, column2 = value2 … WHERE condicion;
UPDATE tabla\_nombre SET column1 = value1, column2 = value2 … WHERE condicion LIKE %hola%;
Insertar datos en campo/s desde otra tabla
INSERT INTO tabDestino (column1, column2) SELECT columnX, columnY FROM tabOrigen;
SELECT
SELECT \* FROM tabregistro WHERE registro NOT LIKE '%/%' AND fechaent BETWEEN '2020-01-01' and '2020-12-31'
SELECT \* FROM tabregistro WHERE fechaent BETWEEN '2020-01-01' AND '2020-12-31'
UPDATE
UPDATE oeste\_oficios SET grupo = 'oeste';
UPDATE tabregistro SET procedencia = 'ODAC Central' WHERE procedencia = 'I.C.G.'; UPDATE centro\_detenpol SET padres = CONCAT (padre,' - ',madre);
UPDATE centro\_detenpol SET nacFecha = CONCAT (año,mes,dia);
UPDATE centro\_registro SET grupo = 'centro';
ACTUALIZAR O MODIFICAR LOS ID
SET @COUNT = 200000;
UPDATE tabregistro SET tabregistro.id = @count:= @count + 1;
ALTER TABLE tabregistro AUTO\_INCREMENT=1
ACTUALIZAR SQLITE AÑADIENDO EL AÑO SQLITE
UPDATE tab\_detenidos set atestado = atestado || '/' ||
SUBSTR(CAST(strftime('%Y',fecha\_hora) AS TEXT), 3, 2)
WHERE atestado NOT LIKE '%/' || SUBSTR(CAST(STRFTIME('%Y', fecha\_hora) AS TEXT), 3, 2);
QUITAR EL AÑO
UPDATE tab\_detenidos2 SET atestado = SUBSTR(atestado, 1, LENGTH(atestado) -3) WHERE atestado LIKE "%/%"
CONCAT
UPDATE tabregistro SET juzgado=CONCAT(tipoDoc,' ',operacion) where id='1'
En sqlite en lugar de CONCATE se utiliza ||
UPDATE funcionarios\_agp SET nombre\_comp = (NOMBRE || ' ' || APELLIDOS) where dni='11111111'
CONTAR NUMERO DE FILAS DE UNA TABLA
SELECT COUNT(\*) FROM contactos;
DUPLICAR TABLA
CREATE TABLE tabla\_nueva LIKE tabla\_original;
INSERTAR DATOS DE UNA TABLA A OTRA
INSERT INTO tabla\_nueva SELECT \* FROM tabla\_original;
DUPLICAR TABLA Y INSERTAR TODOS LOS REGISTROS
CREATE TABLE tabla\_nueva SELECT \* FROM tabla\_original;
Para sqlite:
CREATE TABLE nueva\_tabla AS SELECT \* FROM tabla\_original
VER REGISTROS DUPLICADOS
SELECT telefono FROM clientes GROUP BY telefono HAVING COUNT(\*)>1;
VER REGISTROS DUPLICADOS (CUENTA DE DUPLICADOS)
SELECT telefono, count(\*) FROM usuarios GROUP BY telefono HAVING COUNT(\*)>1;
BORRAR REGISTROS DUPLICADOS (TODOS)
DELETE FROM clientes WHERE telefono IN (SELECT telefono FROM clientes GROUP BY telefono HAVING COUNT(\*)>1)
BORRAR REGISTROS DUPLICADOS (DEJANDO UNO) repetir varias veces ya que eliminar uno de los duplicados por cada consulta ejecutada.
DELETE FROM contactos1 WHERE id IN (SELECT \* FROM (SELECT id FROM contactos1 GROUP BY nombre HAVING (COUNT(\*) > 1)) AS A);
BORRAR REGISTROS DUPLICADOS CREANDO TABLA TEMPORAL
CREATE TABLE TableA\_Verify AS SELECT DISTINCT \* FROM TableA;
DELETE FROM TableA;
INSERT INTO TableA SELECT \* FROM TableA\_Verify;
DROP TABLE TableA\_Verify;
BUSCAR LOS QUE ESTAN REPETIDOS
SELECT nie, count(\*) FROM identidades
GROUP BY nie
HAVING COUNT(\*)>1;
BORRAR REGISTROS REPETIDOS Y DEJAR SOLO UNO. SE ESCRIBE TODO SEGUIDO EN LA CONSULTA FUNCIONA COMPROBADO. OK
WITH repetidos AS (
SELECT MIN(id) as id, nie FROM identidades
GROUP BY nie
HAVING COUNT(\*)>1
)
DELETE FROM identidades
WHERE id not IN (
SELECT id FROM repetidos
) and nie IN (SELECT nie FROM repetidos) ;
SQLITE
SELECT atestado, delito, count(\*) FROM tab\_detenidos2
GROUP BY atestado
HAVING COUNT(\*)>1;
WITH repetidos AS (
SELECT MIN(id) as id, atestado FROM tab\_detenidos2
GROUP BY atestado
HAVING COUNT(\*)>1
)
DELETE FROM tab\_detenidos2
WHERE id not IN (
SELECT id FROM repetidos
) and atestado IN (SELECT atestado FROM repetidos) and delito <> "RECLAMACIÓN JUDICIAL";
DATOS REPETIDOS
SELECT u.\* FROM usuarios u WHERE telefono IN
` `( SELECT telefono FROM usuarios GROUP BY telefono HAVING COUNT(\*)>1 );
BUSCAR DUPLICADOS
SE LISTAN TODAS LAS IDENTIDADES QUE ESTAN REPETIDAS
SELECT tabla\_empleados.\* FROM tabla\_empleados
WHERE identidad IN (
SELECT identidad FROM tabla\_empleados
GROUP BY identidad
HAVING COUNT(\*)>1
) order by identidad DESC
NUMERO DE VECES QUE SE REPITE UNA IDENTIDAD
SELECT identidad, count(\*) FROM tabla\_empleados
GROUP BY identidad
HAVING COUNT(\*)>1;
SUMAR VALORES COLUMNAS (SUM)
SELECT SUM (column\_name) FROM table\_name WHERE condition;
SELECT SUM (cantidad) as total FROM ventas;
ELIMINAR SALTO DE LINEA con \n por <br>
UPDATE table SET gestiones = REPLACE(gestiones, '\n','<br>') WHERE id = '8072';
REPLACE
REPLACE(str, find\_string, replace\_with)
SELECT REPLACE(country,'K','SA') FROM publisher WHERE country='UK';
UPDATE tabregistro SET registro = REPLACE(registro, '/2020','/20');
CREATE TABLE inves.ciber SELECT \* FROM ciber.principal;
UPDATE ciber SET asunto1=CONCAT(asunto,' ',tipohecho)
UPDATE ciber SET implicados=CONCAT(denunciante,' DNI ',dni,' TLFN ',telefono,'
EMAIL ',email)
UPDATE ciber SET grupo ='ciber' WHERE grupo LIKE '%tecnologicos%';
Detenpol pasar año de fecha nacimiento a varchar antes de concatenar en fecha nacimiento
INSERTAR DATOS DE UNA TABLA A OTRA
INSERT INTO inves.tabdetenpol SELECT \* FROM bdcentro.centro\_detenpol;
INSERT INTO inves.taboficios SELECT \* FROM bdcentro.centro\_oficios;
INSERT INTO inves.tabobjetos SELECT \* FROM bdcentro.centro\_objetos;
INSERT INTO inves.tabregistro SELECT \* FROM bdcentro.centro\_registro;
UPDATE tabregistro SET registro = CONCAT(registro,'/20') where id = '6976'
INSERT INTO tabregistro SELECT \* FROM ciber;
INSERT INTO tabregistro SELECT \* FROM oeste\_registro;
iNSERT INTO tabdetenpol SELECT \* FROM ufam\_detenpol;
update ufam\_oficios set grupo = 'ufam';
SQLITE COPIAR TABLA DE UNA BD A OTRA BD
1. Archivo / Anexar base de datos
Tambien se puede hacer con ATTACH DATABASE 'ruta\_a\_la\_base\_de\_datos\_origen.sqlite' AS origen
1. CREATE TABLE tab\_desempeño AS SELECT \* FROM data.tab\_desempeño
ACTUALIZAR TELEFONOS
\## MySQL ###
UPDATE tabcontactos
SET telefono1 = CONCAT(
SUBSTRING(telefono1, 1, 3), ' ',
SUBSTRING(telefono1, 4, 3), ' ',
SUBSTRING(telefono1, 7, 3)
)
WHERE LENGTH(telefono1) = 9;
\## SQLITE ##
UPDATE tabcontactos
SET telefono1 = substr(telefono1, 1, 3) || ' ' || substr(telefono1, 4, 3) || ' ' || substr(telefono1, 7, 3)
WHERE length(telefono1) = 9;
Importar SQL desde XAMPP
Si trabajamos con un servidor local como XAMPP y necesitamos importar una gran base de datos para trabajar desde nuestro PC, podemos realizar la misma importación desde un terminal mySQL.
Posicionarnos en la ruta donde se encuentra el servidor mySQL en XAMPP:
/opt/lampp/bin/
Dentro de esta ruta tecleamos la orden:
./mysql -u root -p base\_de\_datos (se abre terminal mysql en la base seleccionada)
source /home/jesus/backup.sql
CONSULTAS APLICACION INVENTARIO
SELECT
p.id,
p.nombre,
p.precio,
m.cantidad,
(p.precio \* m.cantidad) AS precio\_total
FROM
productos p
JOIN
movimientos m ON p.id = m.producto\_id;
PRECIO TOTAL DE TODAS LAS UNIDADES VENDIDAS
SELECT
SUM(a.precio \* v.unidades\_vendidas) AS precio\_total\_general
FROM
articulos a
JOIN
ventas v ON a.articulo = v.articulo;
FITRAR ENTRE FECHAS
SELECT
1. articulo,
1. precio,
SUM(v.unidades\_vendidas) AS unidades\_vendidas\_periodo,
SUM(a.precio \* v.unidades\_vendidas) AS precio\_total\_periodo
FROM
articulos a
JOIN
ventas v ON a.articulo = v.articulo
WHERE
v.fecha\_venta BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY
1. articulo, a.precio;
TOTAL GENERAL FILTRAR ENTRE FECHAS
SELECT
SUM(a.precio \* v.unidades\_vendidas) AS precio\_total\_periodo
FROM
articulos a
JOIN
ventas v ON a.articulo = v.articulo
WHERE
v.fecha\_venta BETWEEN '2023-01-01' AND '2023-12-31';
\---------------------------
CONSULTA BASE\_D
SELECT grupo, COUNT(\*) FROM `tabregistro` WHERE grupo = 'centro' AND fechaEnt BETWEEN '2025-01-01' AND '2025-09-25';
SELECT grupo, COUNT(\*) FROM `tabregistro` WHERE grupo = 'norte' AND fechaEnt BETWEEN '2025-01-01' AND '2025-09-25';
SELECT grupo, COUNT(\*) FROM `tabregistro` WHERE grupo = 'este' AND fechaEnt BETWEEN '2025-01-01' AND '2025-09-25';
SELECT grupo, COUNT(\*) FROM `tabregistro` WHERE grupo = 'oeste' AND fechaEnt BETWEEN '2025-01-01' AND '2025-09-25';
SELECT grupo, COUNT(\*) FROM taboficios WHERE grupo = 'centro' AND fecha BETWEEN '2025-01-01' AND '2025-09-25';
SELECT grupo, COUNT(\*) FROM taboficios WHERE grupo = 'norte' fecha BETWEEN '2025-01-01' AND '2025-09-25';
SELECT grupo, COUNT(\*) FROM taboficios WHERE grupo = 'este' AND fecha BETWEEN '2025-01-01' AND '2025-09-25';
SELECT grupo, COUNT(\*) FROM taboficios WHERE grupo = 'oeste' AND fecha BETWEEN '2025-01-01' AND '2025-09-25';
CENTRO 4083 107
NORTE 3841 677
ESTE 1828 207
OESTE 6500 210
\-------------------------------
+155
View File
@@ -0,0 +1,155 @@
INSTALAR NEXTCLOUD UBUNTU-SERVER CON ZIP OFICIAL (latest.zip)
Instala Apache, PHP y MySQL:
sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-gd php-json php-xml php-curl php-zip php-mbstring php-bcmath unzip -y
Configura la base de datos:
sudo mysql
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password123';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Descarga Nextcloud:
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo mv nextcloud /var/www/html/
sudo chown -R www-data:www-data /var/www/html/nextcloud
Crea archivo de configuración en Apache:
sudo nano /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
ServerAdmin admin@localhost
DocumentRoot /var/www/html/nextcloud
ServerName localhost.local
<Directory /var/www/html/nextcloud/>
Require all granted
AllowOverride All
Options +FollowSymlinks
</Directory>
ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
</VirtualHost>
Activa el sitio y módulos necesarios:
sudo a2ensite nextcloud.conf
sudo a2enmod rewrite headers env dir mime
sudo systemctl reload apache2
Abre el navegador y escribe http://IP_DEL_SERVIDOR/nextcloud
BACKUP nextcloud
sudo -E -u www-data php occ maintenance:mode --on
rsync -Aavx nextcloud/ nextcloud-dirbkp_`date +"%Y%m%d"`/
mysqldump --single-transaction --no-tablespaces -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
mysqldump --single-transaction --default-character-set=utf8mb4 -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
sudo -E -u www-data php occ maintenance:mode --off
RESTORE nextcloud
rsync -Aax nextcloud-dirbkp/ nextcloud/
mysql -h [server] -u [username] -p[password] -e "DROP DATABASE nextcloud"
mysql -h [server] -u [username] -p[password] -e "CREATE DATABASE nextcloud"
utf8
mysql -h [server] -u [username] -p[password] -e "DROP DATABASE nextcloud"
mysql -h [server] -u [username] -p[password] -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
mysql -h [server] -u [username] -p[password] [db_name] < nextcloud-sqlbkp.bak
Copiar archivos del servidor ubuntu a nextcloud
sudo cp -R /ruta/de/tus/archivos/* /var/www/html/nextcloud/data/<tu_usuario>/files/Destino/
sudo -u www-data php /var/www/html/nextcloud/occ files:scan --path="<tu_usuario>/files/Destino"
Nota para o siguiente: Ha funcionado sin crear directorio destino ni dar permisos.
No copies archivos cuando el usuario esté accediendo a Nextcloud; podrías corromper datos.
Asegúrate de que el directorio de destino (Destino) exista previamente, o créalo con:
mkdir /var/www/nextcloud/data/<tu_usuario>/files/Destino
chown -R www-data:www-data /var/www/nextcloud/data/<tu_usuario>/files/Destino
Eliminar bloqueos base de datos de Nextcloud
Nextcloud a veces deja bloqueos en la base de datos que impiden operaciones de archivos.
sudo mysql -u root -p
Selecciona base datos Nextcloud
USE nextcloud;
DELETE FROM oc_file_locks WHERE 1;
EXIT;
---------------------------------------
INSTALACION SNAP
sudo snap install nextcloud
1. BACKUP-RESTORE USANDO SNAP SAVE-RESTORE
https://github.com/nextcloud-snap/nextcloud-snap/wiki/Backup-and-Restore
Backup.
stop Nextcloud snap sudo snap stop nextcloud
save Nextcloud snap sudo snap save nextcloud
start Nextcloud snap sudo snap start nextcloud
copy/move snapshot (*.zip) in /var/lib/snapd/snapshots to wherever
Restore
copy/move snapshot (*.zip) to /var/lib/snapd/snapshots
discover snapshot-id using snap saved
restore snapshot sudo snap restore <snapshot-id>
Deleting snap snapshots
Procedure
discover snapshot-id using snap saved
delete snapshot sudo snap forget <snapshot-id>
2. BACKUP-RESTORE USANDO NEXTCLOUD.EXPORT / NEXTCLOUD.IMPORT
https://github.com/nextcloud-snap/nextcloud-snap/wiki/How-to-backup-your-instance
Exportar/backup
nextcloud.export
Se guarda una carpeta con fecha y hora (ej:20190121-153921,) dentro de /var/snap/nextcloud/common/backups/.
Se puede crear un tar o tar.gz (comprimido)
sudo tar -czf 20190121-153921_nextcloud-backup.tar.gz /var/snap/nextcloud/common/backups/20190121-153921
Importar/restore
Extraer el archivo tar o tar.gz
sudo tar -xvf 20190121-153921_nextcloud-backup.tar.gz
Colocar la carpeta extraida (nombre fecha y hora) en:
/var/snap/nextcloud/common o /var/snap/nextcloud/current/
sudo nextcloud.import path/to/backup/dir.**
sudo mv 20190121-153921_nextcloud-backup.tar /var/snap/nextcloud/current/
sudo chown -R root:root /var/snap/nextcloud/current/20190121-153921/
Opciones:
-h: Display this help message
-a: Include the (non-default) apps
-b: Include the database
-c: Include the config
-d: Include the data (can be quite large)
Q. Can exporting specify the data directory?
A. Not directly, but you should be able to use a symlink. For example, creating a symlink from the data directory to /var/snap/nextcloud/common/nextcloud/data
Q. Can I somehow export/import my HTTPS certs?
A. Yes, everything related to them is stored in the /var/snap/nextcloud/current/certs directory, so copying it and preserving its permissions and owner works.
Borrar bloqueos de nextcloud instalado con docker
docker exec -it nextcloud_app php occ maintenance:mode --on
docker exec -it nextcloud_db mysql -u nextcloud -pnextcloudpass nextcloud -e "DELETE FROM oc_file_locks;"
docker exec -it nextcloud_app php occ maintenance:mode --off
docker compose restart
+109
View File
@@ -0,0 +1,109 @@
AYUDA PIP
\=========
sudo apt install python3-pip PIP Instalación linux
python3 -m pip --version Versión pip
pip list Lista paquetes pip
pip show package\_name Info de un paquete
pip list | greb nombre Buscar paquete linux
pip list | findstr nombre Buscar paquete windows
En consola python
import nombre\_paquete - Si no esta lanzara error
pip install Pillow==9.5.0 Instalar versión paquete
INSTALAR ARCHIVOS DESCARGADOS
pip install nombrepaquete --no-index --find-links=. # un paquete concreto
Tambien se puede hacer así:
python -m pip install nombrepaquete --no-index --find-links=.
pip install --no-index --find-links=paquetes\_offline -r requirements.txt # varios paquetes numerados en archivo requirements
pip install --no-index --find-links=. -r requirements.txt #desde la carpeta en la que estan
Si necesitas instalar virtualenv en un entorno sin conexión a internet, deberás preparar todos los archivos necesarios con anticipación. Aquí te explico los pasos para hacerlo:
Paso 1: Descargar los paquetes necesarios
Primero, en una máquina con acceso a internet, descarga virtualenv y sus dependencias. Para ello, puedes usar el siguiente comando:
pip download virtualenv
pip download pip setuptools # Esto descargará los archivos necesarios para instalar pip y setuptools.
Descargar varios paquetes
pip download pyperclip==1.8.2 requests==2.28.1 numpy==1.21.2 -d paquetes\_offline
Ejecuta el siguiente comando para descargar los paquetes y sus dependencias en un directorio específico (paquetes\_offline en este ejemplo):
pip download -r requirements.txt -d paquetes\_offline
pip download -r requirements.txt -d # desde la misma carpeta
Ej:
requirements.txt:
pyperclip==1.8.2
requests==2.28.1
numpy==1.21.2
Este comando descargará el archivo .whl o .tar.gz de virtualenv junto con todas sus dependencias en el directorio actual.
Paso 3: Transferir los archivos al entorno sin conexión
Copia todos los archivos descargados a un dispositivo USB, una carpeta compartida, o cualquier medio de transferencia para llevarlos a la máquina sin conexión.
Paso 4: Instalar pip, setuptools, y virtualenv
En la máquina sin conexión, navega hasta el directorio donde has copiado los archivos y ejecuta los siguientes comandos para instalar pip, setuptools, y virtualenv:
Instalar pip y setuptools:
python -m pip install pip setuptools --no-index --find-links=.
Instalar virtualenv:
python -m pip install virtualenv --no-index --find-links=.
Archivos necesarios
Para resumir, estos son los archivos que debes tener en tu máquina sin conexión:
Paquete virtualenv: virtualenv-X.X.X-py2.py3-none-any.whl o virtualenv-X.X.X.tar.gz
Dependencias de virtualenv: Cualquier archivo .whl o .tar.gz que se descargó como dependencia.
pip y setuptools: Paquetes pip-X.X.X-py2.py3-none-any.whl y setuptools-X.X.X-py2.py3-none-any.whl o sus equivalentes .tar.gz.
Nota importante
Compatibilidad: Asegúrate de que todos los archivos que descargues sean compatibles con la versión de Python instalada en la máquina sin conexión.
Instalación offline de dependencias: Usando --no-index --find-links=. en los comandos de instalación, te aseguras de que pip utilice exclusivamente los archivos locales y no intente buscar en PyPI.
Guardar los paquetes instalados
pip freeze > requirements.txt
Instalar los paquetes en un entorno
pip install -r requirements.txt
File diff suppressed because it is too large Load Diff
+253
View File
@@ -0,0 +1,253 @@
AYUDA PYTHON
\============
INSTALAR ENTORNO VIRTUAL EN LINUX
sudo apt install python3-venv (instalacion previa Linux)
INSTALAR ENTORNO VIRTUAL UTILIZANDO virtualenv
Windows pip install virtualenv
Linux sudo apt install virtualenv
CREAR ENTRONO VIRTUAL
windows/linux python -m venv <folder\_name>
osx/linux virtualenv <folder\_name>
Activar entorno virtual
cmd.exe <folder\_name>\Scripts\Activate.bat
Powershell -VSCode <folder\_name>\Scripts\Activate.ps1
Bash shell ../<folder\_name>/Scripts/activate
OSX/Linux (bash) source <folder\_name>/bin/activate
Desactivar entorno virtual
deactivate
Actualizar rutas y dependencias de entorno virtual
python -m venv venv --upgrade
python -m venv venv --upgrade-deps
Instalar paquetes en entorno virtual
Individual pip install nombre\_paquete
Lista de paquetes pip install -r requirements.txt
pip install customtkinter pyperclip tkcalendar Pillow python-docx #instalar varios paquetes
INSTALAR ARCHIVOS DESCARGADOS
pip install nombrepaquete --no-index --find-links=. # un paquete concreto
Tambien se puede hacer así:
python -m pip install nombrepaquete --no-index --find-links=.
pip install --no-index --find-links=paquetes\_offline -r requirements.txt # varios paquetes numerados en archivo requirements
pip install --no-index --find-links=. -r requirements.txt #desde la carpeta en la que estan
Si necesitas instalar virtualenv en un entorno sin conexión a internet, deberás preparar todos los archivos necesarios con anticipación. Aquí te explico los pasos para hacerlo:
Paso 1: Descargar los paquetes necesarios
Primero, en una máquina con acceso a internet, descarga virtualenv y sus dependencias. Para ello, puedes usar el siguiente comando:
pip download virtualenv
pip download pip setuptools # Esto descargará los archivos necesarios para instalar pip y setuptools.
Descargar varios paquetes
pip download pyperclip==1.8.2 requests==2.28.1 numpy==1.21.2 -d paquetes\_offline
Ejecuta el siguiente comando para descargar los paquetes y sus dependencias en un directorio específico (paquetes\_offline en este ejemplo):
pip download -r requirements.txt -d paquetes\_offline
pip download -r requirements.txt -d # desde la misma carpeta
Ej:
requirements.txt:
pyperclip==1.8.2
requests==2.28.1
numpy==1.21.2
Este comando descargará el archivo .whl o .tar.gz de virtualenv junto con todas sus dependencias en el directorio actual.
Paso 3: Transferir los archivos al entorno sin conexión
Copia todos los archivos descargados a un dispositivo USB, una carpeta compartida, o cualquier medio de transferencia para llevarlos a la máquina sin conexión.
Paso 4: Instalar pip, setuptools, y virtualenv
En la máquina sin conexión, navega hasta el directorio donde has copiado los archivos y ejecuta los siguientes comandos para instalar pip, setuptools, y virtualenv:
Instalar pip y setuptools:
python -m pip install pip setuptools --no-index --find-links=.
Instalar virtualenv:
python -m pip install virtualenv --no-index --find-links=.
Archivos necesarios
Para resumir, estos son los archivos que debes tener en tu máquina sin conexión:
Paquete virtualenv: virtualenv-X.X.X-py2.py3-none-any.whl o virtualenv-X.X.X.tar.gz
Dependencias de virtualenv: Cualquier archivo .whl o .tar.gz que se descargó como dependencia.
pip y setuptools: Paquetes pip-X.X.X-py2.py3-none-any.whl y setuptools-X.X.X-py2.py3-none-any.whl o sus equivalentes .tar.gz.
Nota importante
Compatibilidad: Asegúrate de que todos los archivos que descargues sean compatibles con la versión de Python instalada en la máquina sin conexión.
Instalación offline de dependencias: Usando --no-index --find-links=. en los comandos de instalación, te aseguras de que pip utilice exclusivamente los archivos locales y no intente buscar en PyPI.
Abrir idle python en un entorno virtual:
python m idlelib.idle
Python m idlelib.idle filename
PIP
sudo apt install python3-pip --upgrade # instalar o actualizar pip en linux
pip install nombre\_paquete (instalar paquetes)
pip --version (version de pip instalada)
pip list (listar paquetes instalados)
pip list | grep nombre\_del\_paquete (buscar un paquete especifico en la lista)
pip show package\_name (info de un paquete, saber si esta instalado)
pip install Pillow==9.5.0 (para una version concreta de un paquete)
python3 -m pip install --upgrade pip (actualizar pip linux)
python -m pip install --upgrade pip (actualizar pip windows)
pip install python-docx (para python3) no pip install docx (deprecated)
pip install -r requirements.txt
pip install -r requirements.txt -d (nombredirectorio)
* Forzar instalacion de paquetes pip:
pip install xyz --break-system-packages
script Python para saber si un paquete esta instalado:
try:
import nombre\_del\_paquete
print("El paquete está instalado.")
except ModuleNotFoundError:
print("El paquete no está instalado.")
FLET falta libmpv.so.1
error while loading shared libraries: libmpv.so.1: cannot open shared object file: No such file or directory
sudo apt update
sudo apt install libmpv-dev libmpv2
localizar los paquetes instalados: locate libmpv.so
Despues una opcion de ambas (dependiendo paquete):
1. - sudo ln -s /usr/lib/x86\_64-linux-gnu/libmpv.so /usr/lib/libmpv.so.1
1. - sudo ln -s /usr/lib/x86\_64-linux-gnu/libmpv.so.2 /usr/lib/x86\_64-linux-gnu/libmpv.so.1
PyInstaller
pip install pyinstaller
pyinstaller --onefile --noconsole script.py
--onefile # un archivo
--noconsole - # sin abrir terminal/consola
--onedir # crea aplicación en un directorio
--icon=python.ico # inserta el icono de la aplicacion
EJECUTAR desde terminal archivo Python (linux)
#!/usr/bin/env python3
Para un entorno virtual venv
#!/ruta/a/tu/virtualenv/bin/python
Asegúrese de que el archivo sea ejecutable.
chmod +x nombre\_del\_archivo.py
./nombre\_del\_archivo.py
Poner linea vertical en VsCode para python
archivo settings.json (editar, buscar con f1)
añadir:
"[python]": {
"editor.rulers": [
{
"column": 100,
"color": "#8a8a8a"
}
]
}
+455
View File
@@ -0,0 +1,455 @@
# AYUDA UBUNTU SERVER
**LISTAR DISCOS/ESPACIO/DIRECTORIOS**
lsblk -f
sudo fdisk -l
df -h
---
**INFO IP**
ip a Saber la ip del equipo o maquina virtual
hostname -I http://192.168.18.235/
---
**MONTAR/DESMONTAR USB**
sudo mkdir -p /mnt/mi_usb # Cambia "mi_usb" por el nombre que prefieras
sudo mount /dev/sdb1 /mnt/mi_usb # Reemplaza "/dev/sdb1" con tu dispositivo
sudo mount -t ntfs-3g /dev/sdb1 /mnt/mi_usb # Para NTFS
sudo mount -t vfat /dev/sdb1 /mnt/mi_usb # Para FAT32
sudo mount -o rw /dev/sdb1 /mnt/mi_usb Si el dispositivo está en modo solo lectura, intenta montarlo con permisos de escritura
sudo apt install ntfs-3g Para dispositivos NTFS, ntfs-3g
sudo umount /dev/sdb1
sudo umount /mnt/mi_usb
Montaje automático al recinicar (opcional)
sudo nano /etc/fstab
UUID=.... /mnt/mi_usb ntfs-3g defaults 0 0
UUID=.... /mnt/externo ext4 defaults,nofail 0 2
Para obtener el UUID del dispositivo, usa:
sudo blkid
sudo blkid /dev/sdb1
systemctl daemon-reload (recargar informacion discos fstab)
---
**INSTALAR APACHE2**
sudo apt install apache2 -y
sudo ufw allow 'Apache Full' permitir trafico en el firewall
sudo systemctl status apache2 verificar que apache esta funcionando
http://<IP_DEL_SERVIDOR> Probar en el navegador
---
**INSTALAR NGINX**
sudo apt install nginx -y
sudo ufw allow 'Nginx Full'
http://<IP_DEL_SERVIDOR>
---
**INSTALAR MYSQL**
sudo apt install mysql-server -y
sudo mysql_secure_installation Asegurar instalacion de mysql, "yes a todas las opciones"
sudo systemctl status mysql
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0 Cambiar 127.0.0.1 para conectarse desde otro dispositivos de la red (no solo localhost)
Crear usuario Mysql para aceder desde otro equipo
CREATE USER 'usuario_remoto'@'%' IDENTIFIED BY 'miclave123';
GRANT ALL PRIVILEGES ON *.* TO 'usuario_remoto'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
Si prefieres restringir a una IP específica de tu red local (por ejemplo, 192.168.1.100), reemplaza '%' por '192.168.1.100'.
sudo systemctl restart mysql Reiniciar mysql
sudo mysql
CREATE DATABASE mi_base_de_datos; Crear base de datos de prueba
EXIT;
SELECT User, Host FROM mysql.user; Ver usuarios existentes
Eliminar usuario
DROP USER 'nombre_usuario'@'host';
FLUSH PRIVILEGES;
---
**INSTALAR MARIADB**
sudo apt install mariadb-server -y
---
**INSTALAR PHP**
sudo apt install php libapache2-mod-php php-mysql -y Instalar php y modulos necesarios
php -v Verificar instalacion php
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php crea archivo de prueba en raiz servidor web
http://<IP_DEL_SERVIDOR>/info.php verificar instalacion
sudo rm /var/www/html/info.php eliminar archivo de prueba
/var/www/html/ Directorio apache2 para aplicaciones
---
**INSTALAR PHPMYADMIN**
sudo apt install phpmyadmin -y
Elige Apache cuando pregunte el servidor web (usa espacio para seleccionar).
Responde Sí a la configuración de la base de datos con dbconfig-common.
Elige una contraseña para el usuario phpmyadmin.
Habilita phpMyAdmin en Apache (Si no se habilita automáticamente):
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin
sudo systemctl reload apache2
http://<IP_DEL_SERVIDOR>/phpmyadmin Acceder a phpmyadmin
---
**WORDPRESS**
Crear base de datos (Linea de comandos o desde phpmyadmin)
sudo mysql -u root -p
CREATE DATABASE wordpress;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'tupassword';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
sudo apt install php libapache2-mod-php php-mysql -y
cd /tmp wget https://wordpress.org/latest.tar.gz Descargar WordPress
tar -xvzf latest.tar.gz Extraer archivo
sudo mv wordpress /var/www/html/ mover directorio WordPress
sudo chown -R www-data:www-data /var/www/html/wordpress Configurar permisos
sudo chmod -R 755 /var/www/html/wordpress
sudo cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php Crear archivo configuracion
sudo nano /var/www/html/wordpress/wp-config.php Editar archivo configuracion
define('DB_NAME', 'wordpress');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'tu_contraseña_segura');
define('DB_HOST', 'localhost');
sudo nano /etc/apache2/sites-available/wordpress.conf Configurar apache para WordPress
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html/wordpress
<Directory /var/www/html/wordpress>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
sudo a2ensite wordpress.conf Habilita sitio y modulo rewrite
sudo a2enmod rewrite
http://localhost/wordpress Completar instalacion de WordPress
---
**SSH**
sudo apt install openssh-server -y Instalar ssh
sudo systemctl status ssh Estado de ssh
sudo systemctl start ssh Activar ssh
sudo systemctl enable ssh Iniciar automáticamente con el sistema
sudo systemctl restart apache2 Reiniciar apache
sudo ufw allow OpenSSH Permitir ssh en el firewall
sudo ufw enable
ssh usuario@192.168.1.100 Conectarte desde otro equipo
PuTTY Host name:ip servidor aplicación para windows
ssh-keygen Configurar acceso sin contraseña con clave SSH
ssh-copy-id usuario@192.168.1.100
---
**SCP (SECURE COPY)**
scp -r "C:\\ruta\\de\\la\\carpeta" usuario@ip_del_servidor:/home1 Windows
scp -r /ruta/local/carpeta usuario@ip_del_servidor:/home1 WSL
scp -r /mnt/c/Users/usuario/Desktop/micarpeta ubuntu@192.168.1.100:/home1 Ejemplo WSL
scp -r /ruta/carpeta usuario_windows@192.168.1.50:/ruta/de/destino Ubuntu server a Windows
WinSCP Entorno grafico windows
Dar permisos temporales de root (evita usar sudo cada vez)
sudo chmod -R 775 /home1
---
**CAMBIAR COLORES TERMINAL**
echo $LS_COLORS Ver configuracion de colores
export LS_COLORS="$LS_COLORS:di=36" Modificar LS_COLORS azul claro
export LS_COLORS="$LS_COLORS:di=94" Azul brillante
echo 'export LS_COLORS="$LS_COLORS:di=36"' >> ~/.bashrc Hacer el cambio permanente
source ~/.bashrc Recargar el archivo
---
**Instalar LAMP - Phpmyadmin**
sudo apt update && sudo apt upgrade
sudo apt install apache2
sudo apt install mysql-server
sudo mysql_secure_installation
sudo apt install php libapache2-mod-php php-mysql php-sqlite3
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
sudo rm /var/www/html/info.php
sudo systemctl restart apache2
sudo apt install phpmyadmin
seleccionar apache - aceptar dbconfig-common
sudo apt install mysql-workbench
Crear usuario phpmyadmin para acceder:
sudo mysql Entrar mysql
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'clave_segura';
GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON nombre_basedatos.* TO 'usuario'@'localhost'; # Acceso a una sola base datos
FLUSH PRIVILEGES; Aplicar canbios
EXIT;
http://localhost/phpmyadmin Iniciar sesion en phpmyadmin
Script automatizado
#!/bin/bash
echo "==> Actualizando sistema..."
sudo apt update && sudo apt upgrade -y
echo "==> Instalando Apache..."
sudo apt install apache2 -y
echo "==> Instalando MySQL Server..."
sudo apt install mysql-server -y
echo "==> Ejecutando configuración segura de MySQL..."
sudo mysql_secure_installation
echo "==> Instalando PHP y módulos necesarios..."
sudo apt install php libapache2-mod-php php-mysql -y
echo "==> Reiniciando Apache..."
sudo systemctl restart apache2
echo "==> Instalando phpMyAdmin..."
sudo apt install phpmyadmin -y
echo "==> Habilitando phpMyAdmin en Apache..."
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin
sudo systemctl reload apache2
echo "==> Instalando MySQL Workbench..."
sudo apt install mysql-workbench -y
echo "==> Instalación completada."
echo "Puedes acceder a phpMyAdmin en: http://localhost/phpmyadmin"
Instrucciones Script
instalar_lamp_phpmyadmin_workbench.sh
chmod +x instalar_lamp_phpmyadmin_workbench.sh Hacer ejecutable
./instalar_lamp_phpmyadmin_workbench.sh Ejecutar script
---
Acceso a mysql / mariadb de ubuntu server
1. Cambiar ip de acceso (localhost a cualquier ip de otro equipo) En mysql: sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf En mariaDb; sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf Cambiar linea: bind-address = 127.0.0.1 por bind-address = 0.0.0.0 Reiniciar mysql / mariaDb sudo systemctl restart mysql / mariadb
2.Dar permisos al usuario MySql (%)
sudo mysql -u root -p
Nuevo usuario
CREATE USER 'usuario'@'%' IDENTIFIED BY 'tu_contraseña';
GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Con usuario ya creado
GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%' IDENTIFIED BY 'tu_contraseña';
1. Abrir el puerto 3306 en el firewall (si está activo)
sudo ufw allow 3306/tcp
sudo ufw reload
2. Conectarte desde Workbench, heidisql, etc...
---
**MONTAR USB EXTERNO Y PERMISOS (por ejemplo transmission)**
Sistema normal
sudo fdisk -l identifica/muestra discos conectados
sudo mkdir -p /mnt/mi_usb # Crear punto de montaje (directorio)
sudo mount -t ntfs-3g /dev/sdb1 /mnt/mi_usb # Para NTFS
sudo mount -t vfat /dev/sdb1 /mnt/mi_usb # Para FAT32
df -h o lsblk -f # verificar
sudo umount /dev/sdb1 o sudo umount /mnt/mi_usb # desmontar
sudo blkid # identificar UUID del dispositivo
sudo blkid /dev/sdb1
sudo chown -R root:debian-transmission /mnt/wd
sudo chmod -R 775 /mnt/wd
sudo chmod g+s /mnt/wd
sudo systemctl daemon-reexec
sudo mount /mnt/wd
sudo nano /etc/fstab Editar archivo y añadir unidad para montaje automatico al iniciar
UUID=XXXX-XXXX /mnt/mi_usb ntfs defaults 0 0
UUID=ABCD-1234 /mnt/toshiba ntfs defaults,uid=debian-transmission,gid=debian-transmission,umask=0022 0 0 unidad ntfs, añadir linea para acceso de transmission
UUID=XXXX-XXXX /mnt/toshiba ext4 defaults 0 2 Unidad ext4
---
**INSTALAR TRANSMISSION**
sudo apt update
sudo apt install transmission-daemon
sudo systemctl stop transmission-daemon
sudo nano /etc/transmission-daemon/settings.json
"rpc-enabled": true,
"rpc-bind-address": "0.0.0.0",
"rpc-whitelist-enabled": false,
"rpc-username": "admin",
"rpc-password": "tu_contraseña",
sudo nano/etc/apparmor.d/transmission #modificar la siguiente linea (evita que se desconecte automaticamente):
\-profile transmission-daemon /usr/bin/transmission-daemon flags=(complain) {
+profile transmission-daemon /usr/bin/transmission-daemon flags=(complain,attach_disconnected) {
sudo apparmor_parser -r -W -T /etc/apparmor.d/transmission
sudo systemctl start transmission-daemon
http://<ip-del-servidor>:9091
---
**INSTALAR PLEX MEDIA SERVER**
Descargar el paquete de Plex: Ve a https://www.plex.tv/media-server-downloads/ y copia el enlace del .deb para Ubuntu.
wget https://downloads.plex.tv/plex-media-server-new/...
sudo dpkg -i plexmediaserver\_*.deb
sudo systemctl enable plexmediaserver
sudo systemctl start plexmediaserver
http://<ip-del-servidor>:32400/web
---
**INSTALAR GITEA**
sudo snap install gitea
---
**INSTALAR NEXTCLOUD**
Instala Apache, PHP y MySQL:
sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-gd php-json php-xml php-curl php-zip php-mbstring php-bcmath unzip -y
Configura la base de datos:
sudo mysql
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'tupasswordsegura';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Descarga Nextcloud:
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo mv nextcloud /var/www/html/
sudo chown -R www-data:www-data /var/www/html/nextcloud
Crea archivo de configuración en Apache:
sudo nano /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
ServerAdmin admin@localhost
DocumentRoot /var/www/html/nextcloud
ServerName nextcloud.local
```
<Directory /var/www/html/nextcloud/>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
```
</VirtualHost>
Activa el sitio y módulos necesarios:
sudo a2ensite nextcloud.conf
sudo a2enmod rewrite headers env dir mime
sudo systemctl reload apache2
Abre el navegador y escribe http://IP_DEL_SERVIDOR/nextcloud
BACKUP nextcloud
sudo -E -u www-data php occ maintenance:mode --on
rsync -Aavx nextcloud/ nextcloud-dirbkp\_`date +"%Y%m%d"`/
mysqldump --single-transaction --no-tablespaces -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp\_`date +"%Y%m%d"`.bak
mysqldump --single-transaction --default-character-set=utf8mb4 -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp\_`date +"%Y%m%d"`.bak
sudo -E -u www-data php occ maintenance:mode --off
RESTORE nextcloud
rsync -Aax nextcloud-dirbkp/ nextcloud/
mysql -h [server] -u [username] -p[password] -e "DROP DATABASE nextcloud"
mysql -h [server] -u [username] -p[password] -e "CREATE DATABASE nextcloud"
utf8
mysql -h [server] -u [username] -p[password] -e "DROP DATABASE nextcloud"
mysql -h [server] -u [username] -p[password] -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
mysql -h [server] -u [username] -p[password] [db_name] < nextcloud-sqlbkp.bak
Copiar archivos del servidor ubuntu a nextcloud
sudo cp -R /ruta/de/tus/archivos/* /var/www/nextcloud/data/<tu_usuario>/files/Destino/
sudo -u www-data php /var/www/nextcloud/occ files:scan --path="<tu_usuario>/files/Destino"
Nota para lo siguiente: Ha funcionado sin crear directorio destino ni dar permisos.
No copies archivos cuando el usuario esté accediendo a Nextcloud; podrías corromper datos.
Asegúrate de que el directorio de destino (Destino) exista previamente, o créalo con:
mkdir /var/www/nextcloud/data/<tu_usuario>/files/Destino
chown -R www-data:www-data /var/www/nextcloud/data/<tu_usuario>/files/Destino
Eliminar bloqueos base de datos de Nextcloud
Nextcloud a veces deja bloqueos en la base de datos que impiden operaciones de archivos.
sudo mysql -u root -p
Selecciona base datos Nextcloud
USE nextcloud;
DELETE FROM oc_file_locks WHERE 1;
EXIT;
---
**SOLUCION PROBLEMAS DNS-INTERNET DE CLOUDFLARE TUNNEL - TAILSCALE**
Archivo que controla las dns es:
/etc/resolv.conf
Tiene que estar asi para que funcione dns de cloudflare:
cat /etc/resolv.conf
nameserver 1.1.1.1
nameserver 8.8.8.8
(reiniciar el servicio, a veces no necesario):
sudo systemctl restart systemd-resolved
Al arrancar tailsclale hay que indicar que no use las dns de tailscale, en la terminal o tambien en la consola web de tailscale donde salen todos los dipositivos que la utilizan, dejando que ubuntu server es el exit node:
sudo tailscale up --accept-dns=false --advertise-exit-node
---
**UBUNTU SERVER ACCESOS**
192.168.18.235
ubuntu server     jesus / ???
phpmyadmin    phpmyadmin / Password123!
mysql           admin / bitr2d2c3p0
WordPress          admin / bitr2d2c3p0
            bd wordpress wpuser - Password123!
https://xiberus.com/wordpress/wp-admin
Gitea            192.168.18.235:3000
                  admin / Codibyte1@gitea
Plex http://<ip-del-servidor>:32400/web
Transmission     192.168.18.235:9091
                   user: admin - Codibyte1@
nextcloud       192.168.18.235:9091/nextcloud
                 bd mysql
                 base:nextcloud user:nextclouduser pass:password123
                    administrador - user:admin pass: bitr2d2c3p0
+128
View File
@@ -0,0 +1,128 @@
**Docker Compose**
```
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vw.domain.tld"
volumes:
- ./vw-data/:/data/
ports:
- 127.0.0.1:8000:80
```
**Docker CLI**
```
docker pull vaultwarden/server:latest
docker run --detach --name vaultwarden \
--env DOMAIN="https://vw.domain.tld" \
--volume /vw-data/:/data/ \
--restart unless-stopped \
--publish 127.0.0.1:8000:80 \
vaultwarden/server:latest
```
🔹 **backup**
cd /opt/vaultwarden
tar -czvf vaultwarden-backup-$(date +%F).tar.gz vw-data
Or if you are using docker:
docker exec -it vaultwarden /vaultwarden backup
🔹 **Restore**
sudo docker-compose down
rm -rf vw-data
tar -xzvf vaultwarden-backup-2025-09-15.tar.gz
sudo docker-compose up -d
**🔹 Backup automático con cron**
crontab -e
0 3 * * * tar -czf /opt/vaultwarden/backups/vaultwarden-$(date +%F).tar.gz -C /opt/vaultwarden vw-data
**🔹 backup.sh**
#!/bin/bash
### Backup de Vaultwarden
#### Carpeta de datos
DATA_DIR="/opt/vaultwarden/vw-data"
#### Carpeta de backups
BACKUP_DIR="/opt/vaultwarden/backups"
#### Crear carpeta de backups si no existe
mkdir -p "$BACKUP_DIR"
#### Nombre del archivo con fecha
BACKUP_FILE="$BACKUP_DIR/vaultwarden-$(date +%F-%H%M).tar.gz"
echo "📦 Creando backup en $BACKUP_FILE ..."
tar -czvf "$BACKUP_FILE" -C /opt/vaultwarden vw-data
echo "✅ Backup completado."
**🔹 restore.sh**
#!/bin/bash
### Restaurar backup de Vaultwarden
DATA_DIR="/opt/vaultwarden/vw-data"
BACKUP_DIR="/opt/vaultwarden/backups"
if [ -z "$1" ]; then
echo "Uso: $0 archivo_backup.tar.gz"
exit 1
fi
BACKUP_FILE="$1"
if [ ! -f "$BACKUP_FILE" ]; then
echo "❌ El archivo $BACKUP_FILE no existe."
exit 1
fi
echo "🛑 Deteniendo contenedor..."
cd /opt/vaultwarden
sudo docker-compose down
echo "🗑️ Eliminando datos actuales..."
rm -rf "$DATA_DIR"
echo "📂 Restaurando desde $BACKUP_FILE ..."
tar -xzvf "$BACKUP_FILE" -C /opt/vaultwarden
echo "🚀 Iniciando contenedor..."
sudo docker-compose up -d
echo "✅ Restauración completada."
---
**ejecutar backup sh**
chmod +x /opt/vaultwarden/backup.sh /opt/vaultwarden/restore.sh
/opt/vaultwarden/backup.sh
/opt/vaultwarden/restore.sh /opt/vaultwarden/backups/vaultwarden-2025-09-15-1530.tar.gz
---
**Añadir menu administrador:**
openssl rand -base64 48 - generar token mac/linux o (git bash windows)
[Convert]::ToBase64String((1..48 | ForEach-Object {Get-Random -Maximum 256})) - generar token windows
environment:
- ADMIN_TOKEN=pon_aqui_un_token_seguro
<http://IP-DE-TU-SERVIDOR:8080/admin>
### Docker-Based Automated Backups (Example)
If you're using Vaultwarden via Docker and want to automate your backups to a remote machine, the following method might help. It stops the container to ensure consistency, zips the data directory, transfers it via scp, and then restarts Vaultwarden.
**Backup Script Example:**
#!/bin/bash
docker-compose down
datestamp=$(date +%m-%d-%Y)
backup_dir="/home/<user>/vw-backups"
zip -9 -r "${backup_dir}/${datestamp}.zip" /opt/vw-data*
scp -i ~/.ssh/id_rsa "${backup_dir}/${datestamp}.zip" user@<REMOTE_IP>:~/vw-backups/
docker-compose up -d
You can automate this via cron:
0 0 * * * /root/transfer_vaultwarden_logs.sh
Cleanup Script (optional) to keep only the most recent backup:
#!/bin/bash
cd ~/backups || exit
find . -type f -name '*.zip' ! -mtime -1 -exec rm {} +
Always test restores. To restore, unzip the archive back into /opt/vw-data, replacing the previous data directory.
+81
View File
@@ -0,0 +1,81 @@
AYUDA WINDOWS
\=============
INFORME ESTADO BATERIA
powercfg /batteryreport /output C:\battery-report.html
CAMBIAR LETRA DE UNIDAD (por ejemplo USB) con PowerShell (administrador)
Get-Partition
Set-Partition -DriveLetter X -NewDriveLetter Y
HABILITAR LA EJECUCION DE SCRIPTS PARA Powershell
Para corregir la restricción que trae por defecto PowerShell para ejecutar Script en Windows:
Abre la consola PowerShell como administrador y comprueba el error escribiendo «Get-ExecutionPolicy». Si al hacer clic en Enter la consola te devuelve :
«Unrestricted», entonces tendrás que modificar la configuración
Escribe en la consola «Set-ExecutionPolicy Unrestricted» y a continuación contesta con un "S" o "Y", para indicar que quieres modificarla.
VMWare PLAYER DISABLE SIDE-CHANNEL MITIGATIONS IN
find the VMX file (virtual machine configuration file). Open that file in Notepad.
Add the following line to the list of parameters: ulm.disableMitigations="TRUE".
Save changes and close Notepad.
shutdown /s apagar equipo
shutdown /r reiniciar
shutdown /h hibernar
hostname Nombre del equipo
wmic bios get serialnumber Número serie equipo
Limpieza de disco en Windows 11
ejecutar cleanmgr
hosts windows
C:\Windows\System32\drivers\etc\hosts
WSL (window subsistem for linux)
wsl --install (instala ubuntu por defecto)
wsl --install -d Debian Instalar una distribución específica
wsl --list --online Listar todas las distribuciones disponibles:
Eliminar distribuciones instaladas
wsl --list
wsl --unregister Ubuntu Eliminar (ejemplo Ubuntu)
Eliminar WSL desde Configuración (Opcional)
Configuración → Aplicaciones → Características opcionales → Más características de Windows
Desmarca:
✔ Virtual Machine Platform
✔ Windows Subsystem for Linux
Reinicia el PC.