Následující skript provádí popsané kroky, využívá RAMdisky různých velikostí podle potřeby a provádí extrakci. Tento skript je psán v Bash a je možné jej přizpůsobit podle konkrétních požadavků.
Bash skript: RAMdisk pro extrakci souboru z .deb
#!/bin/bash
# Cesty pro RAMdisky
RAMDISK_100M="/mnt/ram_tar_100M"
RAMDISK_300M="/mnt/ram_tar_300M"
RAMDISK_1000M="/mnt/ram_tar_1000M"
CILOVY_ADRESAR="/cilovy/adresar" # Cílový adresář pro extrakci souboru
RAMDISK_PRIPRAVEN="" # Sledování, jaký RAMdisk je aktuálně připojen
# Funkce pro kontrolu a vytvoření RAMdisku
function nastav_ramdisk {
local ramdisk_path=$1
local ramdisk_size=$2
# Pokud složka neexistuje, vytvořte ji
if [ ! -d "$ramdisk_path" ]; then
sudo mkdir -p "$ramdisk_path"
fi
# Zkontrolujeme, zda je RAMdisk připojen
local disk_size=$(du "$ramdisk_path" | awk '{print $1}')
if [ "$disk_size" -eq 4 ]; then
sudo mount -t tmpfs -o size="$ramdisk_size"M tmpfs "$ramdisk_path"
RAMDISK_PRIPRAVEN="$ramdisk_path"
echo "RAMdisk o velikosti $ramdisk_size MB připojen na $ramdisk_path"
fi
}
# Funkce pro odpojení RAMdisku
function odpoj_ramdisk {
local ramdisk_path=$1
if mount | grep -q "$ramdisk_path"; then
sudo umount "$ramdisk_path"
echo "RAMdisk $ramdisk_path odpojen."
fi
}
# Hlavní logika
function extrahuj_z_deb {
local deb_soubor=$1
# Zjistěte velikost .deb souboru
local velikost_deb=$(du -m "$deb_soubor" | awk '{print $1}')
# Nastav RAMdisk podle velikosti .deb souboru
if [ "$velikost_deb" -le 33 ]; then
nastav_ramdisk "$RAMDISK_100M" 100
elif [ "$velikost_deb" -le 100 ]; then
nastav_ramdisk "$RAMDISK_300M" 300
else
nastav_ramdisk "$RAMDISK_1000M" 1000
fi
if [ -z "$RAMDISK_PRIPRAVEN" ]; then
echo "Chyba: Nepodařilo se připojit RAMdisk."
exit 1
fi
# Přesuňte .deb na RAMdisk
cp "$deb_soubor" "$RAMDISK_PRIPRAVEN/"
cd "$RAMDISK_PRIPRAVEN" || exit
# Rozbalte .deb
ar x "$(basename "$deb_soubor")"
if [ $? -ne 0 ]; then
echo "Chyba při rozbalení .deb souboru."
return 1
fi
# Extrahujte požadovaný soubor z data.tar.*
tar -xf data.tar.* -C "$CILOVY_ADRESAR" ./cesta/k/pozadovanemu_souboru
if [ $? -eq 0 ]; then
echo "Extrakce souboru z archivu byla úspěšná."
else
echo "Chyba při extrakci souboru z archivu."
return 1
fi
# Smažte soubory na RAMdisku
rm -rf "$RAMDISK_PRIPRAVEN"/*
echo "RAMdisk vyčištěn."
# Odpojte RAMdisk, pokud velikost byla větší než 100 MB
if [ "$RAMDISK_PRIPRAVEN" != "$RAMDISK_100M" ]; then
odpoj_ramdisk "$RAMDISK_PRIPRAVEN"
fi
# Reset proměnné RAMDISK_PRIPRAVEN
RAMDISK_PRIPRAVEN=""
}
# Ukázka použití
deb_soubor="/cesta/k/souboru.deb"
extrahuj_z_deb "$deb_soubor"
Vysvětlení:
- Funkce
nastav_ramdisk
: Zajistí připojení RAMdisku podle požadované velikosti. - Funkce
odpoj_ramdisk
: Bezpečně odpojí RAMdisk, pokud byl použit. - Hlavní logika: Vybere vhodný RAMdisk podle velikosti
.deb
souboru, extrahuje požadovaný soubor a na konci RAMdisk vyčistí nebo odpojí. - Efektivita: Minimalizuje zápisy na disk a využívá RAMdisk pouze podle potřeby.
Tento skript pokrývá většinu požadovaných kroků a je snadno rozšiřitelný. Stačí nahradit ./cesta/k/pozadovanemu_souboru
skutečnou cestou požadovaného souboru a nastavit CILOVY_ADRESAR
.