Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
736733384d | ||
|
|
4b228d87e6 | ||
|
|
46901fbb7f |
@@ -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
@@ -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
|
||||||
|
|
||||||
|
-------------------
|
||||||
@@ -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)
|
||||||
@@ -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
@@ -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
@@ -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
|
||||||
@@ -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
@@ -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
@@ -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
@@ -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  
|
||||||
|
|
||||||
|
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 
|
||||||
|
|
||||||
|
kill -9 \<PID> Forzar matar proceso 
|
||||||
|
|
||||||
|
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
@@ -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
@@ -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
|
||||||
|
|
||||||
|
\-------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -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
@@ -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
@@ -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"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -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.
|
||||||
|
|
||||||
@@ -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.
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user