মূল হিসাবে পুনরায় সম্পাদনা করুন


28

আমি প্রায়শই ভিএম-তে একটি ফাইল খুলি, কিছু পরিবর্তন করি এবং যখন ফাইলটি সংরক্ষণের সময় হয় কেবলমাত্র পঠনযোগ্য .. (অন্য কোনও ব্যক্তির মালিকানাধীন)। আমি কীভাবে ফাইলটিকে মূল হিসাবে পুনরায় খুলতে পারি এবং কপির জন্য অস্থায়ী ফাইলে সংরক্ষণ না করে বা রুট হিসাবে পুনরায় সম্পাদনা না করে কীভাবে আমার পরিবর্তনগুলি রাখতে পারি তার টিপস সন্ধান করছি।

উত্তর:


42

এই স্ট্যাকওভারফ্লো উত্তরটি , স্কিন্প দ্বারা

:w !sudo tee %

আমি প্রায়শই কোনও ফাইল সম্পাদনা করার আগে sudo করতে ভুলে যাই আমার কাছে লেখার অনুমতি নেই। যখন আমি সেই ফাইলটি সংরক্ষণ করতে এবং অনুমতি ত্রুটি পেতে আসি, তখন আমি কেবলমাত্র একটি ভিএম কমান্ডটি ফাইলটি কোনও অস্থায়ী ফাইলে সংরক্ষণ করার প্রয়োজন ছাড়াই সংরক্ষণ করার জন্য জারি করি এবং তারপরে আবার কপি করে ফেলি।


এটি প্রায় এটিই .. তবে
ভিমটি

@ rkthkr, যদি "ভিম পুনরায় চালু হয় এবং রুট হিসাবে চালিত হয়" আপনি নিজের সম্পাদনা সম্পাদনা করতে অক্ষম হবেন এবং আপনার পূর্বাবস্থায় ফিরে যাওয়া ইতিহাস হারাবেন। তবে যদি আপনি এটি চান তবে ... [চরিত্রগুলি সমাপ্ত হয়েছে]] "উত্তর" দেখুন আমি লিখতে চলেছি।
ব্রুনো ব্রোনোস্কি

2
@ ডিবিআর, আমি মনে করি এটি উল্লেখযোগ্য যে আপনি ফাইলটি ওভাররাইট করার পরে (টি সুডো হিসাবে টি) পরে, আপনাকে [ও] কে বা [এল] ওডের সাথে অনুরোধ করা হবে। পরবর্তী বিকল্পটি আপনার পূর্বাবস্থায় ফিরিয়ে আনার ইতিহাসটি মুছে ফেলবে একটি পরিবর্তন "পরিবর্তিত পতাকা" আপনাকে পরিবর্তনগুলি সংরক্ষণের সতর্কতা ছাড়াই প্রস্থান করতে দেয়। পূর্বের বিকল্পটি, যা আমি পছন্দ করি তা আপনার পূর্বাবস্থার ইতিহাস সংরক্ষণ করবে তবে আপনি যখন প্রস্থান করার চেষ্টা করবেন তখন আপনাকে সতর্ক করতে হবে। আপনাকে ব্যবহার করতে হবে: কি! এক্ষেত্রে ছাড়তে হবে। আমি এটি করি তাই আমি যাচাই করতে পারি (যেমন:! Sudo /etc/init.d/httpd কনফিগারেশন) এবং রোলব্যাক / পুনর্নির্মাণের প্রয়োজন হলে।
ব্রুনো ব্রোনোস্কি

15

এই জন্য আমাকে ভোট দিন না দয়া করে। আমি এই উত্তরটি বাস্তবায়নের প্রস্তাব দিচ্ছি না, তবে এটিই উত্তর যা rkthkr জিজ্ঞাসা করছে।

rkthkr বলেছেন:
তবে ভিমটি আবার চালু করে মূল হিসাবে চালানো ভাল লাগবে

এটি :!sudo vim %
করার উপায়টি আমি আইপোজগাজে যেমন উল্লেখ করেছি, একটি আর্গুমেন্ট হিসাবে (% একটি উপ-তর্কও) বর্তমান বাফারের পথে প্রতিস্থাপিত হয়। (আপনি আপনার পাসওয়ার্ডের জন্য অনুরোধ জানাতে পারেন)) আপনি একটি নতুন ভিআইএম প্রক্রিয়াটি শেষ করবেন, এটি রুটের মালিকানাধীন, এটি আসল ভিম প্রক্রিয়াটির একটি শিশু প্রক্রিয়া। বোকা লাগছে, তাইনা? এখানে PS তে দেখতে কেমন লাগে:

~# ps afo pid,ppid,user,stat,comm
  PID  PPID USER         STAT COMMAND
16187 30478 rbronosky    Ss   bash
16510 16187 rbronosky    R+    \_ ps
30482 30478 rbronosky    Ss   bash
16244 30482 rbronosky    S+    \_ vim
16318 16244 root         S+        \_ vim

আপনি যদি সেই ডিরেক্টরিতে ফাইলটি লেখার অনুমতি পেয়ে থাকেন এবং এতে আপনি সম্পাদনা করে থাকেন তবে আপনাকে সতর্ক করা হতে পারে যে একটি সোয়াপ ফাইলটি প্রস্থান করে। [আর] ইকোভারে নির্বাচন করা, পিতামাত্ত্র vim প্রক্রিয়াটির বেশিরভাগ * পরিবর্তনগুলি প্রতিফলিত করবে । (* আমি মনে করি হয়তো swap 'র আপডেটের সময় শেষ হয় বা একটি ব-দ্বীপ থ্রেশহোল্ড হয়েছে। আমি ইতিমধ্যে এই মধ্যে খুব বেশি সময় রেখেছি এবং এটি গবেষণা পরোয়া করি না।) যখন আপনি যান এবং তেজ প্রস্থান, না যখন আপনি আতঙ্কিত করা এখনও ভিমে আছে ... আপনি একটি দ্বিতীয় ভিআইএম প্রক্রিয়া খুলেছেন। মনে রাখবেন?

এখন, এই সমস্ত বলে ... আমি প্রায় কখনই এটি করব না। হতে পারে, যদি আমার পর্যাপ্ত পরিমাণ বা কফি বেশি না থাকে এবং আমি বুঝতে পারি যে রুট হিসাবে আমাকে আরও বেশ কয়েকটি ফাইল সম্পাদনা করতে হবে ... আমি এটি চেষ্টা করতে পারি try অ্যাডমিনিস্টিং সিস্টেমের 14 বছরের মধ্যে, আমি কখনই পাইনি। তবে, যতক্ষণ না আপনি আমার পছন্দের সমাধানটির সাথে অসন্তুষ্টি প্রকাশ করেছেন (যা ঠিক ডিবিআর দেওয়া হয় ঠিক তেমন) আমি এ সম্পর্কে কখনই ভাবিনি।


ধন্যবাদ রিচার্ড! খুব তথ্যপূর্ণ, আমি আপনাকে এর জন্য +1 দেব :)
rkthkr

এটি একটি খুব উচ্চ মানের উত্তর: কেন ভোট নিচে? আমার কাছ থেকেও +1।
মেই

1
ধন্যবাদ @ রিচার্ড ব্রোনোস্কি, আমার জিভিমে সুডো পাসওয়ার্ড দিয়ে টাইপ করা সম্ভব নয় :w !sudo tee %তাই আমি মনে করি এটি একটি ভাল উত্তর।
এরিক ফোর্টিস

1

আমি তখন সাধারণত $ HOME / tmp / apache.conf (উদাহরণস্বরূপ) একটি অস্থায়ী ফাইলে সংরক্ষণ করি

sudo vimdiff $HOME/tmp/apache.conf /etc/apache2/apache.conf

পরিবর্তনগুলিকে একীভূত করতে এটি কিছু অতিরিক্ত কাজ তবে এটি প্রদান করে। অযাচিত পরিবর্তনগুলির বিরুদ্ধে সুবিধার্থে এবং পরিমাপের মধ্যে আমি এটি একটি দুর্দান্ত উপায় বলে মনে করি

এর আগে আমি এসিএলগুলির কথা ভাবছিলাম বা ফাইলগুলিতে সংশ্লিষ্ট গ্রুপগুলি নির্ধারিত করেছিলাম তবে এটি প্রায়শই কার্যকর হয় নি আমি হয় মালিকানা বদলাতে ভুলে গিয়েছি বা ফাইলগুলি পরিবর্তন করেছিলাম যেখানে আমার এটি করা হয়নি।

এটি কেবল এখন পর্যন্ত পরিচালিত নয় এমন ফাইলগুলির জন্য যায়। আমরা যে সামগ্রিক সমাধানটি ব্যবহার করি তা হ'ল একটি গিট রেপো সহ পুতুল যেখানে লোকেরা স্থানীয়ভাবে ফাইলগুলি সম্পাদনা করে এবং যথাযথ সার্ভারের পরিবর্তনগুলি পরীক্ষা করে, যদি কনফিগারেশন পছন্দসই কাজ করে তবে পরিবর্তনগুলি আবার কেন্দ্রীয় ভান্ডারে ফিরে যায় যেখানে আমাদের কনফিগারেশন ইঞ্জিন নিয়মিত বিরতিতে পরিবর্তনগুলি টান দেয়।


0

আমি সাধারণত যা করি - তাড়াতাড়ি দ্রুত হওয়া উচিত নয়, তবে অবশ্যই নিরাপদ - এটির মতো কিছু করা (উদাহরণস্বরূপ nsswitch.conf ব্যবহার করে):

:w! ~/%

ভিম থেকে প্রস্থান করুন, তারপরে করুন:

sudo vim nsswitch.conf
1GdG
:r ~/%

এটি সমস্ত লাইন মুছে ফেলবে এবং এর পরিবর্তে পরিবর্তিত ও আপডেট হওয়া সংস্করণে তার জায়গায় পাঠ করা হবে। আপনার হোম ডিরেক্টরি ব্যবহারের অর্থ আপনার অ্যাক্সেস আছে কি নেই সে সম্পর্কে আপনাকে ভাবতে হবে না - এবং এটি / tmp এর চেয়ে বেশি ব্যক্তিগত। ভালভাবে নোট করুন যে এটি একটি সম্পূর্ণ ফাইল প্রতিস্থাপন: আপনি যদি সমস্ত পরিবর্তন যুক্ত করতে না চান তবে আপনাকে বাছাই করতে হবে এবং চয়ন করতে হবে।

এই উত্তরের যে কোনও একটিতে মাথা ব্যথা জড়িত থাকা সত্ত্বেও, আপনার পরিবর্তনগুলি হারাবার কোনও কারণ নেই।

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