ফাইল তৈরির তারিখটি কীভাবে সন্ধান করবেন?


104

আমি নির্দিষ্ট ফাইল তৈরির তারিখটি জানতে চাই, পরিবর্তনের তারিখ বা অ্যাক্সেসের তারিখ নয়।

আমি চেষ্টা করেছি ls -ltrhএবং stat filename


5
লিনাক্স তৈরির সময় ট্র্যাক রাখে না যেহেতু এটি পসিক্সের দ্বারা প্রয়োজনীয় নয়। যাইহোক, Mac OS X এর HFS ফাইলসিস্টেম কিছু করে - অধীনে "জন্ম সময়" সন্ধান stat(1)
200_সূচী

2
ফেডোরা 19 এক্সট 4 ফাইল সিস্টেমগুলি ফাইল তৈরির সময় সেট করে। আমি নিশ্চিত যে আরও অনেক উদাহরণ রয়েছে। নীচের উত্তরগুলি দেখুন যা stapতৈরির সময় পুনরুদ্ধার করতে ব্যবহার করে।
rickhg12hs

উত্তর:


88

পসিক্স স্ট্যান্ডার্ডটি প্রতিটি ফাইলের জন্য সংরক্ষণ করার জন্য কেবল তিনটি স্বতন্ত্র টাইমস্ট্যাম্পগুলি সংজ্ঞায়িত করে : শেষ ডেটা অ্যাক্সেসের সময়, শেষ ডেটা সংশোধন করার সময় এবং ফাইলের স্থিতি সর্বশেষ পরিবর্তনের সময়।

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

ক্রেগ স্যান্ডার্স এবং মহসেন পাহলেভানজাদেহ যেহেতু উল্লেখ করেছেন, ফাইলের জন্মের সময়টি প্রদর্শন করার জন্য (যথাক্রমে মানব পাঠযোগ্য বিন্যাসে এবং কয়েক সেকেন্ডে যথাক্রমে) ফাইলের জন্মের সময় প্রদর্শন করার জন্য এবং বিন্যাস নির্দিষ্টকরণগুলিকে statসমর্থন করে । তবে, গনুলিব (ইন ) দ্বারা প্রদত্ত মাধ্যমে জন্মের সময়টি নিজেই অ্যাক্সেস করে , যা সিস্টেম কল দ্বারা ফিরে আসা কাঠামোর ক্ষেত্রগুলি এবং ক্ষেত্রগুলি থেকে জন্মের সময় পায় । উদাহরণস্বরূপ, বিএসডি সিস্টেমগুলি (এবং এক্সটেনশনে ওএস এক্স) এর মাধ্যমে সরবরাহ করে , লিনাক্স দেয় না। এই কারণেই লিনাক্সে আউটপুটগুলি (কোনও অজানা সৃষ্টির সময় নির্দেশ করে) এমনকী এমন ফাইল সিস্টেমগুলির জন্য যা সৃষ্টির সময়টি অভ্যন্তরীণভাবে সংরক্ষণ করে।%w%Wstatget_stat_birthtime()lib/stat-time.hst_birthtimest_birthtimensecstatstat()st_birthtimestatstat -c '%w' file-

স্টিফেন চেজেলাস যেমন উল্লেখ করেছেন , কিছু ফাইল সিস্টেম যেমন এনটিএফএস -3 জি প্রসারিত ফাইল বৈশিষ্ট্যের মাধ্যমে ফাইল তৈরির সময় প্রকাশ করে।


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

@ স্টাফেনচাজেলাস আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ। আরও বিশদ সরবরাহ করার জন্য উত্তর আপডেট করেছেন।
থমাস নাইম্যান

আপনি stapনিজের কার্নেল এপিআই তৈরি করতে ব্যবহার করতে পারেন । উত্তরের উদাহরণ দেখুন।
rickhg12hs

26

TLDR; আপনার নিজস্ব কার্নেল এপিআই তৈরি করতে stap( "সিস্টেমট্যাপ" ) ব্যবহার করুন । নীচে ext4 তৈরির সময় নিষ্কাশন এর ডেমো।

আপনি ফেডোরা 19 সিস্টেমে ext4 তৈরির সময় বের করতে পারেন। এখানে আমার:

$ uname -a
Linux steelers.net 3.11.1-200.fc19.i686.PAE #1 SMP Sat Sep 14 15:20:42 UTC 2013 i686 i686 i386 GNU/Linux

এটি স্পষ্ট যে আমার এক্সট 4 পার্টিশনের ইনোডগুলির তৈরির সময় রয়েছে। এখানে একটি শেল স্ক্রিপ্ট যা কোনও ফাইলের সাথে সম্পর্কিত ইনোড নির্ধারণ করে এবং তারপরে ("সিস্টেমট্যাপ") statব্যবহার করে আউটপুটকে তৈরির সময় stapবাড়িয়ে তোলে।

এনবি: এটি কেবল একটি ডেমো এবং অত্যন্ত কার্যকরভাবে যেহেতু প্রতিটি সম্পাদনের জন্য কার্নেল মডিউল তৈরি করা, লোড করা এবং আনলোড করা হয়। কোনও ত্রুটি পরীক্ষা করার সময় এটি সম্ভবত খুব নাজুক। একটি সঠিক কার্নেল এপিআই পছন্দনীয় হবে তবে এই স্ক্রিপ্টটি আরও কার্যকর করা যায় এবং একাধিক ফাইল / ইনোড তৈরির সময় পড়তে পারে।

[stap_stat.sh এর বিষয়বস্তু]

#/bin/sh

my_inode_str=$(stat --printf="%i" $1)

stap - << end_of_stap_script
global my_offsetof
probe begin {
  system("stat $1");
  my_offsetof = &@cast(0,"struct ext4_inode_info")->vfs_inode;
}
probe kernel.function("ext4_getattr@fs/ext4/inode.c") {
  probe_inode=\$dentry->d_inode;
  if (@cast(probe_inode, "struct inode")->i_ino == $my_inode_str) {
    my_i_crtime = &@cast(probe_inode - my_offsetof,"struct ext4_inode_info")->i_crtime;
    printf("CrTime: %s GMT\n", ctime(@cast(my_i_crtime, "timespec")->tv_sec));
    printf("CrTime (nsecs): %d\n", @cast(my_i_crtime, "timespec")->tv_nsec);
    exit();
  }
}
end_of_stap_script

এখানে একটি ডেমো রয়েছে:

$ ll testfile
ls: cannot access testfile: No such file or directory
$ touch testfile
$ ./stap_stat.sh testfile
  File: ‘testfile’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d    Inode: 4850501     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    Rick)   Gid: ( 1001/    Rick)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2013-09-28 06:17:04.221441084 -0400
Modify: 2013-09-28 06:17:04.221441084 -0400
Change: 2013-09-28 06:17:04.221441084 -0400
 Birth: -
CrTime: Sat Sep 28 10:17:04 2013 GMT
CrTime (nsecs): 220441085
$ ll testfile
-rw-rw-r--. 1 Rick Rick 0 Sep 28 06:17 testfile
$ cat - >> testfile 
Now is the time ...
$ ll testfile 
-rw-rw-r--. 1 Rick Rick 20 Sep 28 06:18 testfile
$ ./stap_stat.sh testfile
  File: ‘testfile’
Device: fd02h/64770d    Inode: 4850501     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    Rick)   Gid: ( 1001/    Rick)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2013-09-28 06:17:04.221441084 -0400
Modify: 2013-09-28 06:18:33.684374740 -0400
Change: 2013-09-28 06:18:33.684374740 -0400
 Birth: -
CrTime: Sat Sep 28 10:17:04 2013 GMT
CrTime (nsecs): 220441085
$ cat testfile 
Now is the time ...
$ ./stap_stat.sh testfile
  File: ‘testfile’
  Size: 20          Blocks: 8          IO Block: 4096   regular file
Device: fd02h/64770d    Inode: 4850501     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    Rick)   Gid: ( 1001/    Rick)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2013-09-28 06:19:12.199349463 -0400
Modify: 2013-09-28 06:18:33.684374740 -0400
Change: 2013-09-28 06:18:33.684374740 -0400
 Birth: -
CrTime: Sat Sep 28 10:17:04 2013 GMT
CrTime (nsecs): 220441085
$ mv testfile testfile2
$ ./stap_stat.sh testfile2 
  File: ‘testfile2’
  Size: 20          Blocks: 8          IO Block: 4096   regular file
Device: fd02h/64770d    Inode: 4850501     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    Rick)   Gid: ( 1001/    Rick)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2013-09-28 06:19:12.199349463 -0400
Modify: 2013-09-28 06:18:33.684374740 -0400
Change: 2013-09-28 06:20:45.870295668 -0400
 Birth: -
CrTime: Sat Sep 28 10:17:04 2013 GMT
CrTime (nsecs): 220441085
$ 

4
ঠিক আছে, এটি দুর্দান্ত। স্ট্যাপ ব্যবহারের জন্য +1, লিনাক্স কার্নেলটি বন্ধুর বানানো দুর্দান্ত।
ক্রিস ম্যাগনসন

@ ক্রিসম্যাগনুসন: কার্নেলটি প্যাঁচানো বাঁদর ছাড়া debugfs + statপেতে অনুমতি দিন crtime
jfs

17

ইন ext4এটা সম্ভব নয়; কারণ ext4ফাইল-সিস্টেম ফাইল তৈরির সময় সঞ্চয় করে। তবে তবুও, আপনি দেখতে পাবেন যে statকমান্ডটি তারিখটি প্রদর্শন করতে অক্ষম, কারণ আমি মনে করি কার্নেলের কাছে এর জন্য কোনও এপিআই নেই।

যাইহোক, ফাইলের জন্মের সময়টি সংরক্ষণ করা হয় ext4এবং আপনি এটি কোনও সরাসরি পদ্ধতি দ্বারা নয়, তবে ব্যবহার করে খুঁজে পেতে পারেনdebugfs

sudo debugfs -R "stat / ABSOLUTE / PATH" / dev / sdxX | গ্রেপ ক্রাইটটাইম


1
বাশ ফাংশন হিসাবে:xstat filename
jfs

1
যদি /dev/sdxXমাউন্ট করা থাকে /some/pathএবং ফাইলটি হয় /some/path/some/fileতবে নির্দিষ্ট করা some/fileপথটি কেবলমাত্র : এর পাথটি অবশ্যই ফাইল-সিস্টেমের মূলকে নয়, তবে মাউন্টপয়েন্টে উল্লেখ করা উচিত। অন্যথায়, ফাইলটি পাওয়া যাবে না।
বোপার্ক

15

তত্ত্ব অনুসারে, জিএনইউ স্ট্যাটাসের সাহায্যে আপনি কোনও ফাইল তৈরির তারিখ (ওরফে জন্মের সময়) পেতে stat -c '%w'বা ব্যবহার করতে পারেন %W

অনুশীলনে, বেশিরভাগ ফাইল সিস্টেমগুলি সেই তথ্য রেকর্ড করে না এবং লিনাক্স কার্নেল এটি অ্যাক্সেসের কোনও উপায় সরবরাহ করে না।

নিকটস্থ আপনি পেতে পারেন ফাইলের ctime, যা হয় না সৃষ্টি সময়, এটা সময় যে ফাইল মেটাডাটা গত পরিবর্তিত হয়।

কয়েক বছর আগে লিনাক্স উইকলি নিউজের একটি আকর্ষণীয় নিবন্ধ ছিল - http://lwn.net/Articles/397442/


7
stat --printf='%w' yourfile   #human readable

stat --printf='%W' yourfile   #seconds from Epoch , 0 if unknown

মধ্যে পার্থক্য FreeBSDএবং GNU\Linuxউপর stat command:

আপনি যদি এতে statকমান্ড কল করেন GNU\Linuxতবে -x বিকল্পটি চাওয়া হয় , তবে ফ্রিবিএসডি-তে, আপনাকে নিজেরাই -xবিকল্পটি চাওয়া উচিত ।

আরও দেখুন লিনাক্সের কোন ফাইল সিস্টেমগুলি তৈরির সময় সংরক্ষণ করে?

দ্রষ্টব্য: এতে --printf খুব দরকারী scripting....!


//, এটি একটি সিএনটিওএস 6 মেশিনে চেষ্টা করে দেখেছি এবং আমার কাছে সমস্তই প্রশ্ন চিহ্ন ছিল: $ স্ট্যাট - প্রিন্টফ = '% ডব্লু' ~ / ডাম্প.আরডিবি? হতে পারে আমার ফাইল সিস্টেম% ডাব্লু সহ স্ট্যাট সমর্থন করে না।
নাথান বাসানিজ

দুর্ভাগ্যক্রমে, এইচএফএস সিটিটাইম সমর্থন করে না।
ফার্সিগাল্ফ

5

OS X এর মধ্যে আপনি ব্যবহার করতে পারেন ls -lU, stat -f%B, GetFileInfo -d, অথবা mdls -n kMDItemFSCreationDate:

$ ls -lU
total 0
-rw-r--r--  1 lauri  staff  0 Apr 25 03:58 a
$ stat -f%B a
1398387538
$ stat -f%SB -t %Y%m%d%H%M a
201404250358
$ GetFileInfo -d a
04/25/2014 03:58:58
$ mdls -n kMDItemFSCreationDate a
kMDItemFSCreationDate = 2014-04-25 00:58:58 +0000

2

এটা দেখ:

# the last arg is the device to scan in.
debugfs -R 'stat /home/renich/somefile' /dev/sda1

বিটিডাব্লু, এটি কেবল এক্সট্রা 4 এ কাজ করে। আমি এখনও বিটিআরএসএফ ... এর সমাধান খুঁজে পাইনি;)


1
এটা কি খুব ভাল আর কি উত্তরসূচক উত্তর বলে ... তাই না?
don_crissti

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