@Ghost said:
Gal gali plačiau, ką reiškia Nedestruktyvus man stebėjimas?
Tarkim terminale rašai kokią nors komandą: watch -d "df -B MB /dev/sdc1"
ir staiga nori pasižiūrėti komandos reikšmę. Nereikia ištrinti eilutės, tiesiog užeini ties watch ir paspaudi Ctrl+h - atsidaro watch dokumentacija.
Uždarius dokumentacija grįžti prie aukščiau paminėtos watch komandos. Nedestruktyvus, ta prasme, kad nereikia ištrinti komandos, norint pasižiūrėti komandos paaiškinimus. Pasižiūri man, uždarai man ir vėl gyžti prie tos pačios eilutės terminale.
Tuo pačiu, dar viena komanda:
Konvertavimas iš youtube į mp3: $ youtube-dl --extract-audio --audio-format mp3 <youtube-nuoroda>
Susipažinusiems su Logwatch iššūkiai yra aiškūs ir suprantami.
Prisipažįstu, kad dar neišbandžiau, bet artimiausiu metu ketinu, nes mintis pas juos tikrai gera! Šaltinis:
#!/usr/bin/env python3
from systemd import journal
from datetime import datetime, timedelta
from email.mime.text import MIMEText
import re, smtplib
# First, let's define patterns to ignore.
# Those are for matching dynamically named units:
session = re.compile("session-[a-z]?\d+.scope")
sshUnit = re.compile("sshd@[0-9a-f.:]*")
# Those will match the logged message itself:
sshSocketStart = re.compile("(Starting|Stopping) OpenSSH Per-Connection Daemon.*")
sshAcceptPublicKey = re.compile("Accepted publickey for (bob|alice).*")
sshReceivedDisconnect = re.compile("Received disconnect from.*")
logindNewSession = re.compile("New session [a-z]?\d+ of user (bob|alice).*")
sshdSessionClosed = re.compile(".*session closed for user (bob|alice).*")
sessionOpenedRoot = re.compile(".*session opened for user root.*")
suSessionClosedGit = re.compile(".*session opened for user git.*")
anacronNormalExit = re.compile("Normal exit (\d+ jobs run).*")
postfixStatistics = re.compile("statistics:.*")
postfixHostnameDoesNotResolve = re.compile("warning: hostname .* does not resolve to address .*: Name or service not known")
# Open the journal for reading, set log level and go back one day and 10 minutes
j = journal.Reader()
j.log_level(journal.LOG_INFO)
yesterday = datetime.now() - timedelta(days=1, minutes=10)
j.seek_realtime(yesterday)
# We'll store messages in this variable
mailContent = []
# Filter and store output
for entry in j:
# Special cases for logs without a message
if 'MESSAGE' not in entry:
mailContent.append( 'U %s %s[%s]: EMPTY!' % (
datetime.ctime(entry['__REALTIME_TIMESTAMP']),
entry['PRIORITY'],
entry['SYSLOG_IDENTIFIER'],
))
# With systemd unit name
elif '_SYSTEMD_UNIT' in entry:
if entry['PRIORITY'] > 4:
if entry['_SYSTEMD_UNIT'] == "wtcomments.service":
pass
elif entry['_SYSTEMD_UNIT'] == "ffsync.service":
pass
elif session.match(entry['_SYSTEMD_UNIT']):
pass
elif sshUnit.match(entry['_SYSTEMD_UNIT']):
if sshAcceptPublicKey.match(entry['MESSAGE']):
pass
elif sshReceivedDisconnect.match(entry['MESSAGE']):
pass
elif entry['_SYSTEMD_UNIT'] == "systemd-logind.service":
if logindNewSession.match(entry['MESSAGE']):
pass
elif entry['_SYSTEMD_UNIT'] == "postfix.service":
if postfixHostnameDoesNotResolve.match(entry['MESSAGE']):
pass
else:
mailContent.append( 'U %s %s %s %s[%s]: %s' % (
datetime.ctime(entry['__REALTIME_TIMESTAMP']),
entry['PRIORITY'],
entry['_SYSTEMD_UNIT'],
entry['SYSLOG_IDENTIFIER'],
entry['_PID'],
entry['MESSAGE']
))
# With syslog identifier only
elif entry['SYSLOG_IDENTIFIER'] == "systemd":
if sshSocketStart.match(entry['MESSAGE']):
pass
elif firewalldStart.match(entry['MESSAGE']):
pass
elif entry['SYSLOG_IDENTIFIER'] == "sshd":
if sshdSessionClosed.match(entry['MESSAGE']):
pass
elif entry['SYSLOG_IDENTIFIER'] == "sudo":
if sessionOpenedRoot.match(entry['MESSAGE']):
pass
elif entry['SYSLOG_IDENTIFIER'] == "CROND":
if sessionOpenedRoot.match(entry['MESSAGE']):
pass
elif entry['SYSLOG_IDENTIFIER'] == "anacron":
if anacronNormalExit.match(entry['MESSAGE']):
pass
elif entry['SYSLOG_IDENTIFIER'] == "postfix/anvil":
if postfixStatistics.match(entry['MESSAGE']):
pass
elif entry['SYSLOG_IDENTIFIER'] == "su":
if suSessionClosedGit.match(entry['MESSAGE']):
pass
else:
mailContent.append( 'S %s %s %s: %s' % (
datetime.ctime(entry['__REALTIME_TIMESTAMP']),
entry['PRIORITY'],
entry['SYSLOG_IDENTIFIER'],
entry['MESSAGE']
))
# Send the content in a mail to root
mail = MIMEText('\n'.join(mailContent))
mail['Subject'] = '[example.com] Logs from ' + datetime.ctime(yesterday) + ' to ' + datetime.ctime(datetime.now())
mail['From'] = 'journald@example.com'
mail['To'] = 'root@example.com'
server = smtplib.SMTP('localhost')
server.send_message(mail)
server.quit()
Paskutiniu metu tapo sudetinga naudoti KDE, taip yra todel kad daugeli savo biblioteku jie isskleide i atskirus projektus, o ir yra tokiu kuriems dar reikia KDE4... Tenka surinkti viska paciam, nes naudotis KDE4+Qt4+KDE5+Qt5+Gnome+Wayland+Xorg... bent man atrodo kvailyste. Mano budu yra gaunamas visas frameworkas KDE5 (ir tik KDE5!) bei sudiegia keleta utilitu (naudinga naudojant WM ne KDE)
Skriptas netikrina ar sistema turi reikalingas bibliotekas surinkti KDE, o ir palieka dbus skausma nepaliesta (galima paciam copy/paste, arba skaitykit freedesktop dokumentacija kaip leisti dbus servisus is XDG_HOME).
EDIT: Pamirsau run.zsh (reikalingas norint paleisti KDE po non-standard prefix)
extract ()
{
if [ -f $1 ]; then
case $1 in
*.tar.bz2)
tar xvjf $1
;;
*.tar.gz)
tar xvzf $1
;;
*.tar.xz)
tar Jxvf $1
;;
*.bz2)
bunzip2 $1
;;
*.rar)
unrar x $1
;;
*.gz)
gunzip $1
;;
*.tar)
tar xvf $1
;;
*.tbz2)
tar xvjf $1
;;
*.tgz)
tar xvzf $1
;;
*.zip)
unzip $1
;;
*.Z)
uncompress $1
;;
*.7z)
7z x $1
;;
*)
echo "don't know how to extract '$1'..."
;;
esac;
else
echo "'$1' is not a valid file!";
fi
# View archive without unpack
function exs() {
if [[ -f "${1}" ]]; then
7z l ${1} | grep --invert-match \
-e 'Path =' -e 'Type =' -e 'Physical Size =' -e 'Listing archive:' \
-e 'Copyright (c)' -e 'p7zip Version' -e '^--$' \
| egrep -v "^[[:space:]]*$|^#"
fi
}
BONUS tiems kas zsh naudoja:
alias -s gz=exs
alias -s tar=exs
alias -s tgz=exs
alias -s zip=exs
alias -s rar=exs
alias -s iso=exs
alias -s deb=exs
alias -s iso=exs
alias -s exe=exs
Dabar kad paziureti kas yra archyve uztenka parasyti jo pavadinima:
Sveiki,
Siūlau šioje temoje dalintis įvairiomis naudingomis komandomis/funcijomis.
Pradėsiu:
Nedestruktyvus man stebėjimas, su Ctrl+h.
papildom .bashrc failą:
Bash nenaudoju, bet zsh galiu keleta pasidalint
vcs_info
Tarkim dirbti su Git naudoju:
setpwd yra funkcija kuri atnaujina PWD mano PROMPT'e.
${PR_STUFF[PR_SPC]} yra seperatorius, tarkim PR_STUFF[PR_SPC]=":". Dabar i PS1 galima nurodyti ${PR_STUFF[PR_PWD]}
f
Naudoja find komanda ir tai ka randa nuspalvina:
Gal gali plačiau, ką reiškia
Nedestruktyvus man stebėjimas
?Tarkim terminale rašai kokią nors komandą:
watch -d "df -B MB /dev/sdc1"
ir staiga nori pasižiūrėti komandos reikšmę. Nereikia ištrinti eilutės, tiesiog užeini ties watch ir paspaudi Ctrl+h - atsidaro watch dokumentacija.
Uždarius dokumentacija grįžti prie aukščiau paminėtos watch komandos. Nedestruktyvus, ta prasme, kad nereikia ištrinti komandos, norint pasižiūrėti komandos paaiškinimus. Pasižiūri man, uždarai man ir vėl gyžti prie tos pačios eilutės terminale.
Tuo pačiu, dar viena komanda:
Konvertavimas iš youtube į mp3:
$ youtube-dl --extract-audio --audio-format mp3 <youtube-nuoroda>
Susipažinusiems su Logwatch iššūkiai yra aiškūs ir suprantami.
Prisipažįstu, kad dar neišbandžiau, bet artimiausiu metu ketinu, nes mintis pas juos tikrai gera! Šaltinis:
Su Logwatch ne, bet su Elasticsearch, Logstash ir Kibana teko bandrauti
Source https://ubuntu.lt/topic/8589/ulog-elasticsearch-logstash-kibana/
Dar noreciau prie tokio stuff patarti viena utilita kuri daug metu naudoju - Multitail
Paskutiniu metu tapo sudetinga naudoti KDE, taip yra todel kad daugeli savo biblioteku jie isskleide i atskirus projektus, o ir yra tokiu kuriems dar reikia KDE4... Tenka surinkti viska paciam, nes naudotis KDE4+Qt4+KDE5+Qt5+Gnome+Wayland+Xorg... bent man atrodo kvailyste. Mano budu yra gaunamas visas frameworkas KDE5 (ir tik KDE5!) bei sudiegia keleta utilitu (naudinga naudojant WM ne KDE)
Skriptas netikrina ar sistema turi reikalingas bibliotekas surinkti KDE, o ir palieka dbus skausma nepaliesta (galima paciam copy/paste, arba skaitykit freedesktop dokumentacija kaip leisti dbus servisus is XDG_HOME).
EDIT: Pamirsau run.zsh (reikalingas norint paleisti KDE po non-standard prefix)
Kartais pravercia:
Veikia taip:
Dar keli, galiu testi ir testi nesustodamas (~/.bin/ wc rodo 100+ skriptu) :-).
Kartais tenka siusti/gauti siuntas, kad jas sekti esu parases sau toki skripta:
Skriptas:
Jeigu tenka susidurti su unicode tai pravercia:
Skriptas:
Arba convert is decimal i binary arba vice versa
Skriptas:
funkcija failų išskleidimui:
@Supoplex 7z palaiko kone viska:
Tad gali sutrumpinti iki minimumo:
Arba perziureti, be isskleidimo:
BONUS tiems kas zsh naudoja:
Dabar kad paziureti kas yra archyve uztenka parasyti jo pavadinima:

For fun.
neveikė su bash'u, tikriausiai dėl { }, taip pataisiau:
Paprasčiausiai pamiršo kabliataškį uždėt Pataisyta versija:
Gal ir taip, Zsh komandu grupese semicolon yra lisnas. O kam jis reikalingas Bash ? Tai vadinasi bashismas ;-)