কোনও ফাইল সংশোধন করা হয়েছে কিনা তা নির্ধারণ করুন


10

লিনাক্সে (বর্তমানে ext4 ফাইল সিস্টেম ব্যবহার করছে), কোনও ফাইলের বিষয়বস্তু না পড়েই কোনও ফাইলের বিষয়বস্তু সংশোধন করা হয়েছে তা কীভাবে দ্রুত পরীক্ষা করা যায় ?

statআদেশ কি একটি প্রস্তাবিত পদ্ধতির? আমি বর্তমানে করছি

$ stat --format "%Y" hello.txt

এবং পরে আমি একই কমান্ড একই আউটপুট উত্পাদন করে কিনা তা পরীক্ষা করতে পারি। যদি এটি হয় তবে আমি উপসংহারে পৌঁছেছি যে হ্যালো ডটেক্সট পরিবর্তন হয়নি।

আমার অনুভূতি হ'ল আরও নিশ্চিত হওয়ার জন্য যে কেউ আরও বেশি পরামিতি ফেলে দিতে চায়। উদাহরণস্বরূপ, ফাইলের আকার, ফাইলের নাম ইত্যাদি যুক্ত করা কি ফাইলের আরও ভাল "ফিঙ্গারপ্রিন্ট" সরবরাহ করবে?

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


md5sum filename?
রমেশ

md5sumবা কোনও ধরণের চেকসাম ফাইলের বিষয়বস্তু পড়ে। আমি এটি করতে চাই না কারণ এটি আমার উদ্দেশ্যগুলির পক্ষে খুব ধীর।
ডাস্টবাইট

ls -tপরিবর্তন সময় দ্বারা ডিরেক্টরিতে বিষয়বস্তু বাছাই করা হবে।
রাইকায়ো

"পরিবর্তিত হয়ে"? প্রতিটি ফাইলই সংশোধন করা হয়েছে, প্রশ্নটি কখন এটি সংশোধন করা হয়েছিল is আপনি নির্দিষ্ট সময়ের পরিবর্তনের সময় অনুসন্ধান করতে 'সন্ধান করুন' ব্যবহার করতে পারেন।
রে অ্যান্ড্রুজ

উত্তর:


5

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

পরিবর্তনের সময় touchকমান্ড দ্বারা সেট করা যেতে পারে । আপনি যদি ফাইলটি কোনও উপায়ে ( touchআর্কাইভের ব্যবহার , ব্যবহার ইত্যাদি) পরিবর্তিত হয়েছে কিনা তা সনাক্ত করতে চান তবে শেষ বারের চেকটি থেকে এর ইনোড পরিবর্তনের সময়টি ( সিটিটাইম ) পরিবর্তন হয়েছে কিনা তা পরীক্ষা করে দেখুন। এটাই stat -c %Zজানাচ্ছে। সিস্টেম অ্যাডমিনিস্ট্রেটররা (এবং তারপরেও কেবল পরোক্ষ উপায়ের মাধ্যমে: সিস্টেমের ঘড়িটি পরিবর্তন করে বা সরাসরি ডিস্ক অ্যাক্সেস করে, ফাইল-সিস্টেমকে বাইপাস করে) সিটিএমএম স্পুফ করা যায় না।


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

3

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

এছাড়াও, অন্যান্য প্রোগ্রামগুলির পক্ষে একটি নির্বিচারে পরিবর্তনের সময় সেট করা সম্ভব to টাচ কমান্ডের মাধ্যমে কীভাবে এটি ঘটতে পারে তা আপনি দেখতে পাবেন।

আপনি যদি এই দুটি সম্ভাবনার যে কোনও একটি সম্পর্কে উদ্বিগ্ন হন তবে ফাইলের আকারটিও দেখার জন্য এটি খারাপ ধারণা হবে না। এটি পরিবর্তিত ফাইলগুলির সন্ধান করার সময় আরএসসিএনসি এটি করে।


1

আমার অনুভূতি হ'ল আরও নিশ্চিত হওয়ার জন্য যে কেউ আরও বেশি পরামিতি ফেলে দিতে চায়।

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

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


0

আমি আঙুলের ছাপ আরও বিশদ তৈরি করি।

আমি একটি সামান্য মোড়ক ফাংশন করেছি যা MacOS / BSD এবং GNU সংস্করণের উভয়ের জন্য অভিন্ন আউটপুট উত্পন্ন statকরে (এছাড়াও একটি gউপসর্গের সাথে Homebrew- ইনস্টল করা সংস্করণটি সনাক্ত করে )।

init() {
  if command -v gstat > /dev/null; then
    # GNU coreutils with g prefix.
    statCmdArgs=("gstat" "--format=%n %s %b %u %g %i %h %Y %Z %W %o");
  elif ! stat --version > /dev/null 2> /dev/null; then
    # MacOS/BSD stat
    statCmdArgs=("stat" "-f" "%N %z %b %u %g %i %l %m %c %B %k");
  else
    # Assume GNU version without prefix.
    statCmdArgs=("stat" "--format=%n %s %b %u %g %i %h %Y %Z %W %o");
  fi;
}

getFileStatus() {
  "${statCmdArgs[@]}" "$1";
}

initফাংশন একবার স্ক্রিপ্ট আরম্ভের সময় নামক পরার এবং getFileStatusসনাক্তকরণ ওভারহেড ছাড়া বারবার বলা যায় না।

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