Szkriptek: Python, Perl, Bash, ...

[megoldva] szavakat keresek

Időnként meg kellene keresnem néhány angol szót pár száz karaktersorban.

Mivel ritkán jön ez a feladat, eddig leginkább szemmel futottam át a listát, de minden egyes alkalommal eszembe jutott, hogy automatizálnám.

Na ma tettem egy próbát. Feltettem a Debianból a cracklib-runtime csomagot, amiben van egy cracklib-check parancs, ami ügyesen megmondja hosszabb szavakról, hogy benne vannak-e a könyvtárban vagy nem.

A gondom az, hogy csak 6 betűs vagy hosszabb szavakat hajlandó keresni.

$ cracklib-check
alive
alive: it is too short

Nekem 3, 4 és 5 betűs szavakat is meg kellene találnom. Nem találok beállítási lehetőséget vagy paramétert, ahol a minimum szóhosszt meg lehetne változtatni.

Mielőtt valaki azzal jönne, hogy 6 karakternél rövidebb jelszó túl rövid, leszögezném, hogy nem jelszóként használt karaktersorokról van szó.

Valaki tudja-e, hogy a) hogy lehet a cracklibet arra rábeszélni, hogy rövidebb szavakat is megvizsgáljon, vagy b) mi mást használhatnék, ami kb. ugyanezt tudja, de rövidebb szavakra is?

iRedMail backup

Szeretném megköszönni a segítőkész embereknek, hogy elláttak jótanácsokkal. Külön köszönet a zstd beküldőjének, több mint 7-szeres a sebesség, és jól is tömörít.

Összeraktam ollóztam és módosítottam az iRedMail mentő scriptet. Ha valaki bármilyen optimalizálást hibát vagy bármit tud az ne tartsa magába. Némi magyarázattal fűszerezve kérem szépen.

Van egy aggasztó rész, ami a régebbi biztonsági másolatokat törli, ott az a fránya rm -rf. Megfelelőek a paraméterei, de ha valaki biztonságosabbá tudja tenni, az írja le kérem. Ettől engem ráz a hideg.

Frissítem a topikot, a neve az lesz hogy iRedMail backup. Más cím javaslatok is jöhetnek.

Köszönök mindent.

A backup.txt fájlt még bővítem.

Csomag függöség alap telepítésen felül certbot és zstd.

backup.txt

# CRLF érzékeny a tar, ezért a sorok végén csak LF lehet!
# Egyéb domainek DKIM aláírásai miatt módosult
/etc/amavis/conf.d/50-user
# DKIM kulcsok
/var/lib/dkim
# Let's Encrypt 
/etc/letsencrypt
/etc/ssl/certs/iRedMail.crt
/etc/ssl/private/iRedMail.key
# Alapértelmezett email könyvtár
/var/vmail/vmail1

backup_iredmail.sh

#!/usr/bin/env bash

export PATH='/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin'

# Ennyi napig nem törli az előző biztonsági másolatotokat. 
# Az alapértelmezett nap 3.
KEEP_DAYS='3'

# Törölje a régi biztonsági másolatokat? YES ha igen.
export REMOVE_OLD_BACKUP='NO'

# Hol tárolja a biztonsági másolatokat.
export BACKUP_ROOTDIR="/home/backup/iredmail"

# Dátum. A biztonsági másolat fájl nevéhez és az adatbázis biztonsági másolat
# könyvtárai eléréséhez szükséges.
export CMD_DATE='/bin/date'
export YEAR="$(${CMD_DATE} +%Y)"
export MONTH="$(${CMD_DATE} +%m)"
export DAY="$(${CMD_DATE} +%d)"

# Az adatbázis biztonsági másolatokat könyvtárai.
# Ezt az iRedMail 3 óra 1 perc és 4 óra 1 perckor hozza létre.
export DATABASE_BACKUP_ROOTDIR="/var/vmail/backup"
export POSTGRESQL_BACKUP_DIR="${DATABASE_BACKUP_ROOTDIR}/pgsql/${YEAR}/${MONTH}/${DAY}"
export SOGO_BACKUP_FILE="${DATABASE_BACKUP_ROOTDIR}/sogo/${YEAR}/${MONTH}/${DAY}.tar.bz2"

# Biztonsági mentés mappa
export BACKUP_DIR="${BACKUP_ROOTDIR}/${YEAR}/${MONTH}/${DAY}"

# Mappa ellenőrzés, ha nem létezik létrehozza.
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR} 2>/dev/null

# Log fájl
export TIME="$(${CMD_DATE} +%H-%M-%S)"
export TIMESTAMP="${YEAR}-${MONTH}-${DAY}-${TIME}"
export LOGFILE="${BACKUP_DIR}/${TIMESTAMP}.log"

# Log fájl inicializálás
echo "* Starting at: ${YEAR}-${MONTH}-${DAY}-${TIME}." >${LOGFILE}
echo "* Backup directory: ${BACKUP_DIR}." >>${LOGFILE}

# Fájl, ami tartalmaza a menteni kívánt fájlokat és könyvtárakat.
export BACKUP_FILE='backup.txt'

# Biztonsági másolat státusza
export BACKUP_SUCCESS='YES'

if [ X"$?" == X'0' ]; then
    # Virtuális gépen 2 VCPU esetén a -T1 az optimális
    time tar -I "zstd -T1 -1" -cf ${BACKUP_DIR}/iredmail.tar.zst --exclude='#*' -T ${BACKUP_FILE} ${POSTGRESQL_BACKUP_DIR} ${SOGO_BACKUP_FILE} >>${LOGFILE}
else
    export BACKUP_SUCCESS='NO'
fi

# Fájl méret hozzáfűzése a log fájlhoz.
export CMD_DU='du -sh'
echo -e "* File size:\n----" >>${LOGFILE}
cd ${BACKUP_DIR} && \
${CMD_DU} *zst >>${LOGFILE}
echo "----" >>${LOGFILE}

# Biztonsági másolat státusz hozzáfűzése a log fájlhoz.
echo "* Backup completed (Success? ${BACKUP_SUCCESS})." >>${LOGFILE}

# A biztonsági másolat befejeztével emailben érkeznek ezek az adatok.
if [ X"${BACKUP_SUCCESS}" == X'YES' ]; then
    echo -e "\n[OK] Backup successfully completed.\n"
else
    echo -e "\n[ERROR] Backup completed with ERRORS.\n" 1>&2
fi

# Régi bizonsági másolat könyvtárak.
shift_year=$(date --date="${KEEP_DAYS} days ago" "+%Y")
shift_month=$(date --date="${KEEP_DAYS} days ago" "+%m")
shift_day=$(date --date="${KEEP_DAYS} days ago" "+%d")
export REMOVED_BACKUP_DIR="${BACKUP_ROOTDIR}/${shift_year}/${shift_month}/${shift_day}"
export REMOVED_BACKUP_MONTH_DIR="${BACKUP_ROOTDIR}/${shift_year}/${shift_month}"
export REMOVED_BACKUP_YEAR_DIR="${BACKUP_ROOTDIR}/${shift_year}"

# Régebbi biztonsági másolatok törlése
if [ X"${REMOVE_OLD_BACKUP}" == X'YES' -a -d ${REMOVED_BACKUP_DIR} ]; then
    echo -e "* Old backup found. Deleting: ${REMOVED_BACKUP_DIR}." >>${LOGFILE}
    rm -rf ${REMOVED_BACKUP_DIR} >> ${LOGFILE} 2>&1
    rmdir ${REMOVED_BACKUP_MONTH_DIR} 2>/dev/null
    rmdir ${REMOVED_BACKUP_YEAR_DIR} 2>/dev/null
fi

# A biztonsági másolat befejeztével emailben érkeznek ezek az adatok.
echo "* Backup log: ${LOGFILE}:"
cat ${LOGFILE}

Változó fájlnevek átnevezése [Megoldva]

Sziasztok!

Arra lenne szükségem, hogy automatikusan időponttal létrehozott fájlokat:

valami (2022-01-02-12-10-20-10).txt

valami2 (2022-01-02-13-12-10-00).txt

átnevezzek a zárójelben lévő időbélyeg nélkül úgy, hogy ha van ilyen nevű fájl, akkor azt felül is írja és a végeredmény ez legyen:

valami.txt

valami2.txt

 

Köszi! 

pozíció elmentése kilépéskor

Sziasztok!

Egy bash script kapcsán azt szeretném elérni, hogy kilépéskor a script a POS változó értéként legyen képes elmenteni, és ami annál is fontosabb lenne, hogy pontosan.
Egy JSON adatfolyamot olvas egyébként a script, egy sor, egy üzenet (bár a rekord szeparátor karakter más), és az üzenet egy mezője tartalmazza a POS mezőt, ami alapján később lehetne onnan folytatni az adatfolyam lekérését.
Sajnos a jelenlegi tapasztalat az, hogy a LINE változó még csak-csak tartalmaz adatot, de messze nem azt, ami éppen utolsóként kiíródik a STDOUT-ra a konzolban, a POS vátozó értéke pedig üres, amikor a __cleanup ráhívódik.
Az eredeti koncepció az volt, hogy az üzeneteket alapból nem parse-olom fel, csak kilépéskor olvastatom ki a POS aktuális értékét, és azt elteszem, hogy a következő induláskor onnan folytassa az adatok lekérését. Ez nem igazán jött össze, így most tesztképpen minden üzenetet felparse-olok, aminek hála a script jóval lassabb lett.
Most pedig valójában azt tapasztalom, hogy ha pélédául ^C-t nyomok, akkor a __cleanup kiírja a LINE változó tartalmát, majd még bőven jön ki adat a scriptből STDOUT-on, és az amit a __cleanup korábban kiírt, az messze nem az utolsó üzenet, ami kikerül a konzolra mire a script végül befejezi a futást.
Hogy tudnám ezt jól megoldani?

#!/bin/bash

LINE=
POS=

trap '__cleanup' HUP INT TRAP TERM

__cleanup() {
	echo -e "\nhello! EE${POS}:::${LINE}EE\n"
	exit 1
}

while IFS="\0x1E" read -r LINE; do POS=$(jq '.__POS' <<<"${LINE}") ; echo "${LINE}" ; done < <( Innen olvasunk, ez a parancs írja ki a json-t)

vi mozgasnyi sorok kiirasa masik allomanyba :set number sorszam megadas nelkul

:set number hasznalataval ugye kiirja a sorok ele a sorszamot es tudom ezt hasznalni:
120,134w/allomanynev
Tudok-e sorszam nelkul hasonlo parancsot kiadni, pl az aktulis sortol 15 sornyit lefele:
 .,15j w /allomanynev
2 bekezdesnyit lefele
 .,2} w /allomanynev
 

Thunderbird saját addon

Egyszerű(nek tűnő) addont szeretnék a thunderbirdhez.

Két funkció lenne, lehet két külön addon is, vagy egyben a kettő.

- Jelölje meg az emailt olvasottnak, amikor válaszolok rá vagy továbbítom.

- Egy megadott URL-ről valamilyen időközönként töltsön le egy HTML-t, amit beállít a HTML aláíráshoz. Ami ehhez még az extra lenne, hogy a letöltött HTML egy template lenne, amiben pl. a %NAME% hivatkozást a megadott user nevére kellene cserélnie, mielőtt beállítja. (Ugyanígy pl. telefonszám vagy egyéb dolog)

Néztem a példa addonokat, de nekem kicsit kínai, sosem használtam még JS-t, és azt sem tudom, hogy miből lehetne "választani", milyen objektumok, beépített függvények, változók vannak, milyen propertyket kellene állítanom, így mindenféle UI nélkül letolt gatyával.... Ilyenkor mindig visszasírom a Delphi-t.

[ Megoldva ] Bináris echo Makefile-ból

Egy make folyamat közben a fájlom elejére kellene illesztenem 4 bináris bájtot. Ezt az

echo -n -e '\x00\xFF\x00\xFF' > binfilename

paranccsal meg is tudom tenni. Azonban ez a Makefile-on belülről már nem működik. Ha kiadom a make parancsot, a binfilename tartalma

-e \x00\xFF\x00\xFFlesz.

Van ötletetek, hogyan tudnám ezt mégis megcsinálni?

Shell szkript gyorsítása

A lemonbar nevű panelt használom Linuxon. Ez egy egyszerű alkalmazás, amibe be kell pipe-olni \n karakterrel lezárva, amit kiírjon, és azt kiteszi az X root képernyő tetejére egy sávba. Így írtam egy shell szkriptet, ami 0,5 másodpercenként kiírja az adatokat, ami a nyitva maradt pipe-on eléri a lemonbart. Ezzel nincs is baj, világos a működése, de egyes kiírt dolgok változhatnak idő előtt, mielőtt a szkript magától frissítené/lekérdezné őket, újra kiírná az adatokat. Ezt úgy oldom meg, hogy a "sleep 0.5" folyamatot pkill-lel kilövöm a kiírt adatok változását okozó esemény után, ami egy külön szkriptben történik (sxhkdrc). Ez alapvetően így működik is, de a panel még mindig kicsit lassan frissül, jó pár ms-os késéssel változik rajta az információ, közel fél másodperc.

Ami a kérdés lenne: ezt más lemonbar felhasználók úgy oldják meg, hogy a szkriptjük a kiírandó adatokat (hangerő, idő, stb.) egy előre, név szerint, az mkfifo paranccsal a /tmp/-be bizonyos létrehozott pipe-ba irányítják, és a lemonbar-nak csak egy a pipe-ot fprint-elik bele újabb pipe-on át:

#!/bin/sh

# bla-bla, nem érdekes részek

fifo="/tmp/panel_fifo"
mkfifo "$fifo"

# bla-bla-bla, újabb kódrészek, majd a fő while do loop végén ez jön
printf "%s\n" < "$fifo" | lemonbar

Ez mitől lenne gyorsabb, mint az én megoldásom? Csak simán pipe-olok bele a lemonbarba:
while-do-echo-szkriptem | lemonbar -kapcsolók &

Elvileg ez a hagyományos pipe-olás is a memóriában létrejött csatornába íródik, így nem értem, hogy az én megoldásomtól miben lenne jobb ez a /tmp/-be fifózás. El tudná magyarázni nekem valaki, mielőtt több órát vergődök egy újabb scriptes konfiggal? Még nem próbáltam ki, de mindenütt azt írják a neten, hogy ez a fifós megoldás gyorsabb. Először arra gondoltam, hogy a megoldásom valahol máshol selejtes, de nem, mert tényleg frissül a panel, kilövi idő előtt a szkript várakozási sleep folyamatát (ezt teszteltem), és mégis kicsit lassú. Próbáltam úgy is, hogy közvetlenül az adatváltoztató esemény előtt és után is kilövöm a sleep-es folyamatot, biztos, ami biztos, de az se gyorsít a panelfrissítésen. Gyakrabban nem akarom frissíteni fél másodpercnél az infókat, mert akkor az már túl nagy prociterhelés egy egyszerű panelért.