Existing cp` কেন বিদ্যমান ফাইলগুলিকে নিঃশব্দে ওভাররাইট করার জন্য ডিজাইন করা হয়েছিল? [বন্ধ]


30

আমি cpনিম্নলিখিত আদেশগুলি দিয়ে পরীক্ষা করেছি :

$ ls
first.html   second.html  third.html

$ cat first.html
first

$ cat second.html
second

$ cat third.html
third

তারপরে আমি অনুলিপি first.htmlকরছি second.html:

$ cp first.html second.html

$ cat second.html
first

ফাইলটি second.htmlকোনও ত্রুটি ছাড়াই নিঃশব্দে ওভাররাইট করা হয়েছে। যাইহোক, আমি যদি কোনও ডেস্কটপ জিইউআইতে একই নামের সাথে কোনও ফাইল টেনে এনে ফেলে, এটি first1.htmlস্বয়ংক্রিয়ভাবে প্রত্যয়িত হবে। এটি দুর্ঘটনাক্রমে কোনও বিদ্যমান ফাইল ওভাররাইট করা এড়ানো যায়।

cpনিঃশব্দে ফাইলগুলি ওভাররাইটিংয়ের পরিবর্তে এই প্যাটার্নটি অনুসরণ করবে না কেন ?


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

8
@ কেভলিনাক্স কোর্টিলস দেবগণ কেবলমাত্র পসিক্স মান প্রয়োগ করছে।
কুসালানন্দ

17
কারণ যখন এটি তৈরি করা হয়েছিল তখন লোকেরা তাদের কাজগুলি দিয়ে যতটা সম্ভব নিখুঁত হতে চেয়েছিল (অতএব সিপি অনুলিপি করে) এবং তারা জানত যে তারা কী করেছে এবং যখন তারা ভুল করেছে তখন তারা সরঞ্জামগুলিকে দোষ দেওয়ার চেষ্টা করেনি। এটি তখন সম্পূর্ণ ভিন্ন ধরণের লোক ছিল যারা কম্পিউটার করেছিল। হার্ট সার্জনের জন্য স্কাল্পেল কেন হাতে কাটতে পারে তা জিজ্ঞাসা করার মতো।
প্লাজমাএইচএইচ

4
ইউনিক্স কম্পিউটার-বিশেষজ্ঞদের দ্বারা এবং এর জন্য ডিজাইন করেছিলেন, ব্যবহারকারী এই ধারণাটি সহ যে তিনি কী করছেন। ব্যবহারকারীর হাত ধরে না রেখে এবং অন্তহীন নিশ্চিতকরণ জিজ্ঞাসা না করে ওএস ব্যবহারকারীরা যদি সম্ভব হয় তবে ঠিক তা-ই করত। যদি কোনও অপারেশন কোনও কিছুর উপরে ওভাররোট করে তবে এটি ধরে নেওয়া হয়েছিল যে ব্যবহারকারী এটি চেয়েছিলেন। এছাড়াও মনে রাখবেন যে এটি 1970 এর দশকের গোড়ার দিকে - প্রি-এমএস ডস, উইন্ডোজ এবং হোম কম্পিউটারগুলি - প্রতিটি পদক্ষেপে ব্যবহারকারীর হাত পরিচালনা এবং ধরে রাখা এখনও সাধারণ ছিল না। এছাড়াও, টার্মিনাল হিসাবে টেলি-টাইপ-মেশিনযুক্ত, নিশ্চিতকরণের জন্য জিজ্ঞাসা করা সবসময় খুব জটিল হবে।
বার্ড কোপ্পেরুদ

10
উপন্যাস বা অনুরূপ ব্যবহার করবেন না কারণ আপনি সুরক্ষার জাল তৈরি করতে অভ্যস্ত cpহবেন cp -i, যেখানে এটি উপলব্ধ নেই সেখানে সিস্টেম তৈরি করুন (বেশিরভাগ) আরও বেশি ঝুঁকিপূর্ণ। নিজেকে নিয়মিত cp -iইত্যাদি শিখিয়ে নেওয়া ভাল যদি এটি আপনার পছন্দ হয়।
রিড

উত্তর:


52

এর ডিফল্ট ওভাররাইট আচরণ cpPOSIX এ নির্দিষ্ট করা আছে।

  1. সোর্স_ফাইলে যদি নিয়মিত ফাইল টাইপ হয় তবে নিম্নলিখিত পদক্ষেপ নেওয়া হবে:

    3.a. গতিপথ-ফাইল উপস্থিত থাকলে এবং পূর্বের ধাপে লেখা থাকলে আচরণটি অনির্দিষ্ট। অন্যথায়, গন্তব্যস্থল উপস্থিত থাকলে নিম্নলিখিত পদক্ষেপ নেওয়া হবে:

    ৩.ai যদি -i বিকল্পটি কার্যকর হয়, সিপি ইউটিলিটি স্ট্যান্ডার্ড ত্রুটির জন্য একটি প্রম্পট লিখবে এবং স্ট্যান্ডার্ড ইনপুট থেকে একটি লাইন পড়বে। যদি প্রতিক্রিয়াটি যথাযথ না হয়, সিপি উত্স_ফিলের সাহায্যে আর কিছুই করবে না এবং অবশিষ্ট যে কোনও ফাইলগুলিতে যাবে।

    3.a.ii. ডেসট_ফাইলের জন্য একটি ফাইল বর্ণনাকারী POSIX.1-2017 এর সিস্টেম ইন্টারফেস ভলিউমের সংজ্ঞায়িত ওপেন () ফাংশনের সমান ক্রিয়াকলাপ সম্পাদন করে পাথ আর্গুমেন্ট হিসাবে ডেট_ফিল ব্যবহার করে এবং O_WRONLY এবং O_TRUNC এর বিটওয়াইস-অন্তর্ভুক্ত OR দ্বারা প্রাপ্ত হবে by oflag যুক্তি।

    3.a.iii। যদি কোনও ফাইল বর্ণনাকারী প্রাপ্তির প্রচেষ্টা ব্যর্থ হয় এবং -ফ বিকল্পটি কার্যকর হয়, সিপি ফাইলটি মুছে ফেলার চেষ্টা করবে POSIX.1-2017 এর সিস্টেম ইন্টারফেস ভলিউমের সংজ্ঞায়িত লিঙ্ক () ফাংশনের সমান ক্রিয়াকলাপ দ্বারা ডেসট_ফায়াল ব্যবহার করে পথ আর্গুমেন্ট হিসাবে। যদি এই প্রচেষ্টা সফল হয়, সিপি পদক্ষেপ 3 বি দিয়ে চালিয়ে যাবে।

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

এছাড়াও, ইউনিক্স কমান্ড লাইনটি একজন অভিজ্ঞ ব্যবহারকারীর দক্ষতার সাথে কাজ করার অনুমতি দেওয়ার জন্য সর্বদা তৈরি করা হয়েছিল, এমনকি কোনও শিক্ষানবিশের জন্য কঠোর শেখার বাঁক ব্যয় করেও। যখন ব্যবহারকারী কোনও কমান্ড প্রবেশ করে, কম্পিউটারটি প্রত্যাশা করে যে ব্যবহারকারীর সত্যই এটির অর্থ হয়েছে, কোনও দ্বিতীয়-অনুমান ছাড়াই; সম্ভাব্য ধ্বংসাত্মক কমান্ডগুলি সম্পর্কে সতর্কতা অবলম্বন করা ব্যবহারকারীর দায়িত্ব।

মূল ইউনিক্সটি যখন বিকাশ করা হয়েছিল, তখন আধুনিক কম্পিউটারগুলির তুলনায় সিস্টেমে এত কম মেমরি এবং ভর স্টোরেজ ছিল যা সতর্কতা ও অনুরোধগুলি ওভাররাইট করে আবার সম্ভবত অপব্যয় এবং অপ্রয়োজনীয় বিলাসবহুল হিসাবে দেখা হত।

যখন পসিক্স স্ট্যান্ডার্ডটি লেখা হচ্ছিল, নজিরটি দৃ .়ভাবে প্রতিষ্ঠিত হয়েছিল এবং স্ট্যান্ডার্ডের লেখকরা পিছনের দিকের সামঞ্জস্যতা না ভাঙার গুণাবলী সম্পর্কে ভালভাবে অবগত ছিলেন ।

এছাড়াও অন্যরা যেমন বর্ণনা করেছেন, কোনও ব্যবহারকারী শেল অ্যালিয়াস ব্যবহার করে বা প্রতিস্থাপন cpকমান্ড তৈরি করে এবং $PATHস্ট্যান্ডার্ড সিস্টেম কমান্ডের আগে প্রতিস্থাপনটি সন্ধান করতে তাদের পরিবর্তন করে এবং সেভাবে সুরক্ষা জাল পেতে পারে তবে সেগুলি নিজের জন্য সেই বৈশিষ্ট্যগুলি যুক্ত / সক্ষম করতে পারে আকাঙ্ক্ষিত.

তবে আপনি যদি তা করেন তবে আপনি দেখতে পাবেন যে আপনি নিজের জন্য একটি বিপত্তি তৈরি করছেন। যদি cpকমান্ডটি ইন্টারেক্টিভভাবে ব্যবহৃত হয় এবং অন্যভাবে কোনও স্ক্রিপ্ট থেকে ডাকার সময় অন্যভাবে আচরণ করে তবে আপনি মনে করতে পারবেন না যে পার্থক্যটি বিদ্যমান। অন্য সিস্টেমে আপনি অসাবধানতা বোধ করতে পারেন কারণ আপনি সতর্কতার প্রতি অভ্যস্ত হয়ে পড়েছেন এবং আপনার নিজের সিস্টেমে প্রম্পট দেয়।

যদি স্ক্রিপ্টগুলিতে আচরণটি এখনও পসিক্স স্ট্যান্ডার্ডের সাথে মিলে যায় তবে আপনি সম্ভবত ইন্টারেক্টিভ ব্যবহারের অনুরোধগুলির সাথে অভ্যস্ত হয়ে উঠতে পারেন, তারপরে এমন একটি স্ক্রিপ্ট লিখুন যা কিছু ভর অনুলিপি করে - এবং তারপরে আপনি অজান্তে কিছু ওভাররাইট করে আবার খুঁজে পান।

আপনি যদি স্ক্রিপ্টগুলিতেও প্রম্পটিং প্রয়োগ করে থাকেন তবে আশেপাশে কোনও ব্যবহারকারী নেই, যেমন, ব্যাকগ্রাউন্ড প্রক্রিয়া বা ক্রোন জবস নেই এমন প্রসঙ্গে চালানো হলে কমান্ডটি কী করবে? স্ক্রিপ্টটি স্তব্ধ হয়ে যাবে, বাতিল হবে, বা ওভাররাইট হবে?

ফাঁসানো বা বাতিল করা মানে এমন একটি কাজ যা স্বয়ংক্রিয়ভাবে শেষ হওয়ার কথা ছিল তা করা হবে না। ওভাররাইট না করা কখনও কখনও নিজে নিজেও সমস্যার কারণ হতে পারে: উদাহরণস্বরূপ, এটি পুরানো ডেটা আপ-টু-ডেট ডেটার পরিবর্তে পরিবর্তে অন্য সিস্টেম দ্বারা দু'বার প্রক্রিয়াজাত করতে পারে।

কমান্ড লাইনের শক্তির একটি বড় অংশটি এই সত্য থেকে আসে যে আপনি একবার কমান্ড লাইনে কীভাবে কিছু করতে শিখেন, আপনি স্পষ্টভাবে এটিও শিখবেন যে কীভাবে এটি স্ক্রিপ্ট দ্বারা স্বয়ংক্রিয়ভাবে ঘটবে । তবে এটি কেবলমাত্র সত্য যদি আপনি স্ক্রিপ্ট প্রসঙ্গে অনুরোধ করা হলে ইন্টারেক্টিভভাবে ব্যবহার করা আদেশগুলিও ঠিক একইভাবে কাজ করে। ইন্টারেক্টিভ ব্যবহার এবং স্ক্রিপ্টযুক্ত ব্যবহারের মধ্যে আচরণের ক্ষেত্রে কোনও উল্লেখযোগ্য পার্থক্য এক ধরণের জ্ঞানীয় অনিয়ম তৈরি করবে যা কোনও শক্তি ব্যবহারকারীর জন্য বিরক্তিকর।


54
"কেন এটি এভাবে কাজ করে?" "কারণ স্ট্যান্ডার্ড তাই বলে।" "মান কেন তাই বলে?" "কারণ এটি ইতিমধ্যে এটি পছন্দ করেছে" "
ব্যাপটিস্ট ক্যান্ডেলিয়ার

16
শেষ অনুচ্ছেদটি আসল কারণ। নিশ্চিতকরণ ডায়লগ এবং " আপনি কি সত্যিই এটি করতে চান? " প্রম্পটগুলি
উইম্পস

@ ব্যাপটিস্টেন্ডেলিয়ার - একমত এর চূড়ান্ত কারণটির মতো এটি বাইরে রয়েছে তবে তাত্পর্যপূর্ণভাবে এই উত্তরটির নাগালের বাইরে।
টেড

2
এটি শেষ অনুচ্ছেদে কেন rm -rfএত কার্যকর, এমনকি যদি আপনি এটি নিজের হোম ডিরেক্টরিতে চালিত করতে না চান ...
ম্যাক্স ভার্নন

2
@ টেড মজার কথা কেউ কীভাবে কখনই উল্লেখ করেনি যে কীভাবে আনলিঙ্ক (২) সিস্কেল "মা, আমি পারি?" জিজ্ঞাসা করতে 'ব্যর্থ' হয়ে যায় যখনই এই আধাস্ত্রীয় আলোচনাগুলি আবার তাদের ঘন মাথার পিছনে থাকে। :)
tchrist

20

cpইউনিক্সের শুরু থেকে আসে। পোস্টিক্স স্ট্যান্ডার্ডটি লেখার আগে এটি ভাল ছিল। প্রকৃতপক্ষে: পিক্সিক্স কেবলমাত্র cpএ ব্যাপারে বিদ্যমান আচরণকে আনুষ্ঠানিকভাবে আনুষ্ঠানিকভাবে রচনা করেছেন ।

আমরা এপোচের (১৯ 1970০-০১-০১) কথা বলছি, যখন পুরুষরা সত্যিকারের পুরুষ ছিল, মহিলারা ছিলেন সত্যিকারের মহিলা এবং ছোট ছোট প্রাণী ... (আমি ডিগ্রি করলাম)। সেই দিনগুলিতে, অতিরিক্ত কোড যুক্ত করা একটি প্রোগ্রামকে আরও বড় করে তোলে। এটি তখন একটি সমস্যা ছিল, কারণ ইউনিক্স চালিত প্রথম কম্পিউটারটি ছিল পিডিপি -7 (144 কেবি র‌্যামে আপগ্রেডযোগ্য!)। নিরাপত্তা বৈশিষ্ট্য ছাড়াই জিনিসগুলি ছোট, দক্ষ ছিল।

সুতরাং, সেই দিনগুলিতে, আপনি কী করছেন তা আপনার জানতে হবে, কারণ পরে কম্পিউটারে আপনি যে অনুশোচনা করেছিলেন তা করার কোনও কিছুই আপনার থেকে রোধ করার ক্ষমতা কেবল কম্পিউটারের নেই।

(Zevar দ্বারা একটা চমৎকার কার্টুন নেই; "zevar cerveaux assiste সমাবস্থা ordinateur" এর জন্য অনুসন্ধান কম্পিউটারের বিবর্তন এটি নাকি চেষ্টা করুন। Http://perinet.blogspirit.com/archive/2012/02/12/zevar-et- cointe.html যতক্ষণ না এটি বিদ্যমান থাকবে)

যারা সত্যই আগ্রহী তাদের জন্য (আমি মন্তব্যগুলিতে কিছু জল্পনা দেখেছি): cpপ্রথম ইউনিক্সের মূলটি ছিল এসেম্বলার কোডের প্রায় দুই পৃষ্ঠার (সি পরে এসেছিল)। সম্পর্কিত অংশটি ছিল:

sys open; name1: 0; 0   " Open the input file
spa
  jmp error         " File open error
lac o17         " Why load 15 (017) into AC?
sys creat; name2: 0     " Create the output file
spa
  jmp error         " File create error

(সুতরাং, একটি শক্ত sys creat)

এবং, আমরা যখন এটিতে রয়েছি: ইউনিক্সের সংস্করণ 2 ব্যবহৃত হয়েছে (কোড স্নিপলেট)

mode = buf[2] & 037;
if((fnew = creat(argv[2],mode)) < 0){
    stat(argv[2], buf);

যা creatপরীক্ষা বা সুরক্ষার ব্যবস্থা ছাড়াই শক্ত । মনে রাখবেন যে ভি 2 ইউনিক্সের সি কোডটি cp55 টি লাইনের চেয়ে কম!


5
প্রায় সঠিক, ব্যতীত এটি " ছোট ফ্যারি " (আলফা সেন্টাউরির প্রাণীরা) " ফ্যারি লিটল " নয়!
ট্রিপহাউন্ড

1
@ টিইডিডিডি: গন্তব্যস্থলটি সম্পাদন এবং একটি / লুপ সঞ্চালনের cpএটি সম্পূর্ণরূপে প্রাথমিক সংস্করণসমূহ ; নিশ্চিত, আধুনিক সঙ্গে অনেক নব এটি মূলত চেষ্টা হয়েছে যে পূর্বেই গন্তব্য, এবং সহজে প্রথম অস্তিত্ব জন্য চেক পারে (এবং কিছু করে / ), কিন্তু প্রত্যাশা মূল, বেয়ার হাড় থেকে স্থাপিত হয় যদি , সরঞ্জাম যে আচরণ পরিবর্তন অকারণে বিদ্যমান স্ক্রিপ্টগুলি ভেঙে ফেলবে। এটি আধুনিক শেলগুলির মতো নয় যা সর্বোপরি ইন্টারেক্টিভ ব্যবহারের জন্য কেবল ডিফল্ট তৈরি করতে পারে না । openO_CREAT | O_TRUNCreadwritecpstatcp -icp -ncpaliascp -i
শ্যাডোর্যাঞ্জার

নিবন্ধন করুন আপনি একদম ঠিক বলেছেন যে এটি করা সহজ বা কঠিন যদি আমার সত্যিই কোন ধারণা নেই। মন্তব্য মুছে ফেলা হয়েছে।
টেড

1
@ শ্যাডোএ্যাঞ্জার হ্যাঁ, তবে তারপরে এটি কেবল প্রডাকশন সিস্টেমে না আসা পর্যন্ত রাস্তাটি কঠিন
পাঠাচ্ছে

1
@ সোর্সজেদি: মজা! আমার মৌলিক তত্ত্বটি পরিবর্তন করে না (এটি কেবল কাটাকাটি দিয়ে নিঃশর্তভাবে খোলা সহজ ছিল, এবং creatএটি open+ এর সমতুল্য হয়ে O_CREAT | O_TRUNCওঠে) তবে অস্তিত্ব O_EXCLব্যাখ্যা করে না যে এটি বিদ্যমান ফাইলগুলি পরিচালনা করা এত সহজ কেন হত না; এটি করার চেষ্টা করা অন্তর্নিহিত যথাযথতা হবে (আপনাকে মূলত অস্তিত্ব পরীক্ষা করতে হবে open/ statব্যবহার করতে হবে creat, তবে বড় ভাগ করা সিস্টেমে, আপনার কাছে পৌঁছানোর সময় creat, অন্য কেউ ফাইলটি তৈরি করেছিল এবং এখন আপনি ব্লক করে ফেলেছেন তা সর্বদা সম্ভব হয়) যাইহোক এটি দূরে)। পাশাপাশি শর্তহীনভাবে ওভাররাইটও করতে পারে।
শ্যাডোর্যাঞ্জার

19

কারণ এই কমান্ডগুলি স্ক্রিপ্টগুলিতে ব্যবহৃত হতে পারে, সম্ভবত কোনও ধরণের মানব তত্ত্বাবধান ছাড়াই চলতে পারে এবং এমনও কারণ প্রচুর পরিমাণে আছে যেখানে আপনি প্রকৃতপক্ষে লক্ষ্যটিকে ওভাররাইট করতে চান (লিনাক্স শেলসের দর্শন এই যে মানুষ কী জানে সে করছে)

এখনও কয়েকটি সুরক্ষার ব্যবস্থা রয়েছে:

  • জিএনইউ cpএর একটি -n| --no-clobberপছন্দ
  • আপনি যদি একা একাধিক ফাইল অনুলিপি করেন তবে cpঅভিযোগ করবে যে শেষটি কোনও ডিরেক্টরি নয়।

এটি কেবল একজন বিক্রেতা নির্দিষ্ট প্রয়োগের ক্ষেত্রে প্রযোজ্য এবং প্রশ্নটি সেই বিক্রেতা নির্দিষ্ট প্রয়োগের ক্ষেত্রে ছিল না।
দক্ষতার সাথে

10

এটি কি "একবারে একটি কাজ করুন"?

এই মন্তব্যটি সাধারণ ডিজাইনের নীতি সম্পর্কে একটি প্রশ্নের মতো মনে হচ্ছে। প্রায়শই, এগুলি সম্পর্কে প্রশ্নগুলি খুব বিষয়গত হয় এবং আমরা সঠিক উত্তর লিখতে পারি না to সতর্কতা অবলম্বন করুন যে আমরা এই ক্ষেত্রে প্রশ্নগুলি বন্ধ করতে পারি।

কখনও কখনও আমাদের কাছে মূল নকশা পছন্দ সম্পর্কে ব্যাখ্যা থাকে কারণ বিকাশকারীরা সেগুলি সম্পর্কে লিখেছেন। তবে এই প্রশ্নের উত্তর আমার কাছে নেই have

কেন cpএইভাবে ডিজাইন করা হয়েছে?

সমস্যাটি ইউনিক্সের বয়স 40 বছরেরও বেশি।

আপনি যদি এখনই একটি নতুন সিস্টেম তৈরি করছিলেন তবে আপনি বিভিন্ন নকশার পছন্দ করতে পারেন। তবে ইউনিক্স পরিবর্তন করলে অন্যান্য স্ক্রিপ্টগুলি নষ্ট হয়ে যাবে, যেমন অন্যান্য উত্তরে উল্লিখিত হয়েছে।

চুপচাপ বিদ্যমান ফাইলগুলি ওভাররাইট করার জন্য কেন নকশা করা হয়েছিল cp ?

সংক্ষিপ্ত উত্তরটি "আমি জানি না" :-)।

বুঝতে পারি যে cpএটি কেবল একটি সমস্যা। আমি মনে করি মূল কমান্ড প্রোগ্রামগুলির কোনওটিই ওভাররাইটিং বা ফাইলগুলি মুছে ফেলার বিরুদ্ধে সুরক্ষিত নেই। আউটপুট পুনর্নির্দেশের সময় শেলের একই সমস্যা রয়েছে:

$ cat first.html > second.html

এই কমান্ডটি নিঃশব্দে ওভাররাইট করে second.html

এই সমস্ত প্রোগ্রাম কীভাবে নতুনভাবে ডিজাইন করা যেতে পারে তা ভাবতে আগ্রহী। এটিতে কিছু অতিরিক্ত জটিলতার প্রয়োজন হতে পারে।

আমি মনে করি এটি ব্যাখ্যাটির একটি অংশ: প্রথমদিকে ইউনিক্স সহজ বাস্তবায়নের উপর জোর দিয়েছিল । এর আরও বিশদ ব্যাখ্যার জন্য দেখুন "উত্তম আরও ভাল" এই উত্তরের শেষে যুক্ত।

আপনি পরিবর্তন করতে > second.htmlপারেন তাই এটি second.htmlইতিমধ্যে উপস্থিত থাকলে কোনও ত্রুটি দিয়ে থামে । তবে যেমনটি আমরা উল্লেখ করেছি, কখনও কখনও ব্যবহারকারী কোনও বিদ্যমান ফাইলটি প্রতিস্থাপন করতে চান। উদাহরণস্বরূপ, তিনি একটি জটিল কমান্ড তৈরি করতে পারেন, যতক্ষণ না সে তার ইচ্ছা অনুযায়ী কাজ করে।

ব্যবহারকারী rm second.htmlপ্রয়োজনে প্রথমে চালাতে পারে। এটি একটি ভাল আপস হতে পারে! এটির নিজস্ব কিছু সম্ভাব্য অসুবিধা রয়েছে।

  1. ব্যবহারকারীকে অবশ্যই ফাইলের নাম দুটি টাইপ করতে হবে।
  2. লোকেরা ব্যবহার করে অনেক সমস্যায় পড়ে rm। তাই আমি আরও rmনিরাপদ করতে চাই । কিন্তু কিভাবে? আমরা যদি rmপ্রতিটি ফাইলের নাম প্রদর্শন করি এবং ব্যবহারকারীকে নিশ্চিত করতে বলি , তাকে এখন একটি পরিবর্তে তিনটি লাইন কমান্ড লিখতে হবে। এছাড়াও, যদি তাকে প্রায়শই এটি করতে হয় তবে সে অভ্যাসে নেমেছে এবং কোনও চিন্তা না করে নিশ্চিত করতে "y" টাইপ করবে। সুতরাং এটি খুব বিরক্তিকর হতে পারে এবং এটি এখনও বিপজ্জনক হতে পারে।

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

আমি মনে করি মূল ইউনিক্স হার্ডওয়্যার - সীমাবদ্ধ র‌্যাম এবং ডিস্ক স্পেস, স্লো প্রিন্টারে প্রদর্শিত আউটপুট পাশাপাশি সিস্টেম এবং ডেভেলপমেন্ট সফ্টওয়্যারগুলির সীমাবদ্ধতাগুলি বোঝাও গুরুত্বপূর্ণ ।

লক্ষ্য করুন যে কমান্ডের জন্য ফাইলের নামটি দ্রুত পূরণ করার জন্য মূল ইউনিক্সের ট্যাব সমাপ্তি ছিল না rm। (এছাড়াও, বোর্ন শেলটির মূল কমান্ডের ইতিহাস নেই, যেমন আপনি যখন উপরে তীর কী ব্যবহার করেন bash)।

প্রিন্টারের আউটপুট সহ, আপনি লাইন-ভিত্তিক সম্পাদক, ব্যবহার করবেন ed। ভিজ্যুয়াল টেক্সট এডিটরের চেয়ে এটি শেখা শক্ত। আপনাকে কিছু বর্তমান লাইন মুদ্রণ করতে হবে, কীভাবে আপনি সেগুলি পরিবর্তন করতে চান তা নির্ধারণ করতে হবে এবং একটি সম্পাদনা কমান্ড টাইপ করতে হবে।

ব্যবহার > second.htmlকরা কিছুটা লাইন-এডিটরে একটি কমান্ড ব্যবহার করার মতো। এটির প্রভাবটি বর্তমান অবস্থার উপর নির্ভর করে। (যদি second.htmlইতিমধ্যে বিদ্যমান থাকে তবে এর সামগ্রীটি বাতিল করা হবে)। ব্যবহারকারী যদি বর্তমান অবস্থা সম্পর্কে নিশ্চিত না হন তবে তিনি চালাবেন lsবা ls second.htmlপ্রথমে প্রত্যাশিত ।

নকশার নীতি হিসাবে "সাধারণ বাস্তবায়ন"

ইউনিক্স ডিজাইনের একটি জনপ্রিয় ব্যাখ্যা রয়েছে, যা শুরু হয়:

নকশাটি বাস্তবায়ন এবং ইন্টারফেস উভয়ই সহজ হতে হবে। ইন্টারফেসের চেয়ে বাস্তবায়নের পক্ষে সহজ হওয়া আরও গুরুত্বপূর্ণ। সরলতা একটি নকশার মধ্যে সবচেয়ে গুরুত্বপূর্ণ বিবেচনা।

...

গ্যাব্রিয়েল যুক্তি দিয়েছিলেন যে "ওয়ার্স আরও ভাল" এমআইটি পদ্ধতির চেয়ে আরও সফল সফ্টওয়্যার তৈরি করেছে: প্রাথমিক প্রোগ্রাম যতক্ষণ প্রাথমিকভাবে ভাল হয়, প্রাথমিকভাবে এটি বাস্তবায়নে অনেক কম সময় এবং প্রচেষ্টা লাগবে এবং নতুন পরিস্থিতিতে খাপ খাইয়ে নেওয়া আরও সহজ হবে। নতুন মেশিনগুলিতে সফ্টওয়্যারটির পোর্টিং উদাহরণস্বরূপ, এভাবে আরও সহজ হয়ে যায়। এইভাবে এর ব্যবহারটি দ্রুত ছড়িয়ে পড়বে, একটি [আরও ভাল] প্রোগ্রামটি বিকাশ এবং স্থাপনের (প্রথম-মুভির সুবিধা) হওয়ার সুযোগ পাওয়ার অনেক আগে।

https://en.wikipedia.org/wiki/Worse_is_better


কেন cp"সমস্যা" দিয়ে লক্ষ্যটিকে ওভাররাইট করা হচ্ছে ? ইন্টারেক্টিভভাবে এটির জন্য অনুমতি চাওয়া, বা ব্যর্থ হওয়া এত বড় একটি "সমস্যা" হতে পারে।
কুসালানন্দ

ওহ! ধন্যবাদ. গাইডলাইনটির পরিপূরক: 1) এমন একটি প্রোগ্রাম লিখুন যা একটি কাজ করে এবং এটি ভাল করে। 2) প্রোগ্রামার বিশ্বাস।
বীজগণিত

2
@ কুসালানন্দ তথ্য হ্রাস একটি সমস্যা। আমি ডেটা হারানোর ঝুঁকি কমাতে আমি ব্যক্তিগতভাবে আগ্রহী। এটি বিভিন্ন পন্থা আছে। এটি সমস্যা হিসাবে বলার অর্থ এই নয় যে বিকল্পগুলির মধ্যেও সমস্যা নেই।
সোর্সজেডি

1
সি ভাষায় লিখিত @ রাইডারড্রাগন প্রোগ্রামগুলি প্রায়শই খুব আশ্চর্য উপায়ে ব্যর্থ হতে পারে, কারণ সি প্রোগ্রামারকে বিশ্বাস করে। তবে প্রোগ্রামাররা কেবল এটি নির্ভরযোগ্য নয়। আমাদের খুব উন্নত সরঞ্জামগুলি লিখতে হবে, যেমন ভ্যালগ্রাইন্ড , যা প্রোগ্রামাররা যে ভুলগুলি করে তা চেষ্টা করার চেষ্টা করে try আমি মনে করি যে জং বা পাইথন বা সি # এর মতো প্রোগ্রামিং ভাষা থাকা আপনার কাছে গুরুত্বপূর্ণ যা প্রোগ্রামারকে বিশ্বাস না করে "মেমরি সুরক্ষা" প্রয়োগের চেষ্টা করে। (ইউএনআইএক্সের কোনও লেখক পোর্টেবল ভাষায় লেখার জন্য সি ভাষাটি তৈরি করেছিলেন)।
সোর্সজেডি

1
এমনকি আরও ভাল cat first.html second.html > first.htmlফলাফল শুধুমাত্র first.htmlসামগ্রীর সাথে ওভাররাইট করা হবে second.html। মূল বিষয়বস্তু সর্বকালের জন্য হারিয়ে যায়।
didal24

9

"সিপি" এর নকশাটি ইউনিক্সের মূল নকশায় ফিরে যায়। বাস্তবে ইউনিক্স ডিজাইনের পিছনে একটি সুসংগত দর্শন ছিল, যা অর্ধ-রসিকভাবে ওয়ার্স-ইজ-বেটার * নামে অভিহিত হওয়া থেকে খানিকটা কম ছিল ।

মূল ধারণাটি হ'ল কোডটি সহজ রাখা আসলে একটি আরও গুরুত্বপূর্ণ নকশা বিবেচনা যা একটি নিখুঁত ইন্টারফেস থাকা বা "সঠিক জিনিস করা"।

  • সরলতা - নকশাটি বাস্তবায়ন এবং ইন্টারফেস উভয়ই সহজ হতে হবে। ইন্টারফেসের চেয়ে বাস্তবায়নের পক্ষে সহজ হওয়া আরও গুরুত্বপূর্ণ । সরলতা একটি নকশার মধ্যে সবচেয়ে গুরুত্বপূর্ণ বিবেচনা।

  • সঠিকতা - সমস্ত পর্যবেক্ষণযোগ্য দিকটিতে নকশাটি অবশ্যই সঠিক হতে হবে। সঠিক থেকে সহজ হওয়া কিছুটা ভাল।

  • ধারাবাহিকতা - নকশাটি অতিরিক্ত বেমানান হওয়া উচিত নয়। কিছু ক্ষেত্রে সরলতার জন্য ধারাবাহিকতা উত্সর্গ করা যেতে পারে, তবে বাস্তবায়নের জটিলতা বা অসঙ্গতির পরিচয় দেওয়ার চেয়ে ডিজাইনের সেই অংশগুলি কম সাধারণ পরিস্থিতিতে মোকাবেলা করা ভাল

  • সম্পূর্ণতা - নকশাকে ব্যবহারিক হিসাবে যতটা গুরুত্বপূর্ণ পরিস্থিতি আবশ্যক। সমস্ত যুক্তিসঙ্গত প্রত্যাশিত কেসগুলি beেকে রাখা উচিত। সম্পূর্ণতা অন্য যে কোনও মানের পক্ষে উত্সর্গ করা যায়। প্রকৃতপক্ষে, বাস্তবায়ন সরলতাকে হতাশায় যখনই পূর্ণতা ত্যাগ করতে হবে। সরলতা বজায় থাকলে সম্পূর্ণতা অর্জনের জন্য ধারাবাহিকতা ত্যাগ করতে পারে; বিশেষত মূল্যহীন ইন্টারফেসের ধারাবাহিকতা।

( জোর খনি )

মনে রাখবেন যে এটি 1970 ছিল, "আমি এই ফাইলটি অনুলিপি করতে চাই" এর ব্যবহারের ক্ষেত্রে যদি ইতিমধ্যে উপস্থিত না তবেই কেবল এটি " এর ব্যবহারের কেস অনুলিপি সম্পাদনকারী ব্যক্তির পক্ষে মোটামুটি বিরল ব্যবহারের কেস হত। যদি আপনি যা চান তা যদি হয় তবে আপনি অনুলিপিটির আগে যাচাই করতে যথেষ্ট সক্ষম হবেন এবং এটি স্ক্রিপ্টও করা যেতে পারে।

কেন সেই ডিজাইনের পদ্ধতির সাথে একটি ওএস একই সময়ে অন্যান্য সমস্ত ওএস তৈরি হওয়ার পরে জিতেছে, প্রবন্ধটির লেখকও সেটির জন্য একটি তত্ত্ব করেছিলেন।

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

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

* - বা লেখক কী, কিন্তু অন্য কেউ নয়, "দ্য নিউ জার্সি অ্যাপ্রোচ" নামে পরিচিত


1
এটি সঠিক উত্তর।
tchrist

+1, তবে আমি মনে করি এটির একটি দৃ concrete় উদাহরণ থাকতে সাহায্য করবে। আপনি সম্পাদিত এবং পুনরায় সংকলিত কোনও প্রোগ্রামের একটি নতুন সংস্করণ ইনস্টল করার সময় (এবং সম্ভবত এটি পরীক্ষা করা হয়েছে :-), আপনি ইচ্ছাকৃতভাবে প্রোগ্রামটির পুরানো সংস্করণটি ওভাররাইট করতে চান। (এবং আপনি সম্ভবত আপনার কম্পাইলার থেকে অনুরূপ আচরণ চাই। তাই প্রথম দিকে ইউনিক্স শুধুমাত্র হয়েছে creat()বনাম open()open()একটি ফাইল তৈরি করতে পারে নি যদি এটা অস্তিত্ব ছিল না। এটা শুধুমাত্র পঠন / লিখন জন্য 0/1/2 লাগে / উভয়। এটি এখনও গ্রহণ না করে তাহলে O_CREAT, এবং নেই O_EXCL)।
সোর্সজেডি

@ সোর্সজেদি - দুঃখিত, তবে আমি নিজেই একজন সফ্টওয়্যার বিকাশকারী হিসাবে সত্যই আমি যেখানে কোনও অনুলিপি করব তার চেয়ে অন্য দৃশ্যের কথা ভাবতে পারি না। :-)
টেড

@ টেড দুঃখিত, আমি বোঝাতে চাইছি এই উদাহরণটি আমি প্রস্তাব করছি, এমন একটি বিরল ক্ষেত্রে যেমন আপনি অবশ্যই একটি ওভাররাইট চান, যেখানে আপনি সম্ভবত করেননি এমন প্রশ্নের তুলনা তুলনা করে।
সোর্সজেডি

0

এর মূল কারণটি হ'ল একটি জিইউআই হচ্ছে সংজ্ঞা দ্বারা ইন্টারেক্টিভ, অন্যদিকে বাইনারি যেমন /bin/cpএকটি প্রোগ্রাম যা সমস্ত ধরণের জায়গা থেকে ডাকা যেতে পারে, উদাহরণস্বরূপ আপনার জিইউআই ;-) থেকে। আমি বাজি দিয়েছি যে আজও প্রচুর কল করার জন্য /bin/cpএকজন রিয়েল টার্মিনাল থেকে কোনও ব্যবহারকারী শেল কমান্ড টাইপ করবে না বরং এইচটিটিপি সার্ভার বা কোনও মেল সিস্টেম বা কোনও নাস থেকে হবে। ব্যবহারকারীর ত্রুটিগুলির বিরুদ্ধে একটি অন্তর্নির্মিত সুরক্ষা একটি ইন্টারেক্টিভ পরিবেশে সম্পূর্ণ অর্থবোধ করে; একটি সাধারণ বাইনারি কম তাই। উদাহরণস্বরূপ, আপনার জিইউআই সম্ভবত /bin/cpপ্রকৃত ক্রিয়াকলাপ সম্পাদনের জন্য ব্যাকগ্রাউন্ডে কল করবে এবং এটি কেবলমাত্র ব্যবহারকারীকে জিজ্ঞাসা করলেও মানসম্মত সুরক্ষার প্রশ্নাবলী মোকাবেলা করতে হবে!

মনে রাখবেন যে এটি /bin/cpপছন্দসই হলে চারপাশে নিরাপদ মোড়ক লেখার জন্য তুচ্ছ দিনের কাছাকাছি ছিল । * নিক্স দর্শন দর্শকদের জন্য সাধারণ বিল্ডিং ব্লক সরবরাহ করা: এর /bin/cpমধ্যে একটি।

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