25 Mar

Flash videoların kopyalanması

Sanırım linuxda olmanın bir handikapı, bazı şeyleri daha zor yollardan yapmanız gerekiyor. Eğer firefox eklentisi kullanmıyorsanız ya da yoksa böyle bir eklenti, izlediğiniz flash videoları bilgisayarınıza indirmeniz uğraşıtırıcı.

Gerçi önceden kolaydı (ubuntu 10.10 dan önce) , izelenen tüm flash videolar /tmp klasörü içerisine kopyalanıyordu. Videonun bulunduğu sayfayı kapadığınızda da, /tmp den siliniyordu. Flash videonun penceresini kapamadan, /tmp klasöründen alıp istediğiniz yere kopyalayabiliyordunuz.

Bu kolay adımlar bazılarının canını sıkmış sanırım, bu yüzden artık izlenen flash videolar tmp dizininde bulunmuyor. Bunun yerine /proc dizini altında, çalışan eklentinin process id si altındaki fd dizini içerisinde bulunan ilgili numaradaki dosya olarak bulunabiliyor 🙂

Şunun gibi yani (“lsof -n|grep Flash” komutunun çıktısı):

1
plugin-co 2535     ersin   16u      REG                8,1  5463336   12058865 /tmp/FlashXXcGtmnF (deleted)

Bunu bir arkadaştan öğrendim, lsof (açık olan tüm uygulamaların kullandığı dosyaları listeliyormuş) ile bu bilgilere ulaştıktan sonra geriye bu dosyayı kopyalamak kalıyordu :

1
cp /proc/2535/fd/16 ~/flash_dosyasi.flv

Bu yöntemin dez avantajı hangi dosyanın hangi video olduğunu bilmemeniz. Bu yüzden birden fazla flash video izliyorsanız, bunun takibini ve ayrımını yapmak tamamen size kalıyor.

Uzun sözün kısası şu, burda izlediğim adımları otomatize etmek için küçük bir php scripti yazdım, konsoldan çalışan. Bunu da burdan paylaşmak istedim :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#!/usr/bin/php
<?php
/**
 * Flas dosyalarını kopyalayabilmek için oluşturulacak Ui için ortak yapı
 * @author ersin
 *
 */

abstract class  Ui {
   /**
    *
    * Fla listesini tutar
    * @var array
    */

   protected $listArray;
   /**
    *
    * Komut çıktısını tutar
    * @var string
    */

   protected $list;
   /**
    *
    * Sistemde olan açık fla dosyalarının listesini dödnüdür
    */

   protected function listOpenFlas(){
      $this->list =`lsof -n|grep Flash`;
      $this->listArray = explode("\n",$this->list);
      array_pop($this->listArray);
   }
   /**
    *
    * Komut çıktısını ayrıştırarak fla dosyasına erişebilmeyi
    * sağlayan değerleri döndürür
    *
    * @param string $data
    */

   protected function parseFla($data){
       $res = array();
       $match = array();
       preg_match_all('/\d{1,}/',$data, $match);
       if(count($match)==0) {
       return false;
       }
   
       $res['pid'] = $match[0][0];
       $res['itm'] = (int)$match[0][1];
       return $res;
    }
   /**
    *
    * Fla dosyasının kaydedilmesini sağlar
    * @param integer $index
    * @param string $savePath
    */

   protected function saveFile($index,$savePath){
      @$file = $this->listArray[$index];
     
      if(!($fla  = $this->parseFla($file))){
         echo "\nFlash dosyası ayrıştırılamadı\n";
         return false;
      }
     
      $source ='/proc/'.$fla['pid'].'/fd/'.$fla['itm'];
         $res =`cp $source $savePath>&1`;
      if(null === $res) {
         echo "\nDosya aktarım işlemi başarılı ile sonuçlandı\n";
      }else {
         echo "\n\033[01;31mHata\t:\t\033[0m".$res."\n";
      }
   }
   /**
    *
    * Ortak başlatıcı
    */

   public function start(){}
}
/**
 *
 * Consoleda çalışan Ui
 * @author ersin
 *
 */

class ConsoleUi extends Ui {
   /**
    *
    * Conseole menü çıktısını verir
    */

   private function print_menu(){
      $msg= "\n\033[35;1m Seçenekler :\033[0m \n".
      "\033[01;31m(1)\t:\033[0m Flash Dosya Listesi\n".
      "\033[01;31m(2)\t:\033[0m Flashı farklı kaydet\n".
      "\033[01;31m(3)\t:\033[0m Çıkış\n".
      "\n\033[01;31mBir Seçenek Numarası Girin :\033[0m";
      return $this->prompt($msg);
   }
   /**
    *
    * Fla dosyalarının liste çıktısını verir
    */

   private function listMenu() {
      if(count($this->listArray)>0) {
         echo "\n\t\tŞu an açık olan flash dosyaları\n",
         $this->list;
      }else {
         echo "\nAçık flash dosyası bulunamadı\n";
         return false;
      }
   }
   /**
    * (non-PHPdoc)
    * @see Ui::listOpenFlas()
    */

   public function listOpenFlas(){
      parent::listOpenFlas();
      $this->listMenu();
   }
   /**
    *
    * Console dan parametre almamızı sağlar
    * @param string $message
    * @return string
    */

   private function prompt($message,$trim=true){
      echo $message;
      $input = fopen('php://stdin','r');
      $value = fgets($input);
      fclose($input);
      if($trim) {
         return trim($value);
      }else {
         return $value;
      }
   }
   /**
    *
    * Karar mekanizması
    * @param int $choice
    */

   private function makeAction($choice){
      switch($choice){
         case 1:
            $this->listOpenFlas();
            break;
         case 2:
            if(count($this->listArray)==0){
               if($this->prompt("\nListe boş görünüyor, tekrar kontrol edilsin mi? [e/h]")=="e"){
                  if(!$this->listOpenFlas()) return false;
               }else { return false;}
            }
            $fileChoice = $this->prompt("\nDosya indeksini girin(0 dan başlayarak) :");
            $savePath   = $this->prompt("\nDosyanın kaydedileceği yolu girin :");
            $this->saveFile($fileChoice,$savePath);
            break;
         case 3:
            exit(0);
            break;
         default :
            var_dump($choice);exit;
      }
   }
   /**
    * (non-PHPdoc)
    * @see Ui::start()
    */

   public function start(){
      while(true){
         $choice = $this->print_menu();
         $this->makeAction($choice);
      }
   }
}

$console = new ConsoleUi();

$console->start();

GTK destekli sürümünü de yapmak istediğimden, bunu yapabilecek şekilde düzenledim. Belki sizin de aklınıza farklı birşeyler gelir siz de ekleme yaparsınız,basit kullanışlı bir araç çıkar ortaya 🙂

02 Oct

Ubuntuda Flash Menulere Tıklama Problemi Çözümü (64bit)

64 bit nimetlerinden yararlanırken, böyle ufak tefek problemler ile de uğraşmak zorunda kalabiliyoruz.

Adobe firmasının 64 bitlik linuxlara desteğini minimum seviyede tutması asıl sebep, neyse. Geçelim konumuza.

Birçoğumuzun başına gelmiştir sanırım, bazı sitelerdeki flash menülere tıklamaya kalktığımızda hiçbir tepki alamayız, menu çalışmaz.

Bu problem ile 32 bitlik sürümlerde karşılaşmadım ve ayrıca bu problem sadece firefoxda oluyor.

Sorunun çok basit bir çözümü varmış. Bu problemden sıkılınca, yokmu bunun çözümü diyerek google amcaya sordum. O da sağolsun istediğim çözüme ulaştırdı beni.

Problemi çözmek için izlemeniz gereken adımlar şunlar:

ALT+F2 ye basın ve şunu girin
gksudo gedit /usr/lib/nspluginwrapper/i386/linux/npviewer
Sondan bir önceki satıra şunu ekleyin :
export GDK_NATIVE_WINDOWS=1
Kaydedip çıkın.
Uygulamayı yeniden başlatın.

Bu birkaç basit adımdan sonra bu sorundan kurtulmuş olmanız gerekiyor. Umarım sizde de işe yarar.

19 Jun

Linux Dizinlerinin Boyutlarını Öğrenmek

Harddiskimizin limitlerine ulaştık, ama bunu anormal buluyoruz. Eminizki bize yetecek kadar yer var. Peki bunu nasıl bulabiliriz.

İşte burda linux komutlarından olan “du” imdadımıza koşuyor :

du -h / ––max-depth=1

Yukarıdaki parametreleri açıklarsak :
-h , dosya boyutlarını bizlerin okuyacağı şekilde olması için
/ , root klasörümüz . root klasörünü verdim, çünkü bütün ana dizinleri görmek istiyorum
––max-depth , unutulmaması gereken, her klasörün sadece ilk elemanını ele almasını alt dizinlere gitmemesini belirtmek için.

Bu işlemlerden sonra, root dizinindeki tüm ana klasörlerin ne kadar yer kapladığını listeleyecek. Burdan yola çıkarak , şüphelendiğimiz her bir klasöre ayrı ayrı bakarak, en çok yer kaplayan dizini bulabilir, eğer bir müdahale söz konusu ise bunu gerçekleştirebiliriz.

31 Mar

(network.c.345) can’t bind to port: :: 80 Address already in use

Ubuntu 10.04 ü test ederken ligthttpd’nin yeni sürümünü kurdum, ve çalıştırmak istediğimde bu hatayı aldım.
Meğer problem lighttpd’eki bir perl scriptinin IPV6 deteği olup olmadığını kontrol etmesinden kaynaklanıyormuş

/etc/lighttpd/lighttpd.conf

içerisinde aşağıdaki satırı bulup yorum satırı haline getirmeniz halinde lighttpd’yi çalıştırabilirsiniz.

#include_shell “/usr/share/lighttpd/use-ipv6.pl”

24 Mar

Mount of filesystem failed

Bugün, olmaz dediğim şey oldu. Sebebini tam olarak anlayamadığım bir sebepten dolayı bilgisayarım kilitlendi ve bilgisayarı kapatıp yeniden açmaya yeltendim. Bilgisayar güzel güzel açıldı, ubuntu logosu görüntülendi vee :

Mount of filesystem failed.
A maintenance shell will now be started.
CONTROL-D will terminate this shell and retry.
root@ersin:”#

Ubuntum “çökmüştü” . Sonra ver elini google, neyse ki bu problemi tek yaşayan ben değilmişim. Her nasıl başardıysam linux dosya sistemine zarar vermişim , bunun da çözümü :

fsck

komutu. Bu komut , dosya sistemini tarayıp, bulduğu hataları otomatik olarak çözümlüyor. Tabi bunu yaparken de size soruyor öncelikle, yapmanız gereken tek şey, sroduğu her soruya “y” (yes) deyip “enter”a basmak.
İşlem sonuçlanınca size problemi çözüp -çözemediğini ve en nihayetinde bilgisayarı yeniden başlatmanızı söylüyor.
Bilgisayarınızı da :

sudo shutdown -r now

ile yeniden başlatarak kaldığınız yerden devam edebilirsiniz.

04 Mar

Linux’da bir komutun yolunu bulma

Aklıma geldiçe, hoşuma giden, kullanışlı olduğunu düşündüğüm linux shell komutlarını elimden geldiğince buradan paylaşmaya çalışıyorum.
Bu yazacağım komut da gerçekten çok işe yarayan, bilinmesi gereken bir shell komutu.

“which komutu, kendisine parametre olarak verilen, geçerli ortamda çalıştırılabilen POSIX uyumlu kabuk dosyalarının yolunu döndürür. Bunu PATH değişkeninde belirtilen yollarda, arguman olarak verilen çalıştırılabilir dosyaların isimlerini arayıp eşleştirerek yapar.”

Man dosyasında yazan ve benim çevirebildiğim kadarı ile tanımı bu. Biraz karmaşık veya yanlış çevirmiş olabilirim, o yüzden kısaca özetlemek gerekirse çalıştırılabilir bir dosyanın yolunu döndürür. Örneğin

which grep

yazdığımızda bize şöyle bir çıktı verir (linux dağıtımlarına göre değişebilir) :

/bin/grep

Bu da grep komutunun çalıştırılabilir dosyasının /bin klasöründe olduğunu temsil eder.

01 Mar

Linux’da bir dosyanın içeriğini boşaltmak

Büyük dosyalar ile uğraşıyorsunuz, dosyayı silmek yerine sadece içeriğini silmek istiyorsunuz. Ama herhangi bir editör ile açtığınızda takılmalar yaşıyorsunuz ve beklerken saç baş yoluyorsunuz. Buunun daha kolay bir yolu olmalı, böyle eziyete can dayanmaz 🙂
Evet kolay bir yolu var, bir değil iki yolu var (en azından benim bildiğim) :
Birincisi truncate diye bir komut var , ve bununla

truncate dosyaadi

demeniz yeterli. Fakat truncate her linux sürümünde ön tanımlı gelmiyor. Bunu kullandığınız linux dağıtımının paket yöneticisinde yükleyebilirsiniz. Ama onun yerine çok daha kolay ikinci yöntemi kullanarak dosyamızın içeriğini boşaltabiliriz :

:>dosyaadi

Evet hepsi bundan ibaret, dosyanızın içeriğine baktığınızda bomboş olduğunu göreceksiniz. Yalnız şunu unutmayın, bu komutları kullandığınızda size sileyim mi diye sormayacaktır, direkt olarak dosyanın içeriğini boşaltacaktır.

Yeri gelmişken bu konuya bir ekleme daha yapayım. Harddiskde kalan alan miktarını da şu komut ile öğrenebiliriz :

df -h

Gerçi kalan alan miktarını gösteren güzel araçlar mevcut, ama gün olur ssh ile erişmeniz gerekir ve grafiksel bir arayüz bulamazsanız, mutlaka aklınızda bulunması gereken bir komuttur kendisi.