sIMON - 21 Avgust, 2007

Počitnice… pa malo lenobe, pa malo gužve, pa je nastala takšna luknja med objavami…

Je Vini, medtem ko sva reševala svet s hardlinki navrgel pobudo za današnji post.

Torej hardlink na unix datotečnih sistemih, veliko uporabljen, malo poznan, veliko manj kot njegov primitivni sorodnik symlink.

Nekako takole gre: na datotečnem sistemu ima vsaka datoteka svoj unikatni id, reče se mu “inode”.

Direktorijska struktura datotek je tabela, ki ima vnose (imena datotek), ki so kazalci na id-je datotek, torej inode. Ko se mi sprehajamo po tej strukturi datotek in zahtevamo datoteko, sistem preveri v tabeli kateri inode je pod datotečnim imenom, ga poišče po tej številki in servira.

Hardlink je možnost, da v direktorijski strukturi kažeta dve imeni datotek na isti id datoteke / inode.

V praksi:
# vpišemo vrstico "vsebina" v novo datoteko
:~/test simon$ echo vsebina >datoteka

# pregledamo vsebino datoteke
:~/test simon$ cat datoteka
vsebina

# pregledamo vsebino direktorija
:~/test simon$ ls -al
total 8
drwxr-xr-x 3 simon simon 102 Aug 20 23:53 .
drwxr-xr-x 44 simon simon 1496 Aug 20 23:52 ..
-rw-r--r-- 1 simon simon 8 Aug 20 23:53 datoteka

# naredimo hardlink datoteke "datoteka" v novo ime "hardlink"
:~/test simon$ ln datoteka hardlink

# pregledamo vsebino direktorija
:~/test simon$ ls -al
total 16
drwxr-xr-x 4 simon simon 136 Aug 20 23:53 .
drwxr-xr-x 44 simon simon 1496 Aug 20 23:52 ..
-rw-r--r-- 2 simon simon 8 Aug 20 23:53 datoteka
-rw-r--r-- 2 simon simon 8 Aug 20 23:53 hardlink

# pregledamo vsebino datoteke hardlink
:~/test simon$ cat hardlink
vsebina

# zapišemo vrtico "novavsebina" v datoteko hardlink
:~/test simon$ echo novavsebina >hardlink

# jasno se s tem spremeni vsebina druge
:~/test simon$ cat datoteka
novavsebina

# pa še način, da vidimo da datotečna imena kažeta na isti "id datoteke / inode" - prva kolona
:~/test simon$ ls -li
1082466 -rw-r--r-- 2 simon simon 12 Aug 21 00:01 datoteka
1082466 -rw-r--r-- 2 simon simon 12 Aug 21 00:01 hardlink

Zakonitosti hardlinkov:

  • hardlink-ate lahko samo datoteke,
  • hardlink do datoteke lahko postavite samo na isti datotečni sistem (na enak mountpoint), linkanje med diski torej ni mogoče,
  • vsebina datoteke bo iz diska izbrisana takrat, ko nanjo ne bo kazal več nobeden link. Torej ko zbrišete kateregakoli izmed dveh datotek, bo vsebina še vedno v drugi datoteki,
  • število hardlinkov datoteke lahko vidite v drugi koloni ukaza ls (bodite pozorni na primer zgoraj, ko je bila ena datoteka je bilo število hardlinkov 1, nato 2).

Uporabnost ? povsod kjer se enake datoteke pojavljajo v različnih direktorijih

  • pri sistemskih datotekah virtualnih okolij “jail na FreeBSD”, kjer ima vsak jail kopijo celotnega sistema,
  • varnostnih kopijah, pri čemer imamo lahko za vsak dan celotno direktorijsko strukturo strežnika, zares pa bo ena datoteka zasedla samo enkratno velikost.
  • blackbox programi, programi ki znajo opravljati već funkcij, glede na to kakšno ime smo jim dali. (primer /rescue na FreeBSD)
  • razno :-)

Pa primitivni bratec symlink ?

Symlink pa pod datotečno ime zapiše pot do datoteke, na katero kaže, torej samo tekstovni opis kje najdemo datoteko.

Zakonitosti symlinka:

  • symlink-ate lahko direktorije in datoteke,
  • symlink lahko uporabljate med večimi diski / mount pointi,
  • symlink se ne ozira na to, če datoteka na katero kaze obstaja ali ne,
  • datoteka bo iz diska odstranjena, ko odstranimo original, torej datoteko na katero kažejo ostali symlinki.

Kaj uporabiti ? Seveda odvisno od primera, če želite samo malo organizirati datotečno strukturo in imeti ene stvari “pri roki”, bližje, potem symlink.

So pa stvari ki jih symlink ne zna, kot recimo če želite datoteko ki se nahaja v direktoriju do katerega uporabnik načeloma nima dostopa, deliti z njim, potem narediti hardlink v uporabniku viden prostor.

Ko želite, da se dodoteke obnašajo kot datoteke, ko jih želite sinhronizirat z rsyncom itd.

Z Vinijem sva namreč imela primer, pri katerem sva imela organizacijo datotečnih imen po nekem svojem ključu, ki pa, jasno, naročniku ni bil povšeči :-) Rešil je hardlinking, dve popolnoma drugačni ureditvi datotečnih imen, pod njima pa enake datoteke.

Toliko da prelomim ta molk,
kmalu več, noč,
s.

sIMON - 14 Julij, 2007

Verjetno se vam je že zgodilo, da ja kakšen ukaz dlje časa trajal in niste imeli časa / možnosti, da imate za čas trajanja ukaza odprto terminalsko povezavo do strežnika.

Programček screen rešuje ta problem.

Zaženete screen z ukazom screen, potrdite z entrom disclaimer in znajdete se v ukazni lupini, ki se zdaj nahaja “znotraj” screena. Začenete ukaz ki ga želite in ko se izvaja, pritisnete tipke CTRL+A Z, torej stisnete CTRL, ko ga držite pritisnete še A, spustite obedve tipki in pritisnete Z.

dobili boste sporočilo v stilu:

[1]+ Stopped screen

in mirno se lahko odjavite iz sistema.

Ko se kasneje ponovno prijavite v sistem, napišite ukaz: screen -r in screen bo nadaljeval terminalsko sejo, v kateri ste prej zagnali ukaz. Videli boste tudi izpis programa za nazaj.

Še ena luštna… če se tudi prijatelj prijavi v isti sistem z enakim uporabnikom in ste vi v screen-u, lahko izvede screen -x, pri čemer se bo vključil v vašo sejo in gledal kaj počenjate, lahko tudi kaj napisal… Mogoče tudi primerno za kaj komu pokazati…

Če bo interes bom napisal o screenu še kaj več, je namreč tudi odlično orodje za vsakodnevno terminalsko delo, ker nam omogoča preko ene terminalske seje več odprtin lupin v stilu “tab”-ov.

s.

sIMON - 12 Junij, 2007

spet ena ssh-jeva…sshkeychain

Sistemci po x letih še vedno pišejo gesla, ko se prijavljajo na svoje strežnike. Takšen sistemc vpiše svoje geslo x-krat (where x > 50) na dan in je po možnosti enako za vseh svojih 120 strežnikov. Takšno eno za vse geslo uporablja že 5 let, ker se je nanj pač navadil.

Da ne govorim o izgubi časa, varnosti ki pade na vseh točkah, pa še kaj.

ssh je že zelo lep čas nazaj nudil rešitev. SSH ključi.

Sistem deluje na principu privatnega in javnega ključa. Javni ključ izpostavljaš po strežnikih do katerih želiš dostopati, privatnega držiš samo na svoji delovni postaji. Privatni ključ ima svoje geslo.

Tako lahko do strežnikov dostopaš samo, če imaš privatni ključ in seveda geslo zanj.

V tej fazi torej niste naredili veliko, uvedli ste nov nivo varnosti (poleg gesla še ključ, še vedno pa je potrebno pisati geslo, tokrat za ključ).

Rešitvi tudi tega se imenuje ssh-agent. Ideja ssh-agenta je, da si ob prijavi v delovno postajo, “registriraš” tudi ssh ključ (vpišeš geslo), za tem pa je prijava v sisteme brez spraševanja za geslo.

Še več, agent se “vleče” za vami, kar pomeni, da lahko ustvarite SSH povezavo do strežnika A, iz strežnika A pa naprej na strežnik B. Če imate na obeh strežnikih postavljen vaš javni ssh ključ, vas tudi pri povezavi iz A do B strežnika sistem ne bo vprašal za geslo, ker je sistem B preko sistema A dostopal do vašega ssh agenta in vas autenticiral.

Na kratko, ne potrebujete pisati več gesel sploh.

Jaz sem gesla po strežnikih celo odstranil, do mojih uporabniških računov se z geslom sploh ne da dostopati. Kolikokrat pa se vam zgodi, da potrebujete do konzole strežnika dostopati s svojim uporabniškim imenom in geslom. Meni nikoli.

Pa praksa:

Najprej si morate ustvariti ključ:
unix & unix like (tud OS X) sistemi:
# ssh-keygen

winblows: puttygen @ http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Na *nix sistemih se bo ključ naredil v ~/.ssh/id_dsa <– privatni in ~/.ssh/id_dsa.pub <– javni

Zatem je potrebno postaviti ssh agenta:

OS X: recimo http://www.phil.uu.nl/~xges/ssh/
*nix: # ssh-agent
winblows: pageant @ http://www.chiark.greenend.org.uk/~sgtatham/putty/download.htm

agentom pokažite pot do ključev in jih nastavite tako, da se bodo zagnali ob logiranju v delovno postajo.

Javni del ssh ključa skopirajte po strežnikih do katerih želite dostop. To storite tako da v mapi .ssh na strežniku ustvarite, če še ni datoteko authorized_keys in vanjo skopirate svoj javni del ključa.

PAZITE ! Javni del ključa je vedno samo ena vrstica, ogromnokrat se sistemcem zgodi da jo razbijejo na več.

Eto, če ste vse naredili prav, se poskusite povezati do svojega strežnika, tokrat brez gesla.

Ob uporabi tega sistema je potrebno pomisliti malo na varnost same delovne postaje oz. dostopa do nje, zatorej zaklepajte delovno postajo ko greste od mize, nastavite “screen saver” na malo časa in zaščitenega z geslom.

Toliko zaenkrat, nisem šel v detajle, ker bi se zgubili, upam da se že niste. Ideja je predstaviti, raziskujte pa sami !

Še par 100 tipk na dan manj !

s.

sIMON - 8 Junij, 2007

še ena da vam prihranim prste…terminal2

če se veliko ssh-jate po strežnikih in tipkate vedno dolga cela imena strežnikov, po možnosti še s portom, like

# ssh -p 32453 aleksandertrstenjakmlajsi@server13.cluster24.datacenter3.at.company.org

vam naj povem, da gre hitreje…

ustvarite, ce se nimate datoteke “~/.ssh/config” torej datoteka z imenom config, v podmapi .ssh v domači mapi.

Datoteka lahko služi kot ssh bookmarking orodje, zapisi v njej pa zgledajo takole:

Host s13
User aleksandertrstenjakmlajsi
Port 32453
HostName server13.cluster24.datacenter3.at.company.org

Host tivoli18
User root
Port 5563
HostName tivoli.server.at.some.company

itd.

do bookmarknjenga serverja dostopate tako z

# ssh s13

S.

P.S.: direktiva User v config fajlu sluzi kot default user, če tega ne specifirate, lahko ga pa overwritetate za en session, kot recimo # ssh simon@s13 pri čemer se bodo vsi parametri za s13 upoštevali iz configa, uporabljeno uporabniško ime pa bo simon.

sIMON - 7 Junij, 2007

Prva ura nove učilnice.

Tema, opisana verjetno na prvih straneh večina UNIX knjig, na ogromno spletnih straneh, pa vendar, dnevno videvam ljudi, z ogromno UNIX znanja, ki ne uporabljajo niti osnovnih funkcionalnosti / bližnjic njihovega shella.

Popravljanje besed na začetku ukaza tako, da z backspace-om pobrišeš kar si napisal, popraviš napako in ponovno napišeš kar si imel že napisano. Znano ? Upam da ne…

Vzemite se čas, poskusite napisano, poskusite začeti to uporabljati, prihranilo vam bo tisoče pritisnjenih tipk.

Za prvič samo nekaj najbolj uporabnih:

Navigacija:
CTRL+A = kurzor na začetek ukaza
CTRL+E = kurzor na konec ukaz
(typo na začetku ukaza lahko popravite torej tako, da se s CTRL+A posavite na začetek ukaza, se s kurzorskimi tipkami premaknete do napake in jo popravite)

Verjetno se vam je že zgodilo, da ste napisali ukaz, potem pa ste se spomnili da bi pred njim morali pognati kakšen drug ukaz. Zbrisali ste vrstico, pognali ukaz in ponovno napisali že prej napisan ukaz.

Recept: Ko imate napisan ukaz, se prestavite na njegov začetek CTRL+A in izbrišite vrstico s CTRL+K (cut). Vpišite nov ukaz, ga potrdite. Prej izbrisan ukaz prikličete nazaj s kombinacijo CTRL+Y (yank).

Zelo uporabno - ponavljanje parametrov:
# mkdir /home/kekec/culja/zvitek
# cd ESC-.

z ESC-. (escape in pika) prikličete zadnji parameter predhodno izvedenega ukaza.

Pa še zadnji bonbonček:

Ker veliko uporabljate ukaze, ki ste jih že napisali, besno med njimi listate s kurzorskima tipkama gor in dol. Po njih lahko tudi iščete !

CTRL+R

pojavi se napis: (reverse-i-search)`’: in ko začnete pisati, se vam izpisujejo ukazi, ki vsebujejo natipkane besede. Med večimi ukazi ki ustrezajo parametrom ciklate s ponovnim pritiskom CTRL+R.

Tako npr. med vsemi ukazi ki uporabljajo “rsync” ciklate tako, da pritisnete CTRL+R napisete rsync in pritiskate CTRL+R da najdete pravilen zadetek.

Upam, da vam s tem prihranim par 100 odvečnih udarcev :-)

S.