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 " " ).

duminică, 27 noiembrie 2011

Chattr

 Din ciclul: ”Începătorii îmi dau idei” (mă pun pe gânduri!?)...
 Observ o creștere a numărului celor ce vor să folosească interfața grafică ca root, să aibă drepturi depline. Da, să se logheze în X server (Kde, Gnome, Xfce, etc) ca root în loc de user normal, nu doar să ruleze Dolphin, Nautilus sau altă aplicație cu drepturi de root (kdesu, gksudo). Mă abțin de la comentarii inutile:
1- sincer cred că utilizatorul trebuie să aibă toate drepturile pe sistemul său, inclusiv pe acela de a-l face praf (inutilizabil); evident eu mă refer la drepturile ”morale”, nu la drepturile/ permisiunile rwx asupra sistemului de fișiere!;
2- n-am procedat niciodată așa, deci părerea mea nu are cum să fie relevantă.

 Așa că mă rezum la o sugestie: chattr, utilitar cu ajutorul căruia putem schimba atributele fișierelor/ directoarelor într-un sistem de fișiere GNU/ Linux.
 Bănuiesc că cea mai probabilă greșeală făcută de cei ce folosesc X ca root e ștergerea sau modificarea fișierelor/ directoarelor din alte locații decât /home/user. Cu ajutorul chattr putem face ca acele fișiere să fie de neșters chiar și pentru root sau owner, pentru orice utilizator de fapt, folosind opțiunea/ atributul -i (immutable= imuabil, invariabil, de neschimbat), care va face ca acel fișier/ director să nu poată fi șters, redenumit, modificat conținutul (adăugat sau șters ceva în el) sau create link-uri, indiferent de permisiunile asupra sa. Sintaxa comenzii e simplă (dată ca root sau cu drepturi de root cu sudo):
1- fișier:  chattr +i fișier  (chattr +i personale.txt)
2- director:  chattr -R +i director  (chattr +i setari-vechi)


 Pentru a renunța la ”imortalitatea” fișierelor/ directoarelor (da, rețineți, NIMENI nu va putea să le șteargă sau modifice...) vom folosi ca root chattr -i fișier, respectiv chattr -R -i director.
 În altă ordine de idei, chestia poate fi utilă oricui, pentru prevenirea ștergerii accidentale a unor fișiere/ directoare cu conținut important.
 De asemenea chattr mai are câțiva ași în mânecuță, dați un man chattr și vedeți care sunt aceștia.


 O altă posibilitate de a reduce riscurile ștergerii unor fișiere importante este folosirea opțiunii -i (sau --interactive) cu comanda rm. Sau cu mv și cp. Așa vom fi întrebați în consolă dacă CHIAR vrem să ștergem, mutăm sau copiem fișierul respectiv. Tastând y și apoi Enter acceptăm, cu n și Enter refuzăm. Putem chiar face niște aliasuri în /root/.bashrc (pentru userul root) și în /home/user/.bashrc pentru user, sau în /etc/skel/.bashrc pentru folosire globală. Aliasurile vor fi de forma:
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i 

În acest mod, de fiecare dată când folosim comanda rm fișier, de fapt comanda dată va fi rm -i fișier.



                

duminică, 13 noiembrie 2011

CLI Tricks

  Alte trucuri CLI aici: http://stressat.blogspot.com/2012/01/cli-tricks-2.html

  Înregistrare radio online cu mplayer:
mplayer http://ip:port/ -ao pcm:file=radio.wav  -vo null -vc null
mplayer http://89.238.252.130:7000/ -ao pcm:file=radio.wav  -vo null -vc null
      (exemplu pentru înregistrare radio EuropaFM în fișierul radio.wav)

  Captură webcam (pentru streamer trebuie să avem instalat pachetul xawtv):
-imagine:      streamer -c /dev/video0 -b 16 -o captură.jpeg
-video:          streamer -q -c /dev/video0 -f rgb24 -r 20 -t 00:30:00 -o captură.avi

Adăugați în .bashrc linia următoare: wiki() { dig +short txt $1.wp.dg.cx: }
După comanda source .bashrc sau repornirea consolei, la comanda wiki ”termen-de-căutare”, veți primi informații sumare de pe Wikipedia despre obiectul căutării.  
De exemplu wiki linux vă dă informații despre Linux. Sau dați comanda dig +short termen-căutare.wp.dg.cx în consolă.




 Dublează sonorul în mplayer (în loc de 200 putem folosi 300 pentru triplare volum, dar trebuie să fim atenți să nu ne stricăm boxele, e valabil DOAR pentru fișiere audio sau video cu sonor foarte slab...):
mplayer -softvol -softvol-max 200 fișier-video.avi
mplayer fișier-video.avi -aop volume:volume=200


  Dezactivare screensaver:
setterm -powersave off -blank 0
  Pentru a face permanentă această opțiune, adăugăm în fișierul ~/.xinitrc:
setterm -blank 0 -powersave off -powerdown 0
xset s off


  Setare dată din consolă:
date -s "ll/zz/aaaa oo:mm:ss"
date -s "11/13/2011 17:50:51"

  Setare rezoluție ecran:
xrandr -s lățimexînălțime
xrandr -s 1280x960

  Blocare desktop Kde (alternativă la Ctrl+L):
qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock

  Salvare manuale comenzi ca fișiere text:
man comandă > comandă.txt
man mkdir > mkdir.txt

  Salvare manuale ca .pdf:
man -t comandă | ps2pdf - > comandă.pdf
man -t mkdir | ps2pdf - > mkdir.pdf

   Aflare timp de execuție comandă:
time comandă
time mkdir new
[shogun@arch-stressat ~]$ time mkdir new
real     0m0.002s
user    0m0.000s
sys      0m0.000s

  Text în consolă dând impresia că e scris de altcineva, caracterele apar succesiv (bună pentru glume cu prietenii, faceți un alias în .bashrc):
echo “Textul dorit în terminal” | pv -qL 10
echo “Pleeeeeeease, heeeeeeeeeeeelp!!! Get me out of here!” | pv -qL 10

echo $USER te-a înjurat de $RANDOM ori | pv -qL 10


  Aflare grupuri din care face parte user:
id sau pentru output mai simplu id -Gn
[shogun@arch-stressat ~]$ id
uid=1000(shogun) gid=0(root) groups=0(root),10(wheel),91(video),92(audio),93(optical),95(storage),98(power),100(users)
[shogun@arch-stressat ~]$ id -Gn
root wheel video audio optical storage power users

  Adăugare user într-un grup:
gpasswd -a user grup
gpasswd -a shogun root

  Înlăturare user dintr-un grup:
gpasswd -d user grup
gpasswd -d dan wheel

  Creare cont de user cu /home, grup principal, grupuri adiționale, shell:
useradd -m -g users -G audio,video,root,wheel,power -s /bin/bash user-nou
 Apoi setăm parola:
passwd user-nou

  Ștergere cont de user cu tot cu /home, /var/spool/mail:
userdel -r user

  Setare schimb layout tastatură ro/ us :
setxkbmap -option grp:switch,grp:alt_shift_toggle us,ro

  Deschidere dacă e închis/ închidere dacă e deschis tray de la unitatea optică (CD-ROM, DVD-ROM):
eject -T

  Aflare temperatură hdd:
hddtemp /dev/sda

  Aflare temperatură CPU+ turație cooler CPU:
sensors | grep CPU

  Aflare temperatură GPU (nVidia/ trebuie instalat nvclock):
nvclock -T          (nvclock -i   => informații detaliate)


  Afișare detalii versiune Kde/ Qt:
kde-open -v

  Repetare ultima comandă ca root (dăm doar o singură comandă ca root...):
su -c "!!"
  Repetare ultima comandă cu drepturi de root (sudo):
sudo !!

  Rularea unei comenzi cu argumentele comenzii anterioare: comandă !* (de exemplu urmărim un videoclip cu vlc:  vlc Music/Videoclipuri/Adele\ -\ Someone\ Like\ You.flv , pentru a reda același videoclip cu mplayer dăm comanda: mplayer !* în loc de mplayer Music/Videoclipuri/Adele\ -\ Someone\ Like\ You.flv)

  Re-folosire comenzi, utilă în cazul comenzilor lungi, cu mulți parametri, din care poate am uitat unii. Comanda history | grep comandă (hystory | grep vlc de exemplu)va afișa lista comenzilor de acest fel, cu un număr de ordine în față. În loc să tastăm comanda respectivă, e suficient să tastăm !număr (!1476 dacă în fața comenzii este numărul 1476).

  Pentru a primi răspunsuri ”simpatice” (insulte...) dacă greșim parola la sudo adăugăm în /etc/sudoers la secțiunea ”Defaults specification” linia ”Default insults”, veți avea așa ceva:
## Defaults specification
Defaults insults

  În funcție de distribuția folosită, e posibil să nu funcționeze, poate dezvoltatorii nu au compilat sudo cu insults, verificați cu următoarea comandă dată ca root: strings `which sudo` | grep insult

  Instalați pachetul sl și tastați sl în consolă (sau veți tasta greșit ls...), veți urmări un trenuleț ”plimbându-se” prin consolă:

  Adăugați în .bashrc linia: export PROMPT_COMMAND="cd" . Indiferent de locul unde veți vrea să ajungeți cu cd cale-director veți sfârși tot în ~.

  Ștergere selectivă subdirectoare. Să presupunem că avem un director cu câteva subdirectoare (10-15, etc) și vrem să ștergem câteva din ele (3 să zicem). Putem face acest lucru ștergănd câte un director pe rând (rm -rf /cale/dir1,apoi rm -rf /cale/dir2, și-n fine rm-rf /cale/dir3, etc) sau putem lega comenzile (rm -rf /cale/dir1 ; rm-rf /cale/dir2 ; rm -rf /cale/dir3), sau mai simplu putem da comanda:  rm -rf /cale/{dir2,dir2.dir3}, de exemplu: rm -rf ~/Documents/Personale/{note,serviciu,foto}
 
 
   

sâmbătă, 12 noiembrie 2011

Imagini ca ASCII art și mozaic

 Chestii inutile, dar simpatice... :D

 Putem transforma imaginile (.png, jpg, .jpeg, etc)  în fișiere text în care pixelii imaginii sunt înlocuiți de caractere ASCII sau în imagini mozaic, formate din alte imagini. Vom lua o imagine (F_wallpaper.png) pe care o vom supune diverselor transformări:
 După cum observați am ales o imagine destul de mare (1280x800) și viu colorată, tocmai pentru ca transformările să fie cât mai vizibile...


 ASCII
 Pentru a transforma o imagine în artă ASCII avem nevoie de aalib (în funcție de distribuție pachetul se poate numi aa-lib, libaa, etc, în Arch Linux este aalib) și ascii. În consolă/ terminal dăm comanda:
asciiview imagine.png                 (de exemplu asciiview F_wallpaper.png)
și vom primi o fereastră cu rezultatul. Dacă facem un screenshot acelei ferestre putem salva fișierul modificat în ASCII:
 După cum se vede, rezultatul este alb-negru, dacă dorim și culori vom folosi libcaca și caca-utils (acest pachet e-n AUR), în același mod cum  am folosit asciiview (salvăm imaginea tot cu screenshot al ferestrei rezultate), deci comanda dată în consolă va fi:
cacaview imagine.png      (cacaview F_wallpaper.png)
 Acum seamănă mult mai bine cu imaginea originală.


 Mozaic
 Dacă vi se pare cam simplistă și brută transformarea imaginilor în ASCII puteți alege o imagine- mozaic, formată din multe alte imagini. Eu folosesc wallpaperele (și unele din screenshoturile mele) pe post de ”pietricele”/ thumbnails/ părți componente ale imaginii convertite. În primul rând avem nevoie de o aplicație ce va face conversia, metapixel, pixelize, sau altceva. Pixelize este un utilitar cu GUI, mai simplu de folosit (și mai rapid...), dar calitatea conversiilor sale este mult inferioară celei obținute cu metapixel, așa că voi prezenta metapixel detaliat și la final câteva cuvinte despre pixelize.

 1- Avem nevoie de un director cu imagini (fotografii, wallpapere, screenshoturi, preferabil în număr cât mai mare/ eu am vreo 500 și tot mi-ar prinde bine mai multe), și trebuie să creăm un director ce va conține baza de date pentru metapixel (mkdir .metapixel-db). Observați că directorul nou- creat va fi ascuns în /home/user și va avea un nume sugestiv, ușor de asociat aplicației și scopului.
 2- Vom pregăti acea bază de imagini pentru metapixel dând în consolă comanda:
 metapixel-prepare -r director-cu-imagini .metapixel-db
 (exemplu concret->   metapixel-prepare -r ~/Pictures .metapixel-db )
Dacă dorim putem alege și dimensiunile în care vor fi convertite imaginile de origine, adăugând comenzii precedente parametrii: --width=24 --height=24
(sau alte dimensiuni în funcție de preferințe). Astfel toate imaginile din directorul-cu-imagini vor fi redimensionate la 24x24 pixeli și vor fi mutate în .metapixel, unde vor constitui piesele din care se va construi mozaicul. Dacă nu dăm parametrii referitori la rezoluție în această comandă, sau dorim ca ”piesele” mozaicului să aibă altă dimensiune putem specifica acest lucru în comanda de conversie propriu- zisă.
 3- Acum putem trece la treabă, dând în terminal comanda:
metapixel --metapixel imagine-sursă.png  imagine-rezultat.png -l director-sursă --scale=5 --distance=10
 Exemplul concret:
metapixel --metapixel F_wallpaper.png  F_wallpaper-mozaic.png -l .metapixel --scale=5 --distance=10
Parametrii ce pot fi folosiți:
--scale     = mărim imaginea rezultată de 5 ori față de cea sursă, iar după terminarea conversiei o redimensionăm/ micșorăm la loc, astfel calitatea imaginii obținute va fi mult mai bună. Cu cât factorul de mărirre este mai mare, imaginea va fi mai bună, dar și timpul de procesare va crește simțitor, ca și dimensiunea fișierului respectiv, la un factor de 35 mi-a rezultat o imagine enormă, de aproximativ 600 MB, timpul de prelucrarea fiind de aproximativ 60 minute, pe un PC bunicel, dacă aveți componente slabe, mulțumiți-vă cu valori în jur de 4-10!!! Nici să nu vă gândiți să deschideți acea imagine, după terminarea procesului de conversie redimensionați-o la valori normale, fie în consolă/ trebuie să aveți instalat pachetul imagemagick (convert -resize 1024 imagine.png imagine-dorită.png / acestă comandă va redimensiona imaginea la valoarea de 1024 pixeli lățime, înălțimea fiind calculată în raport cu lățimea... dacă preferați puteți pune valoarea exactă 1024x768, sau ce valori doriți), fie cu altceva (eu mai folosesc Kim4 în Dolphin sau Krusader după cum am scris aici: http://stressat.blogspot.com/2011/06/dolphin.html).
 Modul de lucru al metapixel este simplu, în primul rând împarte imaginea în sectoare, le scanează și observă culoarea predominantă sectorului respectiv, caută în baza de date o imagine cât mai apropiată și în ultima fază înlocuiește sectorul cu imaginea aleasă.
 Câțiva parametri folosiți:
--distance     = alegem distanța dintre locurile în care poate fi folosită aceeași imagine/ parte componentă a mozaicului; dacă baza noastră de date conține puține imagini e bine ca valoarea atribuită acestui parametru să fie mică.

--width (respectiv --height)    = stabilim dimensiunile imaginilor fragment (lățime și înălțime); pentru o imagine cât mai aproape de original acceste valori vor fi mici.

-l (--library)   = directorul bază de date (în exemplul meu .metapixel-db).

--cheat   = gradul de opacitate (între 0 și 100).
 Pentru alți parametri posibili dați comanda metapixel --help în consolă.
 Iată câteva imagini rezultate, imaginile diferă datorită dimensiunii fragmentelor componente și gradului de mărire, cu cât dimensiunea imaginilor fragment este mai mică și factorul de mărire este mai mare, cu atât este calitatea imaginilor mai bună (dar crește și timpul de procesare):

    --scale=4

    --scale=8

    --scale=15


 Pixelize
 Cum întotdeauna unii utilizatori vor evita CLI, pentru aceștia prezint altă aplicație pentru transformat imaginile în mozaic: Pixelize.
1- instalăm pixelize.
2- creăm baza de date necesară:
make_db director-cu imagini/*       (make_db Pictures/* în cazul meu)
3- pornim aplicația tastând pixelize în consolă sau krunner și apăsând Enter. Vom primi fereastra următoare:

 Încărcăm o imagine cu clic pe ”File”- Open- navigăm prin directoare (afișate în partea stângă a ferestrei) și fișiere (afișate în panoul din dreapta)- selectăm o imagine- acum dăm clic pe ”Options”- Options- dăm valorile dorite la dimensiunea sau numărul imaginilor componente, factorul de apropiere admis (duplicate)- Dismiss-

iar clic ”Options”- Render- așteptăm să se termine procesarea- clic ”File”- Save- alegem locația și numele imaginii rezultate- închidem.

 Imaginea sursă:

  Imaginea mozaic rezultată (din câte am observat, nu se pot totuși modifica la opțiuni dimensiunea fragmentelor, numărul lor, depărtarea între fragmente identice!):

 Pentru a putea face comparații corecte între metapixel și pixelize, am prelucrat și prima imagine cu pixelize:

Back to top