[ cveticmilan @ 25.12.2007. 17:23 ] @
2. imamo sledecu situaciju:

df output (skraceno)

/dev/hda5 5160576 2440404 2458028 50% /usr
/dev/hdb6 3096336 1147968 1791084 40% /usr/share

hocemo da iskopiramo sve fajlove sa file systema koji se nalazi na
/dev/hda5 partciji u /mnt/BACKUP, ali tako da ne kopiramo fileove sa
/dev/hdb6. Koja je najoptimalnija komanda koju mozemo da koristimo za
ovaj task?

3. napisite komandu koja ispisuje encoding (ASCII, UTF-8, UTF-16 ...)
svih *.txt fajlova u direkotorijumu /space

4. kojom komandom dodajemo read permisiju za group i others na svim
xml fileovima u jednom direktorijumu i sta ce uraditi komanda chown
:root *.xml u tom istom diru ?

5. imamo file:

-rwsr-sr-x 1 root mail 72544 2006-04-30 21:34 /usr/bin/procmail*

kada izvrsimo program /usr/bin/procmail kao korisnik raf koji pripada
grupi raf (uid:1000, gid:1000 , koji nam je EUID i EGID u okviru tog
procesa ?

6. kojom komandom listamo atribute fileova, i da li mozemo da
promenimo ownera na file-u koji ima atribut 'i' ?

7. koristeci unix filtere (cut, sort, ...) nadjite najvisi i najnizi
UID na sistemu.

8. napisite komandu koja nalazi sve linije u file-u /etc/services koje
pocinju sa 'i' ili 't' , imaju izmedju 20 i 23 karaktera (ukljucujuci
to prvo 'i' ili 't') i tako nadjene linije ispisuje uppercase.

9. output komande runlevel je:

5 2

U kojem smo runlevelu sada ? U kojem smo bili pre ovog ?

10. napisite komandu koja na debian like systemima instalira defaultne
start/stop script linkove za daemon koji se zove directoryserver.

Ajmo momci !!! Ovo je sa RAF-a , treba mi do veceras za ortaka .....
[ random @ 25.12.2007. 18:50 ] @
Pitanja nisu teška, ali es nije servis za rešavanje domaćih zadataka. Aj da je probao da uradi, pa da ne zna odgovore na jedno ili dva, pa da čovek i odgovori...
[ cveticmilan @ 25.12.2007. 20:08 ] @
Dobro bre random nisam ni mislio da je ES servis za resavanje domacih zadataka (nisam prepoznao) !
Hteo sam samo da ozivim malo Shell Scripting teme i da postavim nekoliko zadataka ako ne za tebe onda za novajlije kojima ce se mozda svideti i biti im interesantno . Jel to OK ?
[ random @ 26.12.2007. 15:29 ] @
Nemam ništa protiv oživljavanja foruma, dobar deo zadataka je zanimljiv. Evo, ja ću moderisati odgovore. Cene se preciznost i elegancija. I da započnem, odgovoriću na jedno pitanje.

7. koristeci unix filtere (cut, sort, ...) nadjite najvisi i najnizi UID na sistemu.

Najviši:
$ cut -d: -f3 /etc/passwd|sort -n|tail -1

Najniži:
$ cut -d: -f3 /etc/passwd|sort -n|head -1


[Ovu poruku je menjao random dana 26.12.2007. u 17:51 GMT+1]
[ VRider @ 27.12.2007. 03:00 ] @
8. napisite komandu koja nalazi sve linije u file-u /etc/services koje
pocinju sa 'i' ili 't' , imaju izmedju 20 i 23 karaktera (ukljucujuci
to prvo 'i' ili 't') i tako nadjene linije ispisuje uppercase.


Jedan grep koji ce samo da izdvoji linije koje pocinju sa i ili t iz /etc/services | drugi grep koji ce da propusti samo linije duge 20 do 23 bilo koji karaktera | translate koji menja skup a-z u A-Z

Dosta i od mene...
[ random @ 27.12.2007. 11:37 ] @
Dovoljan je jedan grep. Napiši tačnu komandu.
[ VRider @ 27.12.2007. 23:55 ] @
Moze i jedan grep - pocinje sa t i nakon toga ima 19-22 bila koja karaktera ili pocinje sa i i nakon toga 19-22 bilo koja karaktera, samo je sa dva grepa razumljivije, jer je zadatak podeljen u tri neke celine, pa po jedna komanda za svaku. Ili si mislio sa jednim grepom da odradis i prebacivanje u velika slova? To malo teze...
[ random @ 28.12.2007. 10:59 ] @
Jedan grep -- u pitanju je trivijalan regularni izraz -- i jedan tr. Što se tiče "tri celine", ja u zadatku vidim samo dve nužno odvojene celine, a to su nalaženje i ispisivanje (sa konverzijom). A odgovor na pitanje je (napiši komandu)?
[ VRider @ 28.12.2007. 17:13 ] @
grep -E '^i|^t' /etc/services | grep -E '^.{20,23}$' | tr a-z A-Z
grep -E '^i.{19,22}$|^t.{19,22}$' /etc/services | tr a-z A-Z


Ovako nesto?
[ random @ 28.12.2007. 18:32 ] @
Paaa, regex ti baš nije optimalan, ja bih rekao ovako:

$ egrep '^[it].{19,22}$' /etc/services | tr a-z A-Z
[ VRider @ 28.12.2007. 19:48 ] @
Daaa, zaboravio sam na [].
Sta cemo sledece?
[ CONFIQ @ 19.01.2008. 23:21 ] @
Citat:

2. imamo sledecu situaciju:

df output (skraceno)

/dev/hda5 5160576 2440404 2458028 50% /usr
/dev/hdb6 3096336 1147968 1791084 40% /usr/share

hocemo da iskopiramo sve fajlove sa file systema koji se nalazi na
/dev/hda5 partciji u /mnt/BACKUP, ali tako da ne kopiramo fileove sa
/dev/hdb6. Koja je najoptimalnija komanda koju mozemo da koristimo za
ovaj task?


malo ruzno ali bi trebalo da radi...

[email protected]: cp `find /usr | grep -v '/usr/share'` /mnt/BACKUP
[ random @ 25.01.2008. 20:19 ] @
Citat:
CONFIQ: malo ruzno ali bi trebalo da radi...

[email protected]: cp `find /usr | grep -v '/usr/share'` /mnt/BACKUP


Ne može, mnogo je to naivno, plus ružno, plus ne radi, iz mnogo razloga. Pre svega nećeš očuvati strukturu direktorijuma, niti ćeš kopirati fajlove sa spejsovima i nekim drugim znacima u imenu, pa onda još neke sitnice, tipa nećeš kopirati dir /usr/backup/usr/share/ itd. itd.

Ovo je dobar primer kako ne treba razmišljati!

Hint za tebe: man cpio.
[ CONFIQ @ 26.01.2008. 13:07 ] @
Upravu si ;)

Evo bolji pokusaj...

find /usr | grep -v '/usr/share' | cpio -p /mnt/BACKUP

Ili posto si me naterao da procitam `info cpio` moze jos jedna lepsa opcija
find /usr | grep -v '/usr/share' | cpio -ov > /mnt/BACKUP.tar

[ VRider @ 26.01.2008. 13:31 ] @
Citat:
tipa nećeš kopirati dir /usr/backup/usr/share...

Ovo i dalje nisi "resio".
[ CONFIQ @ 26.01.2008. 17:10 ] @
Uh,... na pocetku sam mislio da je
find /usr | grep -v './usr/share' | cpio -p /mnt/BACKUP


zato sto `find` stampa

./usr/share/file
./usr/share/file2

ali grep ignorise tacku kad koristim './usr/share'... zanimljivo


Posle 5 min citanja `man find` dosao sam do zakljucka

find /usr/* -wholename '/usr/share' -prune -o -print | cpio -p /mnt/BACKUP


Je li postoji bolje resenje od ovoga?
[ chupcko @ 26.01.2008. 18:36 ] @
Dodaj jedno ^ u grepu na pocetku :) cisto da ne preskoci i /usr/b./usr/share.

Ajde probaj i sa tarom , to je jos jednostavnije :) (hint man tar | grep exclude).

Koristi ( ) za grupisanje vise komandi u podshell :) tipa: (cd /etc; pwd) | (rev; pwd)

Nekada davno me je neko pitao koja je razlika u pisanju tipa : "grep sta file" i "cat file | grep sta". Ja licno preferiram onaj duzi stil kucam barem 5 karaktera vise, ali lakse nastavljam lanac :), meni je cistije :).

P.S. Pitanje broj 6 nije precizno, nedostaje informacija o file sistemu :), mada dedukcijom se shvata da je ext[2-4] file sistem :).

[Ovu poruku je menjao chupcko dana 26.01.2008. u 19:46 GMT+1]
[ Jbyn4e @ 26.01.2008. 18:37 ] @
hm,niko za resenje sa rsync?


# rsync -a /usr/* --exclude=/usr/share /mnt/BACKUP/


Ili mozda:

# umount /dev/hdb6
# rsync -a /usr/ /mnt/BACKUP
# mount /dev/hdb6

ali ovo samo pod uslovom da moze da se uradi umount i da ne treba u tom trenutku /usr/share, sto sumnjam da moze
[ CONFIQ @ 26.01.2008. 23:11 ] @
Citat:
chupcko:
Nekada davno me je neko pitao koja je razlika u pisanju tipa : "grep sta file" i "cat file | grep sta". Ja licno preferiram onaj duzi stil kucam barem 5 karaktera vise, ali lakse nastavljam lanac :), meni je cistije :).


Da ali ne i brze:

from: Stop piping cats
Citat:

A basic-but-common grep usage error involves piping the output of cat to grep to search the contents of a single file. This is absolutely unnecessary and a waste of time, because tools such as grep take file names as arguments. You simply do not need to use cat in this situation at all, as in the following example:

Listing 21. Example of good and bad habit #10: Using grep with and without cat


~ $ time cat tmp/a/longfile.txt | grep and
2811

real 0m0.015s
user 0m0.003s
sys 0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811

real 0m0.010s
user 0m0.006s
sys 0m0.004s
~ $


This mistake applies to many tools. Because most tools take standard input as an argument using a hyphen (-), even the argument for using cat to intersperse multiple files with stdin is often not valid. It is really only necessary to concatenate first before a pipe when you use cat with one of its several filtering options.


Jbyn4e: Mislim da tvoj primer ne radi
[email protected]:~/tempprograms/cpio$ ls
backup something something3 something5
nothis something2 something4 thisyes
[email protected]:~/tempprograms/cpio$ ls backup/
[email protected]:~/tempprograms/cpio$ rsync -a ./* --exclude=./nothis ./backup
[email protected]:~/tempprograms/cpio$ ls backup/
backup something something3 something5
nothis something2 something4 thisyes
[email protected]:~/tempprograms/cpio$

Ali ipak dobra ideja....
[ chupcko @ 27.01.2008. 02:05 ] @
Ako cu brzinu naravno da necu da koristim shell, nego cu u necemu da napisem.

A i logicno da je sporije, ima pipe viska :). Ali se lakse umece "filter" u lanac :)
[ Jbyn4e @ 27.01.2008. 08:21 ] @
Cu ne radi. Samo ja nisam dobro napisao rsync komandu (pogledati man rsync):

~/tmp/test> ls
dva jedan tri
~/tmp/test> rsync -a ./* --exclude "dva" ../btest/
~/tmp/test> ls ../btest/
jedan tri


Jel treba da tesiram i sa direktorijumima? Iz man rsync:
Citat:

--exclude "foo/" would exclude any directory called foo



[ CONFIQ @ 27.01.2008. 10:50 ] @
Tvoj primer nece da izkopira tipa: /usr/backup/usr/share/*

Kao sto man kaze
Citat:
--exclude "foo/" would exclude any directory called foo


Treba samo da dodas --exclude "/foo"

Sta vise, tvoj prvi primer radi kako treba samo sam sto ne radi kad se postavi tacka kao kad sam ja lose postavio: --excplude=./excplude/....
treba --excplude=/exclude, bez tacke....





[Ovu poruku je menjao CONFIQ dana 27.01.2008. u 12:01 GMT+1]
[ Jbyn4e @ 27.01.2008. 11:17 ] @
Hm, potpuno si u pravu, onda bi trebalo u stvari onaj prvi primer da radi, znaci sa --exclude "/usr/share", mada mi nije palo na pamet da ima nesto tipa /usr/backup/usr/share...

No dobro, ima tu raznih varijanti... npr mogao bi se koristiti i dd? man dd za vise -islo bi onda nesto tipa:

# dd if=/dev/hda5 of =/mnt/BACKUP

i onda bi iskopirao celu paticiju /dev/hda5 (koja je ovde mountovana na /usr) a bez hdb6... valjda.
[ chupcko @ 27.01.2008. 14:18 ] @
dd bi napravilo jedan velikiiiiiiiiiiii fajl sa sadrzzajem cele particije, prvo ne bi bas radilo jer of ocekuje FILE, a ne dir, a drugo ne bi bilo citljive bez nekog programa koji zna da gleda po ... (mount -o loop :PPP).

dd bi defitno preskocio za tako nesto ;).

Ajde vidim da se niko nije zainteresovao za tar :), a bas je sladak :) i zanimljiv fazon :).

(cd /src; tar cf - *) | (cd /dst; tar xvvf - )

Dakle u prvom taru jos mozete da stavite exclude :) i etoooooo. Ja ovo koristim takoreci svakodnevno.
[ random @ 30.01.2008. 18:09 ] @
Citat:
chupcko: (cd /src; tar cf - *) | (cd /dst; tar xvvf - )

Dakle u prvom taru jos mozete da stavite exclude :) i etoooooo. Ja ovo koristim takoreci svakodnevno.


I ja, a često mi se iza tog pajpa prvo nalazi ssh ;) ali sam hteo radi edukacije malo da forsiram find | cpio sintaksu, da se ne zaboravi ta zgodna komanda.

Inače prvo što mi je palo na pamet kad sam video ovo pitanje je bilo da GNU tar ima jednu opciju koja bi bila korisna da se zaobiđe regex u ovom slučaju, a to je --one-file-system. Međutim, u [nedovoljno preciznoj] postavci pitanja nemamo ostatak df outputa, da bi zasigurno znali da ispod /usr ne postoji još neka posebna particija osim /usr/share. Ako ne postoji, onda

$ cd /usr && tar --one-file-system cf - * | (cd /mnt/BACKUP && tar xf -)


najelegantnije radi posao.

Inače se tar --exclude c | tar x po smislu svodi na isto što i find | cpio, kreiranje backup liste preko regexa.
[ bilke @ 07.02.2008. 16:47 ] @
Cao Chupcko, Vrzo i ostali,

Ovo su moji zadaci koje sam dao za domaci "lenchinama" (mladenvidic.blog.com copyright ) sa RAF-a, da bi nesto nauchili a ne da bi prepisali odgovore od gurua. Ako vam samo nije problem sledeci put ako se pojavi ovako uputite ih na man/google/knjigu za njihovo dobro.

Inache najelegantniji odgovor na zadatak br 2 je verovatno
Code:
cp -x /usr /mnt/BACKUP


Code:

[[email protected] ~]% man cp | grep -A 1 -B 1 -- -x
Reformatting cp(1), please wait...

       -x, --one-file-system
              stay on this file system
[[email protected] ~]%


ostalo ste super uradili

poz,
bilke
[ jablan @ 07.02.2008. 17:24 ] @
A da ti Bilke nisi malo preterao sa težinom zadataka, kad si uspeo da navučeš gurue?
[ bilke @ 07.02.2008. 17:38 ] @
Citat:
jablan: A da ti Bilke nisi malo preterao sa težinom zadataka, kad si uspeo da navučeš gurue? :)


:) To smo bash bili vezbali na casu ... samo pola spava ili igra onaj gnome shah :)
[ jablan @ 07.02.2008. 17:50 ] @
Citat:
bilke: To smo bash bili vezbali na casu ... samo pola spava ili igra onaj gnome shah

s/ili/pola/
[ CONFIQ @ 09.08.2008. 23:43 ] @
Citat:
3. napisite komandu koja ispisuje encoding (ASCII, UTF-8, UTF-16 ...)
svih *.txt fajlova u direkotorijumu /space


ovo stvarno ne znam ;( any clue?
[ niceness @ 10.08.2008. 12:55 ] @
Citat:
CONFIQ: ovo stvarno ne znam ;( any clue?

Mozda file? Jedino mi to pada na pamet.

Npr.:
$ file edk2/BuildNotes*
edk2/BuildNotes.txt: Non-ISO extended-ASCII English text, with CRLF line terminators
edk2/BuildNotes2.txt: ASCII English text, with CRLF line terminators
[ CONFIQ @ 10.08.2008. 13:25 ] @
Hmmm nisam se ni setio "file"-a... ali file samo prikazuje encoding text fajlova, sta naprimer ako u /space direktorijumu imamo PHP/PERL/BASH skripte?
primera radi...
[email protected]:~$ file test.php.txt
test.php.txt: PHP script text


???
[ niceness @ 10.08.2008. 14:55 ] @
Da, tako se ponasa kada na pocetku fajla nadje 'magicni broj'. I dalje se ne mogu nicega drugog setiti :)