Saveti i trikovi

1

Saveti i trikovi

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12520
  • Gde živiš: Južni pol

1. Brisanje fajlova sa nevalidnim znakovima.

Recimo da u direktorijumu imamo fajl koji se zove '[lk' :
somebody@somewhere:~/test3# ls
[lk


Bilo koji pokusaj brisanja komandom rm nece dati rezultat:
somebody@somewhere:~/test3# rm [1k
rm: cannot remove `[1k': No such file or directory
somebody@somewhere:~/test3# rm "[1k"
rm: cannot remove `[1k': No such file or directory
somebody@somewhere:~/test3# rm '[1k'
rm: cannot remove `[1k': No such file or directory
somebody@somewhere:~/test3# rm '\[1k'
rm: cannot remove `\\[1k': No such file or directory
somebody@somewhere:~/test3# rm "\[1k"


Kako onda obrisati ovaj fajl? Koristeci komandu find.
a) Prvo pronadjemo inod koristeci komandu ls:

ls -i

Sto bi dalo rezultat poput:

somebody@somewhere:~/test3# ls -i
143648693 [lk


Zatim iskoristimo ovu informaciju da bismo je prosledili komandi find:
find ./ -maxdepth 1 -inum 143648693 -delete

2. Resetovanje prikaza emulatora terminala u slucaju "korupcije" prikaza

Da li vam se neki put desilo da vam se poremeti izlaz na terminalu?

Recimo... Zeleli ste da proverite sadrzaj fajla ~/binarni_fajl
cat ~/binarni_fajl

Dobili bi ste izlaz poput ovoga:
           @                                                       @                                        !             @@     @      ˜                      '
                                      Ø@     Ø                        ß                             7   ÿÿÿ⎺       Ð@     Ð                                 D   þÿÿ⎺       ˜@     ˜      ⎻             S            @          �                           ]             ˜@     ˜      ø      
                                        ±             �@     �                              ␉             ¨@     ¨      ◆                     └             !@     !      ¸Ã                             ⎽          Èä@     Èä                                    ≤             àä@     àä      ÃL                              �             ¤1A     ¤1                           �             ¸7A     ¸7     T     ™              P▒      P                                            P▒     P                                  §              P▒      P                             ¬             (P▒     (P     °         µ             ØQ▒     ØQ                                º            ðQ▒     ðQ     À                          à            ÀT▒     ÀT  Р                             É             V▒     �V     �                              Π                     �V     ˆ                                                   Y     ×                              


Posle toga svaka komanda bi bila prikazana kripticnim karakterima i ne biste bili u stanju da razaznate sta kucate, a sta je izlaz onog sto kucate.

Kako povratiti normalan prikaz bez ponovnog pokretanja emulatora terminala? Jednostavno:

reset

Danas sam radio neki test na kome je bilo prvo pitanje. Drugo pitanje je iz licnog iskustva. Mozda nekome bude koristilo.

Pozdrav,
Bocke.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • pixxel  Male
  • Legendarni građanin
  • Pridružio: 21 Jun 2005
  • Poruke: 9091
  • Gde živiš: Tu i tamo...

Svaka cast - obe informacije su jako bitne, posto se cesto desavaju obe situacije...



offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

Neznam koliko je "[" karakter dobar za primer, kao recimo "^", ili "-":
$ echo $SHELL
/bin/ksh
$ touch [1k
$ ls
[1k
$ rm [1k                                                                                               
$ ls
$

Za slucaj da se radi nabrzinu nije lose da se potvrdi brisanje fajla, bez obzira kako nevazan bio, jer se moze ispostaviti da ste obrisali neki fajl od vaznosti... Smile Npr.:
find . -inum 12345 -ok rm '{}' \;
ili
find . -inum 12345 -exec rm -i '{}' \;
Opcija "-ok" koja je ugradjena u find(1) ili opcija "-i" kod rm(1) komande traze potvrdu pre brisanja.
Za nalazenja inoda fajla moze da se koristi i stat(1) komanda (drugo polje u izlazu komande, ili samo: stat fajl | awk '{ print $2 }').

offline
  • rejn 
  • Novi MyCity građanin
  • Pridružio: 02 Okt 2008
  • Poruke: 16

Brisanje radi i bez petljanja sa inode-ovima. (bar na mojoj masini i za zadati primer) Very Happy
Ili je u pitanju "matora" verzija coreutils-a u prvom primeru, ili je nesto trece


luminus tt # touch "[1k"
luminus tt # ls
[1k
luminus tt # rm ./\[1k
luminus tt # ls
luminus tt #
luminus tt # echo $SHELL
/bin/bash
luminus tt #


A sto se tice korisnih mini komandi imam i ja jednu Mr. Green

$ screen

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12520
  • Gde živiš: Južni pol

Radi. Zato je Soxxx i rekao da je loš primer. Wink Mada mislim da sam napravio malu omašku. Sada sam probao nešto.

rm '$^8%!lč'

Radiće. BASH ne interpretira znakove koji se nalaze između jednostrukih znakova navoda.

Ali svako pravilo ima izuzetak. Recimo '$8%!/\<>yl' neće moći da se obriše. Tada će gornji primer biti jedino rešenje.

offline
  • rejn 
  • Novi MyCity građanin
  • Pridružio: 02 Okt 2008
  • Poruke: 16

Ok, slazem se, uglavnom Very Happy (imam malo viska vremena pa cu odgovoriti).

Bash ili neki drugi shell ce parzovati sve te sleseve i wildcarde i sve ostalo sto spada u regex. Pitanje je samo kako kreirati fajl/folder/whatever sa nametagom pod single quote-om, ovako nekako

luminus tt # touch \'$^8%!l?\'
bash: !l?\': event not found
##ali ovo radi
luminus tt # touch '$^8%!l?'
luminus tt # ls
$^8%!l?
luminus tt # rm ./\$\^8%\!l\?
luminus tt # ls
luminus tt #


Ovo je stvar proslosti (nadam se). Svi "noviji" shell-ovi zajedno sa filesystemima su prelezali te decje bolesti

Nepravilno linkovanje nametaga i inode-a se jedino moze desiti pri korupciji filesystema (a i u tom slucaju ce tag imati za prefiks ? ako je u pitanju ext3 ili neki noviji fs). Izgleda da je test koji je radjen bas bio star Mr. Green

Thnx anyway. Ipak moze nekom da koristi Very Happy

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12520
  • Gde živiš: Južni pol

Hvala na ispravkama. Wink Odgovor na testu i jeste bilo rešenje sa '\'. Moja literatura je bila stara.

offline
  • Pridružio: 20 Feb 2005
  • Poruke: 4505
  • Gde živiš: planeta Zemlja

Mene interesuje sledece:
Kako da u okviru echo komande izbacim ""?
Primer:
echo "Mala "patka" gumena"
Ovakav echo mi izbacuje
Mala patka gumena

Nasao sam jedan nacin ali on ima manu. Evo kako:
echo 'Mala "patka" gumena'
Medjutim ja u okviru ' i ' ne mogu da izvrsavam naredbe!
Primer:
echo " `date +"%a %b %e,%Y @ %l:%M%P"` "
Ovo gore radi!

echo ' `date +"%a %b %e,%Y @ %l:%M%P"` '
Ne radi!

Kako izvrsavati komande unutar ' i ' ?
hvala

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12520
  • Gde živiš: Južni pol

BASH ne tumači komande i promenjljive između jednostrukih znakova navoda. Tako da tako nešto nije moguće. Ali možeš uraditi nešto poput ovoga:

echo "mala \"patka\""

Odnosno:

echo \" `date +"%a %b %e,%Y @ %l:%M%P"` \"

Pomoglo?

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

tip:
ubaciti u .bashrc sledece

#za PS
psgrep() {
        if [ ! -z $1 ] ; then
                echo "Grepping for processes matching $1..."
                ps aux | grep $1 | grep -v grep
        else
                echo "!! Need name to grep for"
        fi
}

function mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; }


prva funkcija daje "ps" od onih procesa koje zelimo da vidimo,
drugu funkciju ja volim jer me mrzi da kucam "mkdir" pa onda "cd" da udjem u isti Smile

Lenjost je pozitivna osobina (u IT svetu)

Ko je trenutno na forumu
 

Ukupno su 1025 korisnika na forumu :: 36 registrovanih, 7 sakrivenih i 982 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 8u47, Alibaba1981, aramis s, ccoogg123, Dannyboy, darios, DonRumataEstorski, dzoni19, Excalibur13, Istman, Karla, kolle.the.kid, Kubovac, kuntalo, milenko crazy north, miodrag, ozzy, pein, powSrb, raykan, rovac, royst33, S-lash, Silvertooth, solic, ss10, theNedjeljko, Toper, torivoje, vathra, vukovi, W123, wolf431, Zerajic, zziko, 2001