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: 12358
  • 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: 12358
  • 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: 12358
  • 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: 12358
  • 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 776 korisnika na forumu :: 45 registrovanih, 7 sakrivenih i 724 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: A.R.Chafee.Jr., ajo baba, babaroga, Ben Roj, BORUTUS, Bubimir, bufanje, dankisha, darkangel, dragon986, Ivica1102, ivicasimo, janezek67, Jovan Nenad, Lieutenant, Markoni29, mcgunner, Miskohd, Mixelotti, MrNo, Nikola12345, Njemac, Outis, Panter, Parker, pceklic, pera12345, Plava bluza, Pomorac1, Profica, raptorsi, RiV, riva, Shufle, stagezin, Stoilkovic, strn, theNedjeljko, Toni, vathra, Vlad000, vsn111, W123, Wrangler, x9