Faceți căutări pe acest blog

marți, 20 decembrie 2011

Date/ Ora și data

 Se apropie Revelionul, vor începe iar transmisiile TV succesive, în direct din diverse țări care trec în noul an. Nu-i rău, dar există o metodă mai bună. Mai bună, mai rapidă, mai cool, mai sexy, în fine, o metodă CLI...
 Bănuiesc că toți utilizatorii GNU/ Linux folosesc, sau măcar cunosc comanda date, astfel putem afla ora și data curentă, dar poate nu toți știu cum putem afla orele altor țări, indiferent de continent sau zonă geografică, folosindu-ne de TZ (time zone). E suficient să dați comanda man date și să pierdeți cu folos câteva minute și veți ști cum... Pa!







 Ok, ok, glumesc, și eu sunt comod, citiți în continuare.  :D
1- Deschidem o consolă/ terminal;
2- Opțional, putem verifica outputul date, va afișa ora/ data locală;
3- Dăm comanda tzselect, veți primi lista continentelor și oceanelor, vă alegeți locația și tastați cifra din fața acesteia (1 pentru Africa, 2 pentru Americi, etc) și apoi Enter;


4- În lista nou apărută vor apărea țările din acel continent, puneți iarăși numărul din fața țării, Enter;
5- În cazul țărilor mici, veți primi un output simplu:
The following information has been given:

        France

Therefore TZ='Europe/Paris' will be used.
Local time is now:      Tue Dec 20 18:24:19 CET 2011.Universal Time is now:  Tue Dec 20 17:24:19 UTC 2011.
Is the above information OK?
1) Yes
2) No





 Deci am aflat timpul local, timpul universal și, ceea ce doream de la început, ”codul” necesar pentru aflarea datei și orei într-un mod mai direct. Vom reveni la acest cod imediat. Tastăm 1 și Enter pentru închidere sau 2 pentru căutarea altei ore.
6- În cazul țărilor mari, precum Rusia, USA, Brazilia, China, etc, este evident că datorită întinderii teritoriale mari, vom avea de-a face cu mai multe fusuri orare, deci după alegerea țării, trebuie ales fusul orar, pentru ușurința utilizării se folosesc ca exemple regiunile. Alegem fusul orar reprezentat prin regiune, tastăm cifra din fața acestuia/ acesteia, Enter. Aflăm ce ne interesează.
The following information has been given:

        Brazil
        Rondonia

Therefore TZ='America/Porto_Velho' will be used.
Local time is now:      Tue Dec 20 13:31:32 AMT 2011.Universal Time is now:  Tue Dec 20 17:31:32 UTC 2011.
Is the above information OK?
1) Yes
2) No




 La fel, cu 1 și Enter ieșim, cu 2 și Enter reluăm căutarea noastră pe alte meleaguri.

 Evident, de acum înainte știm care e mecanismul de aflare a orei exacte pe la mama-dracului, pe unde-a înțărcat mutu' iapa, sau alte asemenea locații exotice, știm cum arată codul acesta TZ, deci vom folosi direct comanda: TZ='Europe/Moscow' date sau putem chiar face economie de efort cu TZ=Europe/Moscow date. Putem evita oricum tzselect, folosindu-ne de tiparul următor:
 General:        TZ=continent/fus-orar date
 Particular1:   TZ=continent/capitală date       TZ=Africa/Cairo
 Particular2:   TZ=continent/nume-oraș date   TZ=America/Phoenix


 Acum, dacă cineva are mania de-a se crede pe alți coclauri, poate seta alt time zone cu  export TZ=America/Los_Angeles de exemplu, iar date va afișa ora de acolo. Dacă-și revine la normal, poate anula această setare cu unset TZ, dacă nu, poate adăuga export TZ=America/Los_Angeles în .bashrc pentru efect permanent... :(



 PS: maaaaaaaaaamă, acum bag de seamă că numărul materialelor despre CLI e mai mult decât dublu față de cel despre Kde (27 vs 12)... Și io care nu suport linia de comandă... :(

sâmbătă, 17 decembrie 2011

Wash

 Tocmai am descoperit un nou utilitar CLI, numit Wash de autorul său, shpelda , deci mă grăbesc să-i anunț pe cei ce s-au obișnuit cu stilul căutărilor de pe Google (whispering). Dacă folosiți Arch Linux instalați pachetul cu yaourt -S wash, ceilalți vor trebui să descarce pachetul de aici: http://code.google.com/p/bash-whispering/source/checkout (sau dând în terminal comanda: git clone https://code.google.com/p/bash-whispering/,comandă care va descărca pachetul în directorul curent, în subdirectorul bash-wispering, mă rog vă descurcați voi, nu mai caut acum să văd ce și cum...) .
 După instalare, comanda wash --login vă loghează în sesiunea wash, wash --help vă furnizează ceva informații, în fine, după wash --login, orice tastați în terminal va afișa toate variantele posibile de comenzi, directoare, etc. Și aliasuri! Și funcții bash!!! :D De fapt, cu excepția modalității de afișare a comenzilor disponibile și a faptului că deschiderea unui nou tab (Ctrl+Shift+T) se produce într-o sesiune bash, nu wash, totul este exact la fel ca într-o sesiune normală bash, shortcuturile (Ctrl+a, Ctrl+e, etc) funcționează, se pot apela ultimele comenzi stocate în history cu tastele săgeți, și toate celelalte.
 Funționează ok în Kde 4.7.4 (konsole și yakuake), în tty (tty simplu, fbterm, screen, byobu și tmux).
 Pentru închiderea sesiunii wash puteți folosi metodele obișnuite: Ctrl+D sau exit.

    Konsole:

   Yakuake:

   Screen:

   Byobu:

   Tmux:

 

 Sursă: https://bbs.archlinux.org/viewtopic.php?pid=1029446#p1029446

Functii bash

  Tot am vorbit despre aliasuri (sinonime/ înlocuitoare de comenzi), să vedem ce mai putem face cu comenzile, cum ne putem simplifica viața în terminal, folosind funcțiile bash, funcții care se comportă în mod similar cu aliasurile, dar la un nivel superior! Adică cu ajutorul funcțiilor putem utiliza o serie de comenzi, nu una singură! Utilizând o funcție bash, putem ”stoca/ depozita” câteva comenzi în fișierul .bashrc, comenzi pe care le putem executa ulterior.
 Sintaxa unei funcții este în principiu simplă:
funcție () {
 comandă
}      (se poate scrie și: funcție () { comandă } )
 Comanda ”funcție” dată în terminal va executa de fapt comanda setată funcției, ”comandă”.
 Dacă comanda are mai multe argumente, acestea vor fi introduse între parantezele rotunde:
funcție (argument1,argument2,...,argumentN) {
 comandă
 }
iar comanda va fi apelată cu: funcție argument1 argument2 ... argumentN

 Haideți să vedem câteva exemple concrete:
 hello () { echo 'Hello world!' ; }              => tastând ”hello” (fără ghilimele...) în consolă va fi afișat mesajul: ”Hello world!”
 salut () { echo "Salut $1, ce faci?" ; }    => comanda ”salut dan”, va afișa in consolă textul ”Salut dan, ce faci?” (putem folosi după cum vedeți variabile: $1 este primul cuvânt de după comandă...).
  salut () { echo "Salut $USER, ce faci?" ; }   => comanda ”salut” va afișa textul ”Salut nume-utilizator, ce faci?”. Observați că textul ce urmează să fie afișat nu este încadrat între ' ci între " ? Motivul? Ambele tipuri de ghilimele ( ' și " ) se pot folosi la aliasuri și funcții, ambele indică interpretorului de comenzi Bash să ignore spațiile libere dintre cuvinte și să folosească stringul (șirul) ca un singur argument, dar ' va ignora caracterele speciale (cum ar fi variabilele $1/adică primul argument de după comandă, sau $USER/ adică userul logat în shell-ul curent), iar " va interpreta caracterele speciale! ' și " se comportă similar și la aliasuri...
 
 Sincer să fiu, eu sunt în acest stadiu, adică pot crea niște funcții simpliste... Dar puteți găsi pe internet tot felul de funcții utile, unele trebuie (eventual...) doar puțin adaptate.
 Spuneam că funcțiile fac același lucru ca și aliasurile. Să presupunem că dorim să avem un sinonim/ prescurtare/ înlocuitor pentru o comandă, de exemplu: ifconfig -a| grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'. Comanda ifconfig setează sau dă informații despre o interfață network, dar noi vrem să aflăm doar adresa MAC, asta va face comanda anterioară, dar fiind destul de lungă și având ceva parametri putem seta un alias sau o funcție bash.
 Alias:   
alias mac="ifconfig -a| grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'"
 Funcție:
macadd () {
ifconfig -a| grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
}

Dacă adăugăm aliasul sau funcția (sau și una și alta) în .bashrc și dăm în consolă comanda mac sau macadd, primim același output, și anume adresa MAC.


 După cum se poate observa, outputul e același, cu alias mac și type macadd putem vedea sintaxa aliasului și a funcției.

Să mergem mai departe, n-am uitat că am scris mai sus că o funcție poate executa mai multe comenzi. Știți (cred) cum puteți afla diverse informații despre mașina/ sistemul din dotare, uname -a, uptime, free -m, etc., dar cu siguranță e preferabil să facem economie de efort.
mach() {
    echo -e "\nMachine information:" ; uname -a
    echo -e "\nUsers logged on:" ; w -h
    echo -e "\nCurrent date :" ; date
    echo -e "\nMachine status :" ; uptime
    echo -e "\nMemory status :" ; free -m
    echo -e "\nFilesystem status :"; df -h
}

Plasați această funcție în .bashrc, reporniți consola (sau dați source .bashrc în consola deja deschisă) și dați comanda mach, e altă treabă, nu? În plus, puteți schimba unele din comenzi, sau puteți adăuga altele, sau elimina unele din ele.

 Începătorii nu prea cunosc tipul arhivelor de pe Linux, nu știu cum să le dezarhiveze, există mai multe tipuri, fiecare cu anumite comenzi, parametri, etc. Ce părere aveți de funcția următoare?
extract () {
   if [ -f $1 ] ; then
       case $1 in
        *.tar.bz2)      tar xvjf $1 && cd $(basename "$1" .tar.bz2) ;;
        *.tar.gz)       tar xvzf $1 && cd $(basename "$1" .tar.gz) ;;
        *.tar.xz)       tar Jxvf $1 && cd $(basename "$1" .tar.xz) ;;
        *.tar)          tar xvf $1 && cd $(basename "$1" .tar) ;;
        *.tbz2)         tar xvjf $1 && cd $(basename "$1" .tbz2) ;;
        *.tgz)          tar xvzf $1 && cd $(basename "$1" .tgz) ;;
        *.bz2)          bunzip2 $1 && cd $(basename "$1" /bz2) ;;
        *.rar)          unrar x $1 && cd $(basename "$1" .rar) ;;
        *.gz)           gunzip $1 && cd $(basename "$1" .gz) ;;
        *.zip)          unzip $1 && cd $(basename "$1" .zip) ;;
        *.Z)            uncompress $1 && cd $(basename "$1" .Z) ;;
        *.7z)           7z x $1 && cd $(basename "$1" .7z) ;;
        *)              echo "'$1' cannot be extracted via extract()" ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
Indiferent de tipul arhivei pe care vrem s-o dezarhivăm, comanda extract nume-arhivă dată în terminal va ști cum să se descurce, chiar dacă arhiva e criptată (cu condiția să puneți parola corectă la cerere!). se poate observa că această funcție se descurcă cu 12 tipuri de arhive!

 Se vede cum funcția/ comanda crează directoarele necesare și extrage conținutul arhivei.

Tot felul de alte sarcini se pot realiza foarte simplu și comod folosind aliasuri sau funcții bash.

 Listare fișiere după extensie:
lsex() {
find . -type f -iname '*.'${1}'' -exec ls -l {} \; ;
}


 Listare directoare, după dimensiuni:
dirsize ()
{
du -shx * .[a-zA-Z0-9_]* 2> /dev/null | \
egrep '^ *[0-9.]*[MG]' | sort -n > /tmp/list
egrep '^ *[0-9.]*M' /tmp/list
egrep '^ *[0-9.]*G' /tmp/list
rm -rf /tmp/list
}


Căutare informații pe Wikipedia:
wiki() {
      dig +short txt $1.wp.dg.cx;
}


Aflare IP (pentru utilizatorii de lynx):
myip () {
lynx -dump http://checkip.dyndns.org:8245/
}


 Aflare IP (pentru utilizatorii de w3m):
myip1 () {
w3m -dump http://checkip.dyndns.org:8245/
}


 Calculator în terminal:
calc () {
 echo "$*" | bc -l;
}



 Din păcate nu pot preciza sursele de unde am luat aceste funcții, în principal din cauza faptului că sunt copiate de-a lungul timpului de pe diverse forumuri... Contribuția mea este doar modificarea (nesemnificativă aș zice...), a unora din ele.
 Cei ce vor să învețe câte ceva, se pot inspira de aici:
http://docs.securityorg.net/Bash.htm
 Important e faptul că folosirea aliasurilor și a funcțiilor bash vă poate schimba complet percepția asupra liniei de comandă... :D

miercuri, 14 decembrie 2011

Alias

 Dacă folosiți linia de comandă, ați descoperit că uneori este destul de incomod și neproductiv să tastați comenzi lungi, fără să pomenim faptul că trebuie memorate tot felul de opțiuni și parametri. Aliasurile sunt redenumiri/ prescurtări ale comenzilor. Editați fișierul .bashrc, veți observa că deja există în acest fișier aliasuri (alias ls='ls --color=auto' de exemplu). Așa că putem folosi și alte aliasuri, adăugând în fișierul ~/.bashrc (adică /home/user/.bashrc) o linie de forma: alias nume-dorit='comandă-lungă-și-greu-de-memorat'. De exemplu, am un alias pentru înlocuirea wallpaperului clasic cu un fișier video:
alias artificii="xwinwrap -ni -fs -s -st -sp -b -nf -- mplayer -wid WID -nosound -vo gl2 -ao alsa ~/Downloads/fireworks_pal.mpeg -loop 0"
 Ei bine, dacă dau în consolă comanda artificii, shell-ul știe că de fapt comanda este xwinwrap -ni -fs -s -st -sp -b -nf -- mplayer -wid WID -nosound -vo gl2 -ao alsa ~/Downloads/fireworks_pal.mpeg -loop 0 și se comportă ca atare, în acest caz îmi pune videobackdround-ul dorit...
 Poate ați observat că în primul exemplu comanda normală ce va fi înlocuită de alias este pusă între caracterele ' ' , iar exemplul concret între caracterele " " . Ambele variante sunt valabile, sunt caracterele de pe tasta de lângă tasta Enter, cea cu virgulă jos și 2 virgule sus (pentru layout tastatură US, nu RO).
 Ok, am setat un alias, pentru a putea folosi acel alias sau închidem/ repornim consola, sau, mai simplu dăm comanda source .bashrc, astfel ca shell-ul bash să știe de modificarea făcută.

 Dacă avem multe aliasuri, uneori e posibil să uităm unele din ele, caz în care e suficient să dăm comanda alias în consolă, și outputul va conține TOATE aliasurile noastre.

  Dacă știm aliasul, dar nu reținem exact ce face, sau vrem să-i vedem sintaxa comenzii (toți parametrii), e suficient să dăm comanda type --all alias-respectiv.

 Pentru a vedea toate aliasurile create unei comenzi putem da comanda: alias | grep comanda-respectivă sau cat .bashrc | grep comanda-respectivă, sau grep comanda-respectivă .bashrc (grep mplayer .bashrc de exemplu).
 


 Mai trebuie menționat faptul că aliasurile din /home/user/.bashrc sunt valabile doar pentru userul respectiv, dacă dorim aliasuri pentru contul root, acestea vor fi puse în fișierul /root/.bashrc, iar dacă avem mai multe conturi de user, și dorim aliasuri general valabile/ utilizabile de toți userii, adăugăm aceste aliasuri în fișierul /etc/skel/.bashrc.

 Pentru a eluda un alias putem folosi în fața comenzii caracterul \. Cum spuneam, în .bashrc este setat implicit  alias ls='ls --color=auto', deci comanda ls este interpretată de shel ca fiind ls --color=auto, pentru afișarea fără culori folosim \ls.

duminică, 11 decembrie 2011

Criptare fișiere/ directoare

 Pentru criptarea fișierelor și directoarelor din linie de comandă; după comanda dată vi se va cere parola ce va proteja arhiva respectivă (Enter password sau Enter passphrase, în funcție de utilitarul folosit):

1- Comprimare/ criptare
rar a -p fișier-criptat fișier-inițial
rar a -p director-criptat director-inițial
rar a -p personale.rar personale   => comprimă/ criptează fișierul ”personale” sub numele ”personale.rar”

zip -e nume-fișier-cripat nume-inițial-fișier
zip -er nume-director-criptat nume-inițial-director
zip -e personale.zip personale    => va comprima și cripta fișierul personale sub numele personale.zip

gpg -c nume-fișier
gpg -c personale   => va rezulta un fișier criptat sub numele personale.gpg


2- Decomprimare/ decriptare (vi se va cere și acum parola...)
unrar e fișier-criptat
unrar e director-criptat
unrar e personale.rar   => va decomprima/ decripta fișierul personale.rar

unzip nume-fișier-criptat
unzip nume-director-criptat
unzip personale.zip   => va decomprima/ decripta fișierul personale.zip

gpg -d nume-fișier-criptat
gpg -d personale.gpg   => va decripta fișierul personale.gpg

sâmbătă, 3 decembrie 2011

Unde ești mă? Kfind, locate, find...

 Pentru căutarea (mai precis pentru găsirea...) unor fișiere sau directoare, putem folosi atât unelte cu interfață grafică cât și utilitare CLI. Din prima categorie mă voi referi la utilitarele prezente implicit în KDE.

 Kfind
 Kfind este instalat implicit în majoritatea distribuțiilor ce folosesc Kde ca mediu grafic și poate fi lansat în următoarele moduri:
1- clic pe categoria ”Find Files/Folders” din meniul Kde clasic (în cazul că avem meniul Kde Kickoff , stil de meniu ce conține caseta ”Search”, vom căuta în acea casetă);









2- cu ajutorul krunner: în caseta apărută prin apăsarea combinației de taste Alt+F2 tastăm kfind, apăsăm Enter;
3- din consolă, cu comanda kfind;
4- asigurând aplicației o combinație personală de taste: Meniu- Edit Applications...- Find Files/Folders- Advanced- Current shortcut key- clic pe ”None”- apăsăm combinația dorită- clic ”Save” din bara de unelte din partea de sus a ferestrei; alternativ putem seta acest shortcut/ hotkey din System Settings- Shortcut and Gestures- Custom Shortcuts- Edit- New- Global shortcut- Command/URL- în loc de New Action scriem kfind- în tabul Action scriem kfind- în tabul Trigger clic pe None- apăsăm combinația de taste- Apply.









5- direct din managerul de fișiere:
- Dolphin- Find (sau cu tasta F12), sau Dolphin- Settings- Configure Toolbars- tragem cu mouse-ul ”Find” din partea stângă a ferestrei în partea dreaptă (sau clic pe săgeata spre dreapta)- Apply- Ok și pe viitor vom avea în bara de unelte din partea de sus a ferestrei Dolphin butonul ”Find”.
- Krusader: Tools- Search (sau Ctrl+s) sau cu butonul ”Search” din bara de unelte.


 Ok, am văzut cum pornim kfind, hai să vedem ce poate acesta.
1- Kfind poate căuta fișiere/ directoare după nume și locație (tabul Name/Location). În aseta ”Named” trecem numele căutat, în caseta ”Look in” alegem unde anume va căuta kfind,  putem bifa/ debifa căsuțele referitoare la căutarea în subdirectoare, căutarea obiectelor ascunse, ignorarea majusculelor (case sensitive), iar cu clic pe ”Find” sau apăsând Enter începem căutarea.


2- În tabul ”Contents” putem alege tipul fișierelor căutate, sau text conținut.


3- În tabul ”Properties” putem rafina căutarea după mulți alți parametri:
- timp: căutare fișiere create/ modificate într-un anumit interval de timp, sau în cursul ultimei ore, zile, etc;
- dimensiune: căutare fișiere de exact, cel puțin, cel mult x Kb, Mb, Gb;
- proprietar: căutare doar a fișierelor ce aparțin unui user sau grup.


Dacă folosiți mult consola/ terminalul, sau dacă vă aflați intr-un tty unde (evident), nu puteți folosi uneltele interfeței grafice, există utilitare CLI pentru căutare: locate și find, pachete ce vin implicit în unele distribuții, în altele trebuie instalate locate (sau mlocate, slocate) și find..

 Locate
 Este o aplicație mai modestă, care doar localizează fișierele căutate după nume. În prima fază trebuie dată comanda updatedb ca root, pentru indexarea fișierelor, apoi putem căuta un obiect oarecare cu comanda locate fișier (locate captura, de exemplu).

 Find
 Ei, acum putem vorbi de un utilitar inteligent, ce folosește abordarea brute-force cu ajutorul căruia putem rafina la maxim căutarea fișierelor noastre. Find poate căuta fișiere după:
- nume: parametrul -name (case sensitive= ia în considerație majusculele, deci numele EXACT) sau -iname (case insensitive= nu ia în considerație majusculele, va afișa de exemplu și captura și Captura); comanda va fi de genul: find /etc -name .bashrc, și putem căuta în mai multe locații odată: find /etc /home/dan /home/shogun -name .bashrc, sau dacă nu prea știm unde anume să căutăm putem căuta direct în directorul rădăcină /: find / -name .bashrc. Pentru căutările în afara directorului nostru /home, e bine să folosim contul de root pentru a preveni mesajele de eroare în privința permisiunilor, dar nu e obligatoriu.
- dimensiune: param.etrul -size (-size 200M = dimensiune de exact 200Mb, -size +200M = mai mari de 200 Mb, -size -200 = mai mici de 200 Mb/ 200Mb e un exemplu, puteți trece ce valoare doriți);
- permisiuni: parametrul -perm (de exemplu pentru a căuta în /usr/bin toate fișierele cu permisiuni 755 vom da comanda: find /usr/bin -perm 755);
- tip: parametrul -type urmat de tipul fișierelor căutate (-type f= fișiere normale, d= directoare, p= pipe, l= link, etc);
- proprietar: parametrul -user, astfel putem căuta doar fișierele unui anumit user (find ~/Documents -user shogun);
- timpul creării/ modificării: parametrii -mtime pentru căutare pe bază de zile (se caută implicit după perioade de 24 de ore, -mtime 0 și -mtime -1 se referă la ziua curentă, -mtime +2 se referă la fișierele mai vechi de două zile, -mtime -7 la fișiere mai recente de 7 zile, etc) și -mmin pentru căutare a obiectelor mai recent create (-mmin -10 va căuta doar fișierele create în ultimele 10 minute).


 Mai sunt parametri utili, dar hai să vedem ce putem face cu obiectele descoperite, de găsit le-am găsit, scopul oricum ar fi altul, nu? Putem șterge aceste fișiere (find -name test01 -delete   = această comandă caută fișierul numit test01 și îl șterge la găsire: ATENȚIE !!! va șterge TOATE fișierele găsite care se potrivesc tiparului folosit la căutare... :( ), putem reda un fișier audio/ video (find -iname ying* -exec mplayer {} \;   = comandă ce va căuta fișiere al căror nume începe cu ying sau Ying și le va reda cu mplayer; find -name *.avi -exec mplayer {} \;   = comandă ce va căuta ORICE/ TOATE fișierele .avi și le va reda cu mplayer, într-un gen de playlist...).


 Pentru alte amănunte dați man find în consolă.

 UPDATE:  dacă la rularea unei comenzi de genul find -name *.avi -exec mplayer {} \; primiți eroarea: find: paths must precede expression:..., modificați comanda în: find -name '*.avi' -exec mplayer {} \; sau find -name "*.avi" -exec mplayer {} \; (încadrați ”ținta”, tiparul căutării între ' ' sau " " ).
Back to top