স্পর্শ কেন নতুন ফাইল তৈরি করে?


13

আমি সচেতন যে touchএকটি ফাইলের সর্বশেষ পরিবর্তনের তারিখ আপডেট করতে কমান্ডটি ব্যবহৃত হয়। অনুরোধ করা ফাইলটি যদি ফাইল সিস্টেমে উপস্থিত না থাকে তবে এটি একটি নতুন ফাইল তৈরি করতেও ব্যবহৃত হয়।

যেহেতু স্পর্শ (এটি নাম থেকেই বোঝা যায়), কেবলমাত্র সর্বশেষ পরিবর্তনের তারিখটি আপডেট করা উচিত, কেন এটি একটি নতুন ফাইল তৈরি করার চেষ্টা করে?

এটি কি স্পর্শের কোডে লেখা একটি চেক, বা এটি অন্য কিছু যা কোনও ফাইল তৈরির কারণ হয়ে দাঁড়ায়?


ব্যবহারের ক্ষেত্রে হিসাবে, আমি ফাইলটি পরবর্তী সিস্টেমে পুনরায় বুট করার সময় ত্রুটিগুলির জন্য পরীক্ষা করতে বাধ্য করার জন্য touch /forcefsckডাকা একটি খালি ফাইল তৈরি করতে ব্যবহার করি /forcefsck। ফাইলটি নিজেই কিছু ধারণ করার প্রয়োজন নেই, এটি কেবল উপস্থিত থাকা দরকার। ছাড়া touch, আমার একটি ফাঁকা ফাইল ব্যবহার viবা nanoসংরক্ষণ করতে হবে। ব্যবহার করতে অনেক দ্রুত touch
টিম

@ টিম আপনি ব্যবহার করতে পারবেন না এমন কোনও আসল কারণ নেই >/forcefsckবা printf '' >>/forcefsck(পরবর্তী কোনও বিদ্যমান সামগ্রী সংরক্ষণ করবে)। আপনি যা বর্ণনা করেছেন তা কোনও ইউটিলিটি ব্যবহার করার একটি উপায় যা একটি নির্দিষ্ট উপায়ে কাজ করে, তবে কেন সেভাবে কাজ করার জন্য এটি রচিত হয়েছে তা নিয়ে এর কোন আসল ধারণা নেই।
একটি সিভিএন

যদি এই প্রশ্নটি এটি touchকীভাবে কাজ touchকরে তার পরিবর্তে ডিজাইনের বিষয়ে হয় তবে আমি মনে করি যে ফাইল তৈরির পার্শ্ব প্রতিক্রিয়াটি সহ একক দায়িত্বের নীতি লঙ্ঘন করে। সুতরাং, "কেন" কেবলমাত্র প্রাথমিক নকশার পছন্দগুলির কারণে যা জনপ্রিয়তা এবং প্রসার / ব্যবহারের সহজতার কারণে আটকে গিয়েছিল।
জর্জ পান্তাজেস

উত্তর:


15

strace touch tফলন ব্যবহার করে:

open("t", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3

এটি touchকোডে রয়েছে এবং আমি এটিকে চেক বলব না । টাইমস্ট্যাম্পটি আপডেট করার জন্য ফাইলটি লেখার জন্য এবং তারপরে এটি বন্ধ করে দেওয়া হয়।


14

touchফাইলটি উপস্থিত না থাকলে একটি নতুন, খালি ফাইল তৈরি করে কারণ এটি করার জন্য ডিজাইন করা হয়েছিল। ইউটিলিটিটিতে বিশেষভাবে কেসটি পরিচালনা করতে কোড থাকতে হবে। ইউনিক্স ভি 7 এ ইউটিলিটি উপস্থিত হয়েছিল ; এর ম্যানুয়ালটিতে এটি বর্ণনা করা হয়েছে:

টাচ - আপডেটের তারিখ কোনও ফাইলের সর্বশেষ পরিবর্তিত

touchপ্রতিটি ফাইলের পরিবর্তিত তারিখ সেট করার চেষ্টা করে । এটি ফাইল থেকে একটি অক্ষর পড়ে এবং এটি আবার লিখে দিয়ে করা হয়। যদি ** ফাইল * উপস্থিত না থাকে তবে -cঅপশনটি নির্দিষ্ট না করা পর্যন্ত এটি তৈরির চেষ্টা করা হবে ।

( touchফাইলটি খালি থাকলে আমি কী করতাম জানি না The অন্তর্নিহিত সিস্টেম কলটি পরে এলো।)

touchফাইলটি বিদ্যমান করার জন্য কেন ডিজাইন করা হয়েছিল তা আমি নিশ্চিতভাবে জানি না তবে আমার সন্দেহ হয় এটির কারণেই এটি make। আপনি কেন বর্তমান সময়ের জন্য কোনও ফাইলের পরিবর্তনের সময় সেট করতে চান? এমন কিছু ক্ষেত্রে রয়েছে যা নির্দিষ্ট সময়ের জন্য পরিবর্তনের সময় সেট করা কার্যকর হতে পারে তবে সেই ক্ষমতাটি পরে এসেছিল, আসলটি touchকেবল পরিবর্তনের সময়টিকে বর্তমান সময়ের জন্য সেট করতে পারে। এটি করার একটি কারণ makeফাইলের উপর নির্ভর করে এমন কোনও নিয়ম পুনরায় চালানো ।

অর্থাৎ আপনি একটি ফাইল আছে অনুমান করা foo, এবং একটি Makefile যে কমান্ড জেনারেট করতে ঘোষণা barথেকে foo। আপনি যখন টাইপ করেন make bar, কমান্ডটি কার্যকর হয় এবং barতৈরি হয়। যদি barবিদ্যমান এবং তুলনায় নতুন হয় foo, make barকিছুই না, কারণ makeধরে নেয় যে barইতিমধ্যে তৈরি করা হয়েছে। যাইহোক, যদি barএটির চেয়ে বেশি বয়স্ক হন foo, মনে করুন যে barএটি আপ টু ডেট নয় এবং পুনরায় জন্মানো দরকার।

তবে কী তৈরি করার নিয়ম barবদলে গেছে? তারপরে আপনার দুটি বিকল্প রয়েছে:

  • rm bar; make bar
  • touch foo; make bar

fooজেনারেট করার জন্য আপনাকে উপস্থিত থাকতে হবে bar, অন্যথায় কমান্ডটি সাধারণত কাজ করে না।

"স্পর্শ" পরিভাষাটি makeইউটিলিটিতে উপস্থিত ছিল : make -t barকেবলমাত্র কমান্ডগুলি চালনার ভান করবে, এটি হ'ল barউত্পন্ন কমান্ড না চালিয়ে বর্তমান সময়ের পরিবর্তনের সময় নির্ধারণ করবে bar(আপনি যদি ভাবতেন যে আপনি এটি করতেন পরিবর্তনগুলি fooপ্রভাবিত করা উচিত নয় bar)। touchউপযোগ তাই এর একটি স্বতন্ত্র সংস্করণ ছিল make -tবৈশিষ্ট্য।

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