• 03-10-2009, 00:26:12
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba

    Arkadaşlar bir arkadaşın sorununu okurken gerçekten kafama takıldı.

    winpeace adlı üyeden alıntı: mesajı görüntüle
    Linux serverda ssh ile tüm hesapların ve eklenecek tüm hesapların sql yedekleri bir klasöre otomatik olarak günlük olarak nasıl alınır?
    (Zip olarak veya .sql olarak)
    /var/lib/mysql/* içindeki verileri ayrı ayrı tar.gz lemek için ne yapmak gerekir. örnek :

    tar -zcvf dosya.tar.gz * yapsak hepsi dosya.tar.gz içinde toplanacak. veya

    tar -zcvf *.tar.gz * yapsak 1. * dosya adı olarak algılanacak

    for x in kullansak devamı gelmiyor. Nasıl yazarız..

    Teşekkürler..
  • 06-10-2009, 13:07:16
    #2
    Merhaba

    Arkdaşlar bugun konuya epey kafa yordum. Ama sorunumu çözdüm inşallah sizede yardımcı olur. Şimdi size kullanımı anlatacağım. Bunu bir çok formda kullanabiliriz. Ben yanlızca anlamanız için en basit olarak anlatacağım. Bundan sonra örnek olarak toplu CHMOD değiştirmeleri kısmı backupslama veya toplu bir şekilde almak aklıma gelen yanlızca bir kaç şey. İhtiyaçlarımıza göre çok daha fazla şekillendirebiliriz.

    Şimdi diyelim /home/user/test içinde bulunan a,b,c klasorlerinin yedeğini alacağız. Öncelikle bir klasor daha oluşturduk. Bu klasörde /home/user/test/user olacak ne tesadüf ki içinde 3 adet dosya olacak bunlarda ya aynı uzantıda veyahut uzantısız dosyalar olacaktır. Bunlarda a,b,c dosyalarıdır.

    önce kodumuzu vereyim sonra bu kod'un yapımı konusunda konuşalım :

    for zip in `ls /home/user/test/user|grep -v \/`; do tar -zcvf $zip.tar.gz /home/user/test/*; done

    Bu kodun oluşturulmasını anlamanın en kolay yolu parça parça incelemek. Bende birkaç parçaya bölerek sizlere anlatacağım.

    for zip in önce görmeyelim içindekileri düşünelim. ls komutu dizinin içinde bulunan dosyaları listelemek için kullanılır. Bunu sanırım herkes biliyordur. grep ise çıkan sonuçları ayıklamak için kullanılan bir koddur. Öncelikle bu ikisini tamamen kavrıyalım.

    Gelelim 2. aşamaya :

    SSH terminaline şuanda ls /home/user/test/user yazıyorum çıktıya bakalım.

    ./ ../ a b c

    alt dizinleri alakadar etmemesi için grep -v \/ kullanıyoruz. ve Araya kod bağlacı | koyuyoruz.

    ls /home/user/test/user|grep -v \/ şimdi çıktıya bakalım.
    a
    b
    c

    başardık. Şimdi diğer aşamaya geçelim yani for zip in `kodumuz` buna. Aslında kodu dikkatli inceleyenler bunu hemen anlıyacaklardır. for ingilizcede için anlamında kullanılır. Yani zip için `kod kullanılacak` bir anlamda değişkenin neye denk olduğunu anlıyoruz. ve bunu kullanırsan başına dolar işareti getiriyoruz $zip şeklinde aslında bu kısmı anladıysak %90 ı bitti demektir. Sözü daha uzatmadan diğer kısıma geçeyim.

    Aslında bu kısım dayet bayip klasik tar -zcvf ( tar.gz leme kodunu kullandım). Normalde tar -zcvf dosyaadi.tar.gz /yol şeklinde bir kullanım gördük. Bunu değşkenli kullanmayı deniyelim.

    tar -zcvf $zip.tar.gz /home/user/test/* mantık aynı ad yerine yanlızca $zip değişkenimiz geldi. sonra do ve done getiriyoruz. do ingilizcede çalışmak fiilidir. Done de 3. zamanıdır. Burdan aklımıza geldin. Ayrıcada aralarak ; kullanıyoruz. Matematiğimiz iyi ise bunuda mantık konusundan çıkara biliriz. Ve işte oldu son hali

    for zip in `ls /home/user/test/user|grep -v \/`; do tar -zcvf $zip.tar.gz /home/user/test/*; done

    Ayrıca yazarken aklıma geldi ama test etmedim. İkinci bir kısım kullanmadan direk cut -d '/' f1 ile klasorlerdende alabiliriz. Bunu siz test edersiniz..
  • 09-05-2010, 02:37:03
    #3
    ben test ettim sonuc olumsuz ben dizinleri toplu şekilde ayrı ayrı sıkıştırmak istiyorum bunu onun için denedim ama olmadı
  • 27-05-2010, 12:22:51
    #4
    Yedek almak istediğiniz dize geliniz.
    Aşağıdaki komutlar sayesinde / dizinine belirli klasor yedeklerini aynı klasoradinı taşıyan tar.gz dosyalarına yedek alabilirsiniz. Üstteki komutun çalışmama sebebi grep -v \/ kullanılmış olması eğer klasorler üzerinden işlem yapıyorsanız bunu kullanmayınız aşağıdakini test ettim. İşinize yarayacaktır.

    ls /dizin > /log.txt
    for zip in `cat /log.txt`; do tar -zcvf $zip.tar.gz /home/*; done

    Saygılarımla...