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

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

سؤال بخصوص الملفات

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

  • [سؤال] سؤال بخصوص الملفات

    السلام عليكم ورحمة الله وبركاته
    لدي استفسار بسيط لأني عازم على كتابة سكربت بسيط
    الاستفسار هو
    حاليا لو كان لدي ملف sh وملف php و ملف اي كان نوعه
    كيف يتعامل النظام مع هذا الملف اي الذي اريده بالتفصيل
    مثلا هل هناك md5 خاص لكل ملف من هذه الملفات
    لو كان لدي ملف
    gnu.sh
    هل استطيع انه اعرف id او التوقيع الذي يحمله هذا الملف وكيف يتعامل النظام معه
    وهل لو قمت بنسخ نفس النسخة السابقه من ملف gnu.sh الى اسم مثلا gnu1.sh
    هل يتعامل النظام مع هذين الملفين يحملنا نفس الرقم او اي دي او md5
    اي كان اسمه
    مع العلم الملفين بداخلهما نفس المحتوى تماما
    وشكرا لكم

  • #2
    يمكنك معرفة هاش أي ملف من خلال الطرفية

    كود:
    md5sum gnu.sh
    أو:

    كود:
    sha1sum gnu.sh
    نسخ الملفات مع عدم تغيير أي شيء فيها ينتج عنه تطابق في الهاش بالتأكيد

    تعليق


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

      على القرص الصلب، كل ملف مقسم الى جزئين
      * اسمه
      * ومحتواه
      اسماء الملفات مخزنة في موضع مختلف عن محتوى الملفات
      كل اسم لديه معرفه الخاصبه(ما سميته انت ب id) يسمى inode، وهو محتواه



      يمكن معرفة هذا الرقم باضفة -i الى امر ls مثال
      كود:
      ls -il
      الخانة الاولى تشيؤ الى هذا الرقم

      هنالك طريقتان لربط الملفات بمحتوياتها:
      * طريقة hard link : وهي الاقل استخداما، وببساطة يكون لدينا ملفان لهما اسمان مختلفان يرتبط كل منهما بنفس المحتوى(نفس inode)



      ادا قمت بالتعديل على احد الملفين فسيتغير المحتوى، أي سواءا عدلت على الملف fichier 1 او fichier 2 فالامر نفسه، يمكنك الوصول الى نفس المحتوى من خلال ملفين
      يمكنك انشاء هذا النوع من الربط بواسطة الامر
      كود:
      ln fichier1 fichier2
      عندما نطبق الامر السابق (ls -il) سيعطينا النتيجة التالية
      كود:
      272473 -rw-r--r-- 2 naruto naruto    0 2010-07-31 15:27 fichier 1
      272473 -rw-r--r-- 2 naruto naruto    0 2010-07-31 15:27 fichier 2
      نلاحظ ان للملفين نفس inode اي نفس المحتوى، ونلاحظ كذلك الرقم 2 في الخانة الثالثة يعني ان ملفين لديهما نفس inode
      اذا قمت بحذف احد الملفات، المحتوى لا يتم حذفه، الا في حالة عدم وجود اي اسم مرتبط به(اي في حالة حدف الملفين معا في حالتنا)

      * طريقة symbolic link : هذا النوع من الربط هو اشيه باختصار، المبدأ هو اننا نقوم بانشاء اسم ملف مرتبط باسم اخر (اي يشير الى اسم عوض اخر عوض المحتوى)


      يمكن انشاء هذا النوع من الربط بالامر
      كود:
      ln -s fichier1 fichier2
      عند تطبيق الامر
      كود:
      ls -l
      نحصل على
      كود:
      -rw-r--r-- 1 naruto naruto    0 2010-07-31 15:27 fichier 1
      lrwxrwxrwx 1 naruto naruto    9 2010-07-31 15:41 fichier 2 -> fichier 1
      نلاحظ شيئسن :
      * وجود حرف l في اةل خانة الذي يعني ان هذا الملف عبارة عن symbolic link
      * وجود اشارة ->
      مميزات هذه الطريق انك اذا حدفت الاختصار(في حالتنا fichier 2) لن يحدث شيء، أي لن يحدف الملف الاصلي، لكن اذا حذفت الملف الاصلي ملف الاختصار(fichier2) سيصبح معطوبا
      كذلك هذه الطريقة تشتغل مع المجلدات عطس الطريقة الاولى، لذلك فهذه الطريقة هي الاكثر استخداما

      ترجمة بسيطة لهذا الموضوع (بالفرنسية)
      http://www.siteduzero.com/tutoriel-3...html#ss_part_6

      تعليق


      • #4
        جميل جدا الحمدلله انها وصلت فكرتي بماذا اريد
        حاليا فهمت ما تحمل الملفات من قيم
        سؤال اخر
        مثلا لو قمنا بتطبيق md5sum
        على الملف وذهبنا الى جهاز اخر وقمنا بتطيق اسم الملف هل يكون المخرج نفس الهاش برأيكم

        وهل يمكن مثلا اذا تطابق الهاش ان اقوم يقوم النظام بنقل الملف الى مسار محدد في النظام مثلا عند ملفات الجذر او مثلا الى مجلد tmp
        هل يمكن كتابه مثل هذه الامر بشكل برمجي
        ارجوا منكم المساعده برمجيا مثلا على سيبل المثال للملفات gnu1 و gnu
        هل يمكن المساعده برمجيا بها
        مثلا لدي قائمة ب md5 لملفات معينه داخل النظام
        اذا وجد من خلال هذه القائمة md5 متطابق مع هذين الملفين gnu1 و gnu
        ان يقوم بنقلهم الى مسار الجذر
        هل يمكن تطبيقها برمجيا ام صعب ذلك
        وشكرا لكم

        تعليق


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

          هل يمكن تطبيقها برمجيا ام صعب ذلك
          نعم يمكن وليس بالامر الصعب

          تعليق


          • #6
            شكرا اخي الكريم
            هل يمكن كتابه الكود للملفين في الاعلى وانا سأقوم بكتابه البقية بنائأ على كتابتك انت
            لأني افتكر ان الموضوع صعب هل يمكن المساعده بالملفين
            gnu1 &gnu
            وشكرا جزيلا

            تعليق


            • #7
              هل من مساعده يا اخوتي

              تعليق


              • #8
                أخي طرق md5 يعمل بها في توزيعات لينوكس والحزم البرمجية منذ فترة طويلة وهي سليمة وتعمل بكفاءة في جميع الأنظمة

                بالنسبة للكود إن فهمت ماتريد جيدا، فقط قمت بحساب md5 للملفين (بواسطة الأداة md5sum) ثم اقرأ ملف الهاش (cat مثلا) وقم بالمقارنة (بواسطة grep & sed)، إن نجحت قم بنقل الملفات (mv) إلى المسار الذي تريده
                لكن لغة تريد أن تستخدم ؟ ارشح لك shell script

                بالتوفيق

                تعليق


                • #9
                  نعم اخي الكريم اريدها بالباش شل
                  هل تتكرم وتضع لي الكود بشكل برمجي لأنه هناك امرين هما
                  sed و grep يعملان عقده لي
                  اذا تكرمت ووضعت لي ردك ككود برمجي وشكرا لك مقدما
                  مثلا يأخذ قيم الهاش من ملف اسمه
                  text1
                  موجوده بها هاشات كثيره لملفات على الشكل التالي
                  d9errrrrrrrrrrr5dc0c0c4204rrrrrrrr941f
                  d9e6rb6rasdddddgggg420443066e941f
                  d9e6b6fr65c65gggddc420443066rrr41f
                  d9e6b6fddddddc0c0c420443066e9r41f
                  اريد ان يقوم بالقرأه من هذا الملف
                  ويقوم بالمقارنه داخل الجهاز اذا توافق يتم نقل اذا لم يتوافق يبقية ولا يعمل به شي
                  لكن لدي ملاحظة هل نقدر نضيف عليه ميزه البحث داخل الجهاز بشكل لا يعمل هيوج او يثير لبروسيس ويقوم بتشغيل نفسة تلقائي بعد تشغيل الجهاز مثلا
                  ارجوا منك كتابه هذا الكود لأربع قيم وانا سأكمل الباقي المهم ان تكون فحوا الفكره البرمجيه وصلت لي
                  واشكرك مقدما عزيزي

                  تعليق


                  • #10
                    الهاشات في ملف تكست مكتوبه بشكل التالي
                    d9e6b6f65c65dc0c0c420443066e941f gnu.sh
                    d9e6b6f65c65dc0c04204430666e941f gnu2.sh
                    d9e6b6f65c6420443066e941fooyyggg gnu1.sh
                    d9e6b642044306dc0c0c4204430i941f gnu3.sh

                    تعليق


                    • #11
                      هل من مساعده

                      تعليق


                      • #12
                        حاولت اكتب شوية اسطر من السكربت بما اني لا افقه شيء بالشل بس يكفي شرف المحاوله
                        هل لأحد المساعده في تصحيح واكمال السكربت
                        #!/bin/bash
                        # read md5

                        for file in `md5s` ; do
                        md5sum gnu.sh /root/md5.out
                        done

                        for file in `md5s` ; do
                        cat /root/md5.out
                        done

                        find . -type f -name "/root/md5.out"
                        do
                        /
                        done

                        تعليق


                        • #13
                          اول ثلاث اسطر يقوم بأستخراج ام دي 5 للملفات الموجود داخل مجلد md5s
                          وبعدها ثلاث اسطر يقوم بحساب md5 لها
                          والاخير يقوم بالبحث عنها داخل الجهاز
                          اعتقد ان عملي خطأ ارجوا من المشرفين والاعضاء المساعده

                          تعليق


                          • #14
                            السلام عليكم ورحمه الله وبركاته

                            معذره اخى فلم ارى موضوعك الا متأخرا لكثره الاعمال

                            انا استطيع مساعدتك لكن باستخدام لغه بايثون
                            فاذا كنت تريد الكود فقط اخبرنى وسأقوم بكتابته لك

                            No Pains No Gains



                            تعليق


                            • #15
                              هل هذا يفيدك ؟
                              كود PHP:
                              #!/bin/bash

                              #Collect source file info
                              SRC_FILE_SIZE=$(cksum "$1" cut -" " -f 2)
                              SRC_FILE_SUM=$(md5sum "$1" cut -" " -f 1)

                              find $-iname '*' -size ${SRC_FILE_SIZE}-print0 xargs -0 md5sum grep -"$1" grep "$SRC_FILE_SUMsed 's/\(\t\+\| \+\)/ /g' cut -" " -f 2 

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

                              همسة : ما حاجتك لهذا الاسكريبت؟

                              تعليق

                              يعمل...
                              X