إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

تقليل حجم النسخ الاحتياطى للحزم

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [سكربت] تقليل حجم النسخ الاحتياطى للحزم

    عند أخذ نسخة إحتياطية من الحزم بالأمر
    كود PHP:
    find /var/cache/yum -name '*.rpm' xargs cp -t Path_to_folder 
    لاستخدمها لاحقا يتم نسخ جميع الحزم وينتج عن ذلك تكرار للحزمة الواحدة بإصدارات مختلفة أو إطلاقات مختلفة مثلا ستجد
    كود PHP:
    kernel-2.6.33.8-149.fc13.i686.rpm
    kernel
    -2.6.34.6-47.fc13.i686.rpm 
    ولحفظ المساحات ولتسريع عملية النسخ قمت بالتعديل على أمر النسخ الاحتياطى ليتفادى نسخ الحزم المكررة ودمجه فى الاسكريبت
    ولتشغيل الاسكريبت قم بنسخه وحفظه فى ملف جديد
    كود PHP:
    #!/bin/bash
    # Find and remove repeated (RPM) packages, But saving newest!
    # Exit code 0 = done successfully
    # Exit code 1 = target directory not found
    # Exit code 2 = target directory Permission denied
    # Sun Aug 29 06:56:54 EET 2010
    # Ehab El-Gedawy <[email protected]>

    [[ -$&& -$]] ||  exit 
    TargetDir
    =$(echo  $sed 's/\/$//')
    [ -
    e $TargetDir/repeated/ ] || mkdir $TargetDir/repeated || exit 2

    RemRep
    ()
    {
        echo -
    "All repeated packages will be moved into: $TargetDir/repeated/"
        
    echo -'---------------------------------------------------------'
        
    echo -"---------------------------------------------------------\
        \n\t\t\t$(date)\nYou can delete (
    $TargetDir/repeated/) \
        to save some space\nRepeated packages are:\n" 
    >> ~/Desktop/removerepeated\ \(RPM\)\ packages.log
         
        
    for a in $(rpm --qf '%{Name}\n' -qp "$TargetDir/*.rpm" sort uniq -d)
        do
            
    Skip=0
            
    for b in $(ls -Xr1 $TargetDir/$a-[0-9]*.rpm)
            do
                [ 
    $Skip -ne 0 ] && echo -"Moving file: $(basename $b)." && 
                
    mv $b $TargetDir/repeated/ &&
                echo -
    "Moving file: $(basename $b), To ./repeated/$(basename $b)" >> \
                ~/
    Desktop/removerepeated\ \(RPM\)\ packages.log
                Skip
    =1
            done
        done
        
    echo -'---------------------------------------------------------'
        
    echo -"You can delete ($TargetDir/repeated/) to save some space"
    }
    CPNew()
    {
        echo -
    'Copying New packages please wait .....'
        
    for a in $(find /var/cache/yum/ -iname '*.rpm'
        do
            [[ -
    "$TargetDir/$(basename $a)" || \
               -
    "$TargetDir/repeated/$(basename $a)" ]] || \
            
    cp $a "$TargetDir/Packages" 
        
    done
        
    echo -'Done.\n'
    }
    #[ "S$2" == "S-b" ] && CPNew
    CPNew
    RemRep
    exit 
    ثم أعطه صلاحيات التنفيذ
    كود PHP:
    chmod -x FILENAME 
    لتشغيله يتم سحب الملف للطرفية ثم سحب الدليل الهدف ثم إنتر ليتم التنفيذ

    بعد الانتهاء ستجد ملف لوج على سطح المكتب بالحزم التى تم استبعادها وستجد الحزم فى دليل فرعى من الدليل الهدف تحت اسم repeated يمكن حذفه والابقاء عليه

  • #2
    السلام عليكم

    كنت أنتظر هذا السكربت منذ زمن، فقد أعياني تكرار الحزم والحجم الإضافي للإصدارات القديمة، وكنت قد طلبت شيئاً كهذا من قبل!
    أنتظر دمجه في YUMonCD و "أهلاً فيدورا" للتسهيل على الوافدين الجدد ...
    جزاك الله خيراً ووفقك لما يحبه ويرضاه.

    سؤال: هل يتم البحث بتحديد رقم الإصدارة للحزمة فقط؟ أم يشمل اصدارة النظام ورقم الـbuild أيضاً؟
    يعني بالألوان: kernel-2.6.33.8-149.fc13.i686.rpm
    أيها سيتم الإبقاء عليه، وأيها سيحذف ما يحمل الرقم الأقل ؟!

    وكل عام وأنتم بخير

    عبدالرحيم الفاخوري -- فلسطين
    IRC: Fakhouri


    تعليق


    • #3
      وعليكم السلام ورحمة الله وبركاته
      الاسكريبت يقوم بحذف جميع الحزم والإبقاء على الأحدث فقط سواء كان الأحدث من ناحية الإصدار أو الإطلاق أى أنه يقارن جميع القيم الملونة
      الإصدار الأول كان يقوم بالمقارنة بين أما هذا الإصدار يقوم بترتيب الحزم بشكل عكسى ويترك الأولى ويحذف الباقيات <<<< فكرة ؟
      قد تكون فكرة فاشلة ولكنى إعتمدتها لتقليل حجم الاسكريبت وتقليل استدعاء rpm حتى يتم العمل بسرعة

      هل يوجد أفكار أخرى لتسريع العمليات ؟ أو تقليل حجم الاسكريبت ؟
      سأحاول إن شاء الله إضافة رسائل مساعدة فى حالة حدوث أخطاء بدلا من الخروج فى صمت !

      تعليق


      • #4
        بارك الله فيك ولكن كيف كتبت هذا الاسكربت فان اتمنى عمل اشياء كهذه والله لو تقدر تساعدنى فى فهم عمل الاسكربات ساكون فى غاية الشكر والامتنان ... بارك الله فيك

        تعليق


        • #5
          الأمور لا تسير هكذا
          فمثلا يجب أن أتعلم اللغة الإنجليزية كى أستطيع قراءة جملة أو كتاب ولكن إذا أخذت ترجمة جملة من شخص ما لن أفهم غيرها وقد تكون الجملة فى الأساس شئ بسيط بالنسبة للغة
          البرمجة عبارة عن لغات يجب أن أتعلم اللغة كى أفهم الأكواد بعد ذلك وليس العكس

          همسة : هذه ليست برمجة فأنا أعتبر bash أداة وإن كانت تكتب برامج !

          تعليق


          • #6
            ممممم، حسناً
            الآن، إذا كان عندي واحد i686 واخر x86_64، فماذا يفعل؟

            عبدالرحيم الفاخوري -- فلسطين
            IRC: Fakhouri


            تعليق


            • #7
              إذا الحزمتين بنفس الإصدار والإطلاق سيبقى على ال x86_64 أما إذا كان إحداهما أقدم سيقوم بحزف الأقدم يمكن أن نزيد على الفلتر ليحتفظ بأحدث حزمة لكل معمارية ولكن هذا سيزيد من وقت التنفيذ

              قمت بعمل تعديل على الاسكريبت لوجود مشكلة به
              أرجو من الإدارة دمجه بدل الموجود فى الموضوع
              كود PHP:
              #!/bin/bash
              # Find and remove repeated (RPM) packages, But saving newest!
              # Exit code 0 = done successfully
              # Exit code 1 = target directory not found
              # Exit code 2 = target directory Permission denied
              # Sun Aug 29 06:56:54 EET 2010
              # Ehab El-Gedawy <[email protected]>

              [[ -$&& -$]] ||  exit 
              TargetDir
              =$(echo  $sed 's/\/$//')
              [ -
              e $TargetDir/repeated/ ] || mkdir $TargetDir/repeated || exit 2
              [ -e $TargetDir/Packages/ ] || mkdir $TargetDir/Packages 
              mv $TargetDir
              /*.rpm $TargetDir/Packages/
              RemRep()
              {
                  echo -e "All repeated packages will be moved into: $TargetDir/repeated/"
                  echo -e '---------------------------------------------------------'
                  echo -e "---------------------------------------------------------\
                  \n\t\t\t$(date)\nYou can delete ($TargetDir/repeated/) \
                  to save some space\nRepeated packages are:\n" >> ~/Desktop/remove\ repeated\ \(RPM\)\ packages.log
                   
                  for a in $(rpm --qf '%{Name}\n' -qp "$TargetDir/Packages/*.rpm" | sort | uniq -d)
                  do
                      Skip=0
                      for b in $(ls -Xr1 $TargetDir/Packages/$a-[0-9]*.rpm)
                      do
                          [ $Skip -ne 0 ] && echo -e "Moving file: $(basename $b)." && 
                          mv $b $TargetDir/repeated/ &&
                          echo -e "Moving file: $(basename $b), To ./repeated/$(basename $b)" >> \
                          ~/Desktop/remove\ repeated\ \(RPM\)\ packages.log
                          Skip=1
                      done
                  done
                  echo -e '---------------------------------------------------------'
                  echo -e "You can delete ($TargetDir/repeated/) to save some space"
              }
              CPNew()
              {
                  echo -e 'Copying New packages please wait .....'
                  for a in $(find /var/cache/yum/ -iname '*.rpm') 
                  do
                      [[ -e "$TargetDir/Packages/$(basename $a)" || \
                         -e "$TargetDir/repeated/$(basename $a)" ]] || \
                      cp $a "$TargetDir/Packages/" 
                  done
                  echo -e 'Done.\n'
              }
              #[ "S$2" == "S-b" ] && CPNew
              CPNew
              RemRep
              exit 0 

              تعليق


              • #8
                المشاركة الأصلية بواسطة إيهاب الجداوى مشاهدة المشاركة
                الأمور لا تسير هكذا
                فمثلا يجب أن أتعلم اللغة الإنجليزية كى أستطيع قراءة جملة أو كتاب ولكن إذا أخذت ترجمة جملة من شخص ما لن أفهم غيرها وقد تكون الجملة فى الأساس شئ بسيط بالنسبة للغة
                البرمجة عبارة عن لغات يجب أن أتعلم اللغة كى أفهم الأكواد بعد ذلك وليس العكس

                همسة : هذه ليست برمجة فأنا أعتبر bash أداة وإن كانت تكتب برامج !
                كيف لى تعلم الbash

                تعليق


                • #9
                  المشاركة الأصلية بواسطة 7L!nux مشاهدة المشاركة
                  كيف لى تعلم الbash
                  اذا لم تجرب اي لغة برمجة أبداً اقترح أن تتعلم أساسيات (فقط الأساسيات) Python أوﻻ
                  كي تفهم البرمجة .. و تتعود على طريقة كتابة وشكل وتنفيذ السكبرتات ... فهما يتشابهان كثيرا من هذه الناحية
                  ولأن bash قد تكون خطيرة قليلا ... ثم تتعلم بعدها أوامر اللينكس الأساسية والهامة وتجربها " فـ bash ليست سوى أوامر متبه بطريقة منطقية "
                  بعدها سيكون تعلم bash سهل للغاية !! وحتى سيكون بمقدورك الإطلاع على الكتب الأجنبية مع قليل جدا من اللغة الإنجليزية

                  وأتمنى أن يشاركنا الأخ إيهاب بإقتراحاته
                  كتب مفيدة : كتاب لينكس الشامل | دليل المستخدم العربي في أوامر لينكس | مخطوطتك الأولى (script) في الشيل | أوبنتو ببساطة

                  تعليق


                  • #10
                    هذه أهم المراجع
                    http://www.gnu.org/software/bash/manual/bashref.html
                    http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
                    ويمكن أن تبدأ بكتاب لينوكس الشامل

                    تعليق


                    • #11
                      المشاركة الأصلية بواسطة إيهاب الجداوى مشاهدة المشاركة
                      إذا الحزمتين بنفس الإصدار والإطلاق سيبقى على ال x86_64 أما إذا كان إحداهما أقدم سيقوم بحزف الأقدم يمكن أن نزيد على الفلتر ليحتفظ بأحدث حزمة لكل معمارية ولكن هذا سيزيد من وقت التنفيذ
                      هل الزيادة ستكون في وقت تنفيذ السكربت نفسه؟ أم في استدعاء مخرجات yum مرتين؟ (ما الطريقة التي ستستخدمها؟)
                      إذا كانت في السكربت نفسه، فلا مشكلة، فلا يمكن ملاحظتها ....

                      عبدالرحيم الفاخوري -- فلسطين
                      IRC: Fakhouri


                      تعليق


                      • #12
                        هذا سينفذ ماتريد
                        كود PHP:
                        # Ehab El-Gedawy <[email protected]com>

                        [[ -$&& -$]] ||  exit 
                        TargetDir
                        =$(echo  $sed 's/\/$//')
                        [ -
                        e $TargetDir/repeated/ ] || mkdir $TargetDir/repeated || exit 2
                        [ -e $TargetDir/Packages/ ] || mkdir $TargetDir/Packages 
                        mv $TargetDir
                        /*.rpm $TargetDir/Packages/
                        RemRep()
                        {
                            echo -e "All repeated packages will be moved into: $TargetDir/repeated/"
                            echo -e '---------------------------------------------------------'
                            echo -e "---------------------------------------------------------\
                            \n\t\t\t$(date)\nYou can delete ($TargetDir/repeated/) \
                            to save some space\nRepeated packages are:\n" >> ~/Desktop/remove\ repeated\ \(RPM\)\ packages.log
                             
                            for a in $(rpm --qf '%{Name}\n' -qp "$TargetDir/Packages/*.rpm" | sort | uniq -d)
                            do
                                Skip=0
                                for b in $(ls -Xr1 $TargetDir/Packages/$a-[0-9]*.i*.rpm 2>/dev/null)
                                do
                                    [ $Skip -ne 0 ] && echo -e "Moving file: $(basename $b)." && 
                                    mv $b $TargetDir/repeated/ &&
                                    echo -e "Moving file: $(basename $b), To ./repeated/$(basename $b)" >> \
                                    ~/Desktop/remove\ repeated\ \(RPM\)\ packages.log
                                    Skip=1
                                done
                                Skip=0
                                for b in $(ls -Xr1 $TargetDir/Packages/$a-[0-9]*.x*.rpm 2>/dev/null)
                                do
                                    [ $Skip -ne 0 ] && echo -e "Moving file: $(basename $b)." && 
                                    mv $b $TargetDir/repeated/ &&
                                    echo -e "Moving file: $(basename $b), To ./repeated/$(basename $b)" >> \
                                    ~/Desktop/remove\ repeated\ \(RPM\)\ packages.log
                                    Skip=1
                                done
                            done
                            echo -e '---------------------------------------------------------'
                            echo -e "You can delete ($TargetDir/repeated/) to save some space"
                        }
                        CPNew()
                        {
                            echo -e 'Copying New packages please wait .....'
                            for a in $(find /var/cache/yum/ -iname '*.rpm') 
                            do
                                [[ -e "$TargetDir/Packages/$(basename $a)" || \
                                   -e "$TargetDir/repeated/$(basename $a)" ]] || \
                                cp $a "$TargetDir/Packages/" 
                            done
                            echo -e 'Done.\n'
                        }
                        #[ "S$2" == "S-b" ] && CPNew
                        CPNew
                        RemRep
                        exit 0 
                        فهو سيترك أحدث حزمة حسب المعمارية أيضا
                        التعديل الأخير تم بواسطة إيهاب الجداوي; الساعة 13-09-2010, 06:56 AM.

                        تعليق


                        • #13
                          اﻻسكربت اﻻخير به مشكله
                          كود PHP:
                          lscannot access /home/Muhammad/Desktop/Packages/selinux-policy-[0-9]*.i*.rpmNo such file or directory
                          ls
                          cannot access /home/Muhammad/Desktop/Packages/selinux-policy-[0-9]*.x*.rpmNo such file or directory 
                          تولبار مجتمع لينكس العربي، زيادة في راحتكم
                          إطلاق توزيعة كنزي لينكس

                          مستودع برامج توزيعة كنزي لـ ( فيدورا - أعجوبة )

                          الرحيل من كوكب جوجل

                          " الذين قال لهم الناس إن الناس قد جمعوا لكم فاخشوهم فزادهم إيمانًا وقالوا حسبنا الله ونعم الوكيل .. فانقلبوا بنعمة من الله وفضل لم يمسسهم سوء واتبعوا رضوان الله والله ذو فضل عظيم "

                          تعليق


                          • #14
                            المشاركة الأصلية بواسطة محمد شعبان مشاهدة المشاركة
                            اﻻسكربت اﻻخير به مشكله
                            كود PHP:
                            lscannot access /home/Muhammad/Desktop/Packages/selinux-policy-[0-9]*.i*.rpmNo such file or directory
                            ls
                            cannot access /home/Muhammad/Desktop/Packages/selinux-policy-[0-9]*.x*.rpmNo such file or directory 
                            شكرا لك تم تعديل الاسكريبت

                            تعليق


                            • #15
                              المشاركة الأصلية بواسطة إيهاب الجداوى مشاهدة المشاركة
                              شكرا لك تم تعديل الاسكريبت
                              جزاك الله خيرا اخي ايهاب
                              وجعله في ميزان حسناتك
                              بصراحه اسكربت فوق الرائع
                              من اهم ما ﻻحظته في اﻻسكربت
                              1- ﻻ يعيد نسخ الملفات الموجوده مما يقلل من الوقت في حاله عدم مسح ملفات yum بعد كل عمله نسخ احتياطي
                              2- يقوم بفحص توقيع الملفات وعرض الملفات غير الموقعه

                              انا قمت باضافه سطر بناء المستودع لنهايه الملف حتي يكتمل الموضوع
                              كود PHP:
                              createrepo --update $TargetDir/Packages 
                              واﻻسكربت يعمل بكفائه
                              دمتم في حفظ الرحمن
                              تولبار مجتمع لينكس العربي، زيادة في راحتكم
                              إطلاق توزيعة كنزي لينكس

                              مستودع برامج توزيعة كنزي لـ ( فيدورا - أعجوبة )

                              الرحيل من كوكب جوجل

                              " الذين قال لهم الناس إن الناس قد جمعوا لكم فاخشوهم فزادهم إيمانًا وقالوا حسبنا الله ونعم الوكيل .. فانقلبوا بنعمة من الله وفضل لم يمسسهم سوء واتبعوا رضوان الله والله ذو فضل عظيم "

                              تعليق

                              يعمل...
                              X