sh sshfs -oworkaround = নতুন নাম কী করে?


17

যে অপারেটিং সিস্টেমের ক্লাস আমি নিচ্ছি তার জন্য আমার ফ্রিবিএসডি 5.4 চালানো দরকার। যেহেতু আমি গিট প্রকাশের আগে বিএসডি প্রকাশিত একটি সংস্করণে গিট তৈরির চেষ্টা নিয়ে কুস্তি করতে চাইনি, তাই আমি ভেবেছিলাম gitআর্ক ওভার থেকে ব্যবহার করা ঝরঝরে হবে sshfs

যেকোন হারে আমি একটি কাজের সন্ধান পেয়েছি যা প্রস্তাব দিয়েছিল আমি sshfsবিকল্পটি দেব -o workaround=rename

মনে হচ্ছে এটি gitখুশি, তবে আমি যা ঘটেছে তা নিয়ে আমি বরং বিভ্রান্ত ...

সমস্ত ম্যান পেজটি কাজটি সম্পর্কে বলে says

fix renaming to existing file

তবে এর অর্থ কী তা নিয়ে আমি সম্পূর্ণ বিস্মিত হই ...

এই বিকল্পটি ঠিক কী করে?


3
যার অর্থ হ'ল তার অর্থ (এবং একটি উত্তর লিখুন, এবং আশা করি একটি ডকুমেন্টেশন প্যাচ) চান তার জন্য পয়েন্টার: সোর্সফোর্জ.नेट / পি / ফিউজ / এসএসএফস / সিসি / মাস্টার / ট্রি / এসএসএফএসসি ২৩০০ লাইনে শুরু করে।
ডারোবার্ট

উত্তর:


10

sshfs এসএসএইচ ফাইল স্থানান্তর প্রোটোকল (এসএফটিপি) ব্যবহার করে। আপনি যে কার্যকারিতাটি সক্ষম করেছেন সেই প্রোটোকলের উপর পুনর্নবীকরণের () অপারেশনের শব্দার্থক চারদিকে কাজ করছে যখন "নতুন" নাম ইতিমধ্যে বিদ্যমান রয়েছে।

এই ক্ষেত্রে নাম পরিবর্তন করতে () এর POSIX আচরণ হ'ল বিদ্যমান ফাইলটি সরিয়ে পুনরায় নামটি সম্পূর্ণ করা।

এসএফটিপি প্রোটোকলে, আপনি একটি ফাইলের নাম পরিবর্তন করতে পারেন এসএসএইচ_এফএক্সপিএএমপি ক্রিয়াকলাপ; যাইহোক, লক্ষ্য নামটি ইতিমধ্যে উপস্থিত থাকলে এর আচরণটি আপনি ব্যবহার করছেন এমন প্রোটোকলের সংস্করণ এবং আপনি কোন পতাকাগুলি পাস করেছেন তার উপর নির্ভর করে। এসএফটিপি প্রোটোকল জন্য উইকিপিডিয়া পৃষ্ঠা প্রোটোকলের বিভিন্ন সংস্করণের জন্য বিভিন্ন খসড়া RFCs করার লিঙ্ক আছে। ইন খসড়া 00 আচরণ হিসেবে তালিকাভুক্ত করা হয়:

এটি ইতিমধ্যে যদি নতুনপথ দ্বারা নির্দিষ্ট করা নাম সহ কোনও ফাইল উপস্থিত থাকে।

ইন খসড়া 13 , ব্যবহার হিসেবে তালিকাভুক্ত করা হয়

পতাকাগুলিতে যদি SSH_FXP_RENAME_OVERWRITE অন্তর্ভুক্ত না থাকে এবং সেখানে ইতিমধ্যে নিউপথ দ্বারা উল্লিখিত নামের সাথে একটি ফাইল উপস্থিত থাকে তবে সার্ভারটি এসএসএইচ_এফএক্স_এফএল_এফআরএলআইআরআইডিআইএসআইএসএসের সাথে প্রতিক্রিয়া জানাতে হবে।

যদি পতাকাগুলিতে এসএসএইচএফএক্সপিএপি_এম_এটিএমআইসি অন্তর্ভুক্ত থাকে এবং গন্তব্য ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে এটি পারমাণবিক ফ্যাশনে প্রতিস্থাপন করা হয়। অর্থাৎ, সময়টিতে কোনও পর্যবেক্ষণযোগ্য তাত্ক্ষণিক ঘটনা নেই যেখানে নামটি পুরানো বা নতুন ফাইলটিকে উল্লেখ করে না। SSH_FXP_RENAME_ATOMIC এসএসএইচ_এফএক্সপি_পি_আম_ওভারড্রিআরটি প্রেরণ করে।

টার্গেটের নাম উপস্থিত থাকলে পুনরায় নামকরণ () অপারেশনের সম্ভাব্য ব্যর্থতা মোকাবেলা করার জন্য, sshfs নিম্নলিখিত workaround প্রদান করে (যদি সক্ষম করা থাকে) :

   if (err == -EPERM && sshfs.rename_workaround) {
            size_t tolen = strlen(to);
            if (tolen + RENAME_TEMP_CHARS < PATH_MAX) {
                    int tmperr;
                    char totmp[PATH_MAX];
                    strcpy(totmp, to);
                    random_string(totmp + tolen, RENAME_TEMP_CHARS);
                    tmperr = sshfs_do_rename(to, totmp);
                    if (!tmperr) {
                            err = sshfs_do_rename(from, to);
                            if (!err)
                                    err = sshfs_unlink(totmp);
                            else
                                    sshfs_do_rename(totmp, to);
                    }
            }
    }

এই কোডটিতে "থেকে" হ'ল ফাইলটির নতুন নাম যা আমরা নাম পরিবর্তন করতে চাই এবং আমাদের নতুন নামটি "থেকে" হয়। কিছু পথের দৈর্ঘ্য এবং ত্রুটির বুককিপিকে একপাশে রেখে এই কাজটি করা হচ্ছে

  • "থেকে" টুটাম্প "নাম পরিবর্তন করে
  • "থেকে" থেকে "" নাম পরিবর্তন করে
  • লিঙ্কগুলি (মুছে ফেলা) "টোট্প"

এটি "ফাইলটি ইতিমধ্যে বিদ্যমান" বিরোধকে এড়িয়ে চলে, তবে পুনরায় নামকরণ () ক্রিয়াকলাপগুলির শব্দার্থকেও পরিবর্তন করে, এজন্য আপনি এটি ডিফল্টরূপে করতে চান না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.