Archives

Bash-it – un framework cu ajutorul căruia îți poti controla aliasurile și scripturile

Bash-it este un pachet de scripturi și comenzi pentru versiuni ale Bash mai noi de 3.2, pachet făcut de comunitatea Bash și care aduce funcții modificate, teme, aliasuri, auto-completarea comenzilor și multe alte lucruri interesante. De asemenea aduce o serie de unelte pentru dezvoltatori, integrări ale unor comenzi pentru git și multe alte scripturi cu ajutorul cărora îți ușurează munca zilnică.

Cum se instalează Bash-it în sistemele de operare GNU/Linux

Pentru a instala Bash-it se clonează în primul rând repo-ul într-o destinație la alegerea utilizatorului:

$ git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it

Odată clonarea încheiată se rulează următoarea comandă pentru instalare (fișierele ~/.bash_profile sau ~/.bashrc – în funcție de sistemul de operare folosit vor fi salvate automat)

$ ~/.bash_it/install.sh

Veți fi întrebat “Would you like to keep your .bashrc and append bash-it templates at the end? [y/N]”, răspundeți după preferință.

Odată instalarea terminată aceasta poate fi verificată cu ajutorul comenzii ls. Fișisrele și directoarele ar trebui să fie afișate.

Cum poate fi modificat Bash-it în Linux

Bash-it poate fi modificat oricând editând fișierul ~/.bashrc.
Pentru a vedea lista aliasurilor, completărilor și modulelor suplimentare instalate și/sau disponibile se pot rula următoarele comenzi (care de asemenea vor indica cum se pot activa și dezactiva):

$ bash-it show aliases
$ bash-it show completions
$ bash-it show plugins

Pentru a vedea ce aliasuri sunt active se folosește următoarea comandă:

$ alias

Toate aliasurile pot fi găsite în directorul aflat aici: $HOME/.bash_it/aliases/ .
De exemplu, să activăm aliasurile pentru apt:

$ bash-it enable alias apt

Reîncărcam apoi Bash-it pentru a vedea rezultatul:

$ bash-it reload
$ alias

Din ce putem vedea, aliasurile pentru apt au fost activate

Mișcarea inversă se face astfel:

$ bash-it disable alias apt
$ bash-it reload

Căile generale sunt următoarele:

Completările pot fi găsite aici – $HOME/.bash_it/completion/
Modulele suplimentare – $HOME/..bash_it/plugins/
Toate elementele activate pot fi găsite în directorul $HOME/.bash_it/enabled .

Cum spuneam la început, Bash-it are oferă și mai mult de 50 de teme, cea implicită fiind bobby. Tema activă poate fi aflată afișând valoarea variabilei env BASH_IT_THEME

echo $BASH_IT_THEME

Temele pot fi găsite în directorul $BASH_IT/themes .

$ ls $BASH_IT/themes

Aceste teme pot fi previzualizate înainte de a fi folosite cu comanda:

$ BASH_PREVIEW=true bash-it reload

Iar aplicarea uneia dintre ele se poate face editând fișierul .bashrc și adăugând următoarea linie (cu numele temei alese):

$ export BASH_IT_THEME='essential'

Salvați apoi fișierul și reîncărcați-l

$ source $HOME/.bashrc

Căutarea de noi plugin-uri, completări sau aliasuri specifice diferitelor limbaje de programare sau medii de dezvoltare poate fi făcută ușor astfel (de exemplu căutăm ceva legat de comenzile pe care le utilizăm frecvent):

$ bash-it search python pip pip3 pipenv
$ bash-it search git

Iar dacă aveți nevoie de ajutor puteți rula comenzile:

$ bash-it help aliases
$ bash-it help completions
$ bash-it help plugins

Orice scripturi, aliasuri etc. adiacente pot fi adăugate în directoarele respective:

aliases/custom.aliases.bash
completion/custom.completion.bash
lib/custom.bash
plugins/custom.plugins.bash
custom/themes//.theme.bash

Pentru a avea întotdeauna cea mai recentă versiune a Bash-it rulați:

$ bash-it update

Iar dacă la un moment dat nu vreți să mai folosiți Bash-it acesta se dezinstalează astfel:

$ cd $BASH_IT
$ ./uninstall.sh

Scriptul uninstall.sh va restaura fișierele de pornire folosite anterior instalării. Odată procesul încheiat directoarele Bash-it pot fi șterse manual.

$ rm -rf $BASH_IT

Mai multe detalii despre cum poate fi folosit Bash-it puteți afla rulând comanda:

$ bash-it help

Pentru mai multe informații puteți accesa pagina de Github https://github.com/Bash-it/bash-it.

“Spargerea” unui fișier pdf cu pdftk

Birocrația noastră e încă în floare, iară companiile chiar private nu fac excepții de la comunicarea pseudo-electronică – îți trimit email cu contractele în format electronic dar nu-l acceptă înapoi decât semnat și ștampilat (eventual pe fiecare pagină) și “cu pix albastru”…
Ideea este că printr-un astfel de proces, după scanare un contract care ar fi fost un pdf de 500kb în formatul său inițial, poate ajunge la 15-20Mb după ce a fost printat, semnat și scanat din nou.
Iar cum sunt puține serverele de email care acceptă fișiere mari atașate emailurilor… apare aici distracția.
Astăzi am fost exact într-o astfel de situație, fișierul care trebuia “întors” avea mai bine de 15Mb.
Așa că am apelat la pdftk (PDF Toolkit) aplicație care este conform denumirii dată de cei care o întrețin “Handy Tool for Manipulating PDF Documents” și cu ajutorul căreia se pot face o mulțime de operații cu fișierele pdf, cum ar fi:
– Concatenarea sau colaj de documente pdf;
– Spargerea în fișiere cu număr definit de pagini
– Rotirea documentelor sau doa a numitor pagini dintr-un fișier pdf
– Decriptarea documentelor pdf (dacă știm parola)
– Criptarea fișierelor pdf
și multe alte operațiuni.

Dar cum tema de azi a fost spargerea în fișiere mai mici… iată cum se produce:
În primul rând se instalează pdftk:

[email protected]:~$ sudo apt-get update
[email protected]:~$ sudo apt-get install pdftk

Iar apoi am generat 3 fișiere mai mici din fișierul inițial după cum urmează:

[email protected]:~$ pdftk initial.pdf cat 1-5 output output_split1-5.pdf
[email protected]:~$ pdftk initial.pdf cat 6-10 output output_split6-10.pdf
[email protected]:~$ pdftk initial.pdf cat 11-15 output output_split11-15.pdf

Iar la final am avut 3 fișiere cu câte 5 pagini și dimensiune sub 7Mb dintr-un singur fișier care avea mai mult de 15Mb.

Pentru lista completă de operatori și exemple rulați cu încredere

[email protected]:~$ pdftk --help

pdftk

Script simplu pentru verificare cu ping

Din când în când prietenii mei de la Telekom/RDS/Enel/”and the gang” încearcă să-mi aducă aminte că există și altfel decât prin facturi… și atunci cred ei că cel mai bun motiv să-ți amintești de ei este să nu mai furnizeze serviciile…

Cum una din primele verificări ca să mă prind de unde/cum se apucă problema e să dau ceva ping-uri am ajuns (repejor) la concluzia că acest proces e musai să fie scriptat și de ce nu, automatizat.

În acest mod simplu pomul ajunge lângă fereastră am ajuns la versiunea X.XX.XXXX a scriptului care îmi verifică prin 4 pinguri adresele dintr-o listă definită în fișierul numit cum altfel: “ipuri”; acest fișier stă în directorul utilizatorului curent (în cazul meu /home/alex)

Iaca conținutul scriptului:

#!/bin/bash

NR=4 #Cate pinguri trag

for i in $( cat $HOME/ipuri )
do
ping -q -c$NR $i > /dev/null

if [ $? -eq 0 ]
then
echo $i "Raspunde la ping"

else
echo $i "Nu raspunde la ping"

fi
done

Iar rezultatul arată cam așa:

ping-test

Eu am făcut scriptul executabil pentru a-l putea rula mai rapid din directorul meu de scripturi.

Convertirea paginilor man în PDF

Poate nu primul sfat, dar în mod sigur unul din sfaturile primite în primele zile în care am văzut cum arată un sistem de operare GNU/Linux a fost  – Când nu știi ce face o comandă, folosește cu încredere “man”. Nu știi cine este “man”? Ia scrie tu man man.

Bunnn… pentru cei care nu știu cine este man, voi spune că este aplicația responsabilă cu afișarea și formatarea paginilor de manual ale aplicațiilor.

Dar cum timpul a trecut, tipul și numărul jucăriilor din viața noastră s-a mărit considerabil, am ajuns să îmi doresc ca anumite pagini cu instrucțiuni man să le pot căra după mine, sau să le pot trimite pe email unor persoane cărora le e lene să scrie în consolă “man cutare”.

Nu am dat prea mare atenție până deunăzi subiectului, dar azi având din nou nevoie să răspund unei întrebări legate de diverși parametri ai unei comenzi, am găsit pe forumul Ubuntu o soluție care mi-a satisfăcut pe deplin nevoia… ps2pdf.

ps2pdf este prezent în pachetele de bază ale Ubuntu, așa că nu prea e nimic suplimentar de instalat.

Unde mai pui că e și extrem de ușor de folosit direct din terminal:

$ man -t ping | ps2pdf - ping.pdf

Spor la convertit …

Schimbarea editorului implicit în Ubuntu din nano în alt editor

De multe ori, din obișnuință sau pur și simplu din comoditate, revin la consolă pentru a edita fișiere de configurare sau pentru a scrie o notă personală. Editorul de text cu care vine Ubuntu, nano pe numele lui e destul de decent, însă, deși pentru utilizare simplistă e ok, în anumite momente solicită ceva mai mult utilizatorul în găsirea comenzilor echivalente cu alte editoare. Așa că pentru a nu sta să mă uit ca la poarta nouă  în meniul de ajutor, prefer să schimb editorul implicit al sistemului la unul din editoarele cu care sunt mai familiar.

Pentru a schimba editorul, din consolă se rulează:

sudo update-alternatives --config editor

Această comadă afișează un meniu din care se poate alege un alt editor din cele instalate în sistem, prin simpla selectare numerică din lista prezentată

editor

După ce selectați, puteți testa de exemplu cu un crontab -e. Ar trebui să se deschidă editorul proaspăt ales.

Comenzi diverse în terminal

3 lucruri vreau să notez aici… pentru că săptămâna asta m-am lovit de câteva ori de ele… și am mai dat și “suport” câtorva amici pe aceste teme:)

Primul – Montarea unei imagini .iso  și apoi partajarea conținutului folosind Samba.

Al doilea – instalarea în Ubuntu a diverselor programe folosind fișiere .rpm

Și al treilea… care a fost și cea mai bună întrebare pe săptămâna asta… cum aflu ip-ul meu extern, alocat prin DHCP, din terminal…

Păi, să o iau în ordine… Am un fișier .iso iar unul din utilizatorii din rețea vrea să instaleze de pe el, dar fără a instala modifica ceva pre la el prin calculator… via rețeaua locală. Așadar, hai să montăm un iso și apoi să il trecem partajăm cu Samba

Bănui că sunt multe metode pentru a face asta… Și eu am găsit cel puțin trei metode care își lăudau diversele capacități… dar, ce am ales și a dat rezultate la mine a fost să montez fișierul .iso ca device loop. Toată tărășenia se execută cu câteva linii…

$sudo mkdir mnt/iso
$sudo  mount -o loop cddisc.iso /mnt/iso

Iar apoi adăugat în smb.conf directiva pentru noua partajare și am restartat samba.

Punctul doi… instalarea de fișiere .rpm în Ubuntu…

Și acest lucru este mult mai simplu decât pare la prima vedere… pentru că, pentru asta există “alien”. Alien ăsta știe el de la mămica lui cum să facă transformarea din .rpm în .deb… și asta fără să bălmăjească prea multe. Alien se intalează simplu cu apt-get.

sudo apt-get install alien
După ce-și face el “numărul” se rulează cu încredere:
sudo alien -k fisier.rpm
La final, vom avea generat un proaspăt fișier .deb cu același nume ca fișierul .rpm. Acel -k reprezintă numărul versiunii. Dacă nu este pus acolo, automat, va atașa ca număr de versiune “1”.
Apoi fișierul .deb se intalează cuminte cu dpkg.

Și am ajuns la punctul trei… m-am trezit că pe un server proaspăt instalat, până să ajung să configurez prea multe, am avut nevoie să aflu ip-ul de extern alocat routerului… router la care bineînteles că nu aveam acces. Cum încă nu aveam instalat nici măcar un navigator în mod text, m-am folosit de următoarea comandă în terminal, care mi-a scurtat vizita la clientul respectiv cu ceva timp…

wget -O - -q icanhazip.com

Așa că las aici notate până data viitoare când oricum, nu voi reuși să accesez ori pagina asta, ori cine știe ce se va întampla și voi pierde ceva timp căutând din nou să descopăr apa caldă și curentul electric.

10 Comenzi diverse în terminal

1. Pentru a vedea toate hosturile virtuale configurate în Apache2

$ /usr/sbin/apache2ctl -S 2>&1 | perl -ne '[email protected]*port\s+([0-9]+)\s+\w+\s+(\S+)\s+\((.+):.*@ && do { print "$2:$1\n\t$3\n"; $root = qx{grep DocumentRoot $3}; $root =~ s/^\s+//; print "\t$root\n" };'

2. Cautare pe Google.com – pentru funcționare sunt necesare pachetele curl și html2text

$ curl -A Mozilla http://www.google.com/search?q=textdecautat |html2text -width 80

3. Actualizează statusul pe Twitter

$ curl -u utilizator:parola -d status="Mesaj postat din consola" http://twitter.com/statuses/update.xml

4. Afișează o histogramă a celor mai încărcate minute dintr-un log de acces apache:

$ cat /var/log/apache2/access.log | awk '{print substr($0,0,12)}' | uniq -c | sort -nr | awk '{printf("\n%s ",$0) ; for (i = 0; i<$1 ; i++) {printf("*")};}'

5. Descarcă lista de ip-uri isc.sans.org și o adaugă la coada iptables

curl -s http://isc.sans.org/sources.html|grep "ipinfo.html"|awk -F"ip=" {'print $2'}|awk -F"\"" {'print $1'}|xargs -n1 sudo iptables -A OUTPUT -j DROP -d > 2&>1

6. Ce fișiere/directoare îmi ocupă spatiul pe disc

$ du -aB1m|awk '$1 >= 100'

7. Afișează toate IP-urile

$ ifconfig | awk '/ddr:[0-9]/ {sub(/addr:/, ""); print $2}'

8. Afișează toate conexiunile active la un gateway

$ cat /proc/net/ip_conntrack | grep ESTABLISHED | grep -c -v ^#

9. Caută fișiere duplicate după MD5 (și șterge hash-ul final) – operațiune de durată

$ find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-

10. Afișează evenimentele din calendarul personal ținut în Google Calendar

$ wget -q -O - 'URL/full?orderby=starttime&singleevents=true&start-min=2009-06-01&start-max=2009-07-31' | perl -lane '@m=$_=~m/(.+?)

Unde trebuie înlocuit URL adresa perspmală privată/publică a url-ului în format XML, și data pentru care se dorește vizualizarea în format YYYY-mm-dd

© 2009-2019 Alex. Burlacu
%d bloggers like this: