/ Proc / * কীভাবে কাজ করে?


62

অনেক ফাইল নেই /proc, মত /proc/cpuinfo, /proc/meminfo, /proc/devicesইত্যাদি, যা, যখন খোলা রিটার্ন সিস্টেম তথ্য।

এই ফাইলগুলির বাস্তবে কোনও অস্তিত্ব আছে বলে মনে হয় না, কারণ fileএগুলি চালানো কেবলমাত্র সেগুলি খালি রয়েছে বলে জানায়।

$ file /proc/cpuinfo
/proc/cpuinfo: empty

এই ফাইলগুলি ঠিক কীভাবে কাজ করবে?

উত্তর:


72

এটি আসলে বেশ সহজ, কমপক্ষে যদি আপনার প্রয়োগের বিশদ প্রয়োজন না হয়।

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

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

যাইহোক, এটি অনুরোধগুলি বিশেষত শারীরিক, ধ্রুবক স্টোরেজে অনুবাদ করতে হবে না । কার্নেলের চুক্তিটি হল যে সিস্টেম কলগুলির নির্দিষ্ট সেটটি জারি করা প্রশ্নযুক্ত ফাইলের বিষয়বস্তু সরবরাহ করবে । আমাদের শারীরিক রাজ্যে ঠিক যেখানে "ফাইল" বিদ্যমান তা এটিকে গৌণ।

উপর /procসাধারণত মাউন্ট কি নামে পরিচিত হয় procfs। এটি একটি বিশেষ ফাইল সিস্টেমের ধরণ, তবে যেহেতু এটি একটি ফাইল সিস্টেম, তাই এটি ext3কোথাও মাউন্ট করা কোনও ফাইল সিস্টেমের চেয়ে সত্যই আলাদা নয় । অনুরোধটি প্রোকফস ফাইল সিস্টেম ড্রাইভার কোডে পৌঁছে যায়, যা এই সমস্ত ফাইল এবং ডিরেক্টরি সম্পর্কে জানে এবং কার্নেলের ডেটা স্ট্রাকচার থেকে নির্দিষ্ট টুকরো তথ্য সরবরাহ করে

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

আপনি কোনও ফাইলে একটি মান লিখলে এটি একইভাবে কাজ করে; কার্নেল পর্যায়ে, যে একটি সিরিজ অনুবাদ open(), seek(), write(), close()কল যা আবার ফাইল সিস্টেম ড্রাইভার প্রেরণ করুন; আবার, এই বিশেষ ক্ষেত্রে, procfs কোড।

আপনি fileপ্রত্যাবর্তন দেখতে পাওয়ার বিশেষ কারণটি emptyহ'ল প্রোফফ দ্বারা প্রকাশিত অনেকগুলি ফাইল 0 বাইট আকারের সাথে প্রকাশিত হয় 0 বাইট আকারটি সম্ভবত কার্নেল পাশের একটি অপ্টিমাইজেশন হতে পারে (/ proc এ থাকা অনেকগুলি ফাইল গতিশীল এবং সহজেই দৈর্ঘ্যে পরিবর্তিত হতে পারে, সম্ভবত এক থেকে পরবর্তী অংশেও পড়তে পারে এবং প্রতিটি ডিরেক্টরিতে প্রতিটি ফাইলের দৈর্ঘ্য গণনা করা হবে) সম্ভাব্যভাবে খুব ব্যয়বহুল)। এই উত্তরের মন্তব্যে গিয়ে, যা আপনি নিজের সিস্টেমে স্ট্রেস বা অনুরূপ সরঞ্জাম ব্যবহার করে যাচাই করতে পারেন, fileপ্রথমে stat()কোনও বিশেষ ফাইল সনাক্ত করার জন্য একটি কল দেয় এবং তারপরে যদি ফাইলের আকার 0 হিসাবে রিপোর্ট করা হয় তবে সুযোগটি গ্রহণ করে , বাতিল এবং ফাইলটি খালি বলে প্রতিবেদন করুন।

এই আচরণ আসলে নথিভুক্ত করা যেতে পারে নির্দিষ্ট করে ওভাররাইড -sবা --special-filesউপর file, আবাহন যদিও যেমন ম্যানুয়েল পৃষ্ঠা পার্শ্ব প্রতিক্রিয়া থাকতে পারে বিবৃত। নীচের উদ্ধৃতিটি বিএসডি ফাইল 5.11 ম্যান পৃষ্ঠা থেকে, অক্টোবর 17 2011 তারিখে করা হয়েছে।

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


5
আপনি যখন এটির সাথে strace file /proc/versionবা এটি দেখেন তখন ltrace -S /proc/versionঅপটিমাইজেশনটি ছোট হয়। এটি stat()প্রথমে একটি কল করে এবং আকারটি 0 টি দেখতে পেয়ে যায়, এভাবে এড়িয়ে চলে open()- তবে এর আগে এটি বেশ কয়েকটি ম্যাজিক ফাইল লোড করছে।
অট--

2
@ অট-- এটি ঘটনাগুলির একটি বিজোড় অনুক্রম, তবে এটির সাথে সম্পর্কিত হতে পারে আপনি একাধিক ফাইলের নাম পাস করতে পারেন file। এইভাবে ফাইলটি যাদু ফাইলগুলি প্রাক লোড করে, তারপরে পরামিতি দ্বারা কমান্ড লাইন প্যারামিটারটি প্রসেস করে; কোডের অংশ যা এই নির্দিষ্ট ফাইলটি কী ধরণের তা নির্ধারণ করার আগে "ম্যাজিক ফাইল লোডিংয়ের পরিবর্তে" এটি করার পরিবর্তে জটিলতা বাড়বে। কল করা stat()এবং তার ফেরতের মূল্যের উপরে অভিনয় করা মূলত নিরীহ; অতিরিক্ত অভ্যন্তরীণ রাষ্ট্রের ঝুঁকির ত্রুটিগুলি সনাক্ত করতে জটিলতা যুক্ত করা gs
একটি সিভিএন

@ অট - আসলে, file"ফাইলটি খালি রয়েছে" বলে প্রতিবেদন করার কারণ হ'ল এটি statবিশেষ ফাইল (নামযুক্ত পাইপ, ডিভাইস,…) সনাক্ত করতে আহ্বান জানিয়েছে এবং খালি ফাইলগুলি প্রক্রিয়াজাতকরণ বন্ধ করতে এই সুযোগটি লাগে। file -s /proc/version"ASCII পাঠ্য" প্রতিবেদন করে।
গিলস

4
@ গিলিস দ্য -sব্লক / চরের বিশেষ ডিভাইসগুলির জন্য অনুমিত। অবশেষে আমি fileউত্সটির দিকে তাকালাম , এবং fsmagic.c এর শেষে আমি এই ব্যাখ্যাটি দেখেছি কেন এটি ASCII textপরিবর্তে ফিরে আসে empty:If stat() tells us the file has zero length, report here that the file is empty, so we can skip all the work of opening and reading the file. But if the -s option has been given, we skip this optimization, since on some systems, stat() reports zero size for raw disk partitions.
----

15

এই ডিরেক্টরিতে, আপনি কার্নেল কীভাবে ডিভাইসগুলি দেখেন, কার্নেল সেটিংস সামঞ্জস্য করতে, কার্নেলের সাথে ডিভাইসগুলি যুক্ত করতে পারেন এবং সেগুলি আবার মুছে ফেলতে পারেন তা নিয়ন্ত্রণ করতে পারেন। এই ডিরেক্টরিতে আপনি সরাসরি মেমরির ব্যবহার এবং I / O পরিসংখ্যান দেখতে পারবেন ।

আপনি দেখতে পাবেন কোন ডিস্ক মাউন্ট করা হয় এবং কোন ফাইল সিস্টেম ব্যবহৃত হয়। সংক্ষেপে, আপনার লিনাক্স সিস্টেমের প্রতিটি একক দিকটি এই ডিরেক্টরি থেকে পরীক্ষা করা যেতে পারে, যদি আপনি কী সন্ধান করতে চান তবে।

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

যেহেতু /procফাইল সিস্টেমটি ভার্চুয়াল ফাইল সিস্টেম এবং মেমরিতে বাস /procকরে, তাই আপনার লিনাক্স মেশিনটি পুনরায় বুট করার সময় একটি নতুন ফাইল সিস্টেম তৈরি হয়।

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

ফাইল সিস্টেমের স্তরগুলি

এখানে চিত্র বিবরণ লিখুন

উদাহরণ:

  • অভ্যন্তরে /proc, প্রতিটি চলমান প্রক্রিয়াটির জন্য একটি ডিরেক্টরি রয়েছে, যার প্রসেস আইডি দিয়ে নামকরণ করা হয়েছে। এই ডিরেক্টরিগুলিতে এমন ফাইল রয়েছে যা প্রক্রিয়াগুলি সম্পর্কে দরকারী তথ্য রাখে, যেমন:
    • exe: যা ডিস্কে থাকা ফাইলটির প্রতীকী লিঙ্ক থেকে প্রক্রিয়াটি শুরু হয়েছিল।
    • cwd: যা প্রক্রিয়াটির কার্যকরী ডিরেক্টরিতে প্রতীকী লিঙ্ক।
    • wchan: যা পড়ার পরে অপেক্ষমান চ্যানেলটি প্রক্রিয়া চলছে is
    • maps: যা পড়ার পরে প্রক্রিয়াটির মেমরি মানচিত্রগুলি প্রদান করে।
  • /proc/uptime একটি স্থান দ্বারা পৃথক করে সেকেন্ডে দুটি দশমিক মান হিসাবে আপটাইম দেয়:
    • কার্নেল শুরু হওয়ার পরে সময় পরিমাণ।
    • কার্নেলটি নিষ্ক্রিয় হয়ে গেছে এমন পরিমাণ।
  • /proc/interrupts: বাধা সম্পর্কিত তথ্য জন্য।
  • /proc/modules: মডিউলগুলির একটি তালিকার জন্য।

আরও বিশদ তথ্যের জন্য man proc বা kernel.org দেখুন


"আপনি যদি একটি বুট সিডি থেকে বুট করতে এবং আপনার হার্ড ড্রাইভের ডিরেক্টরিটি দেখতে পান তবে আপনি এটি খালি বলে দেখতে পাবেন" " এটি / প্রোচের সাথে সুনির্দিষ্ট নয়, এটি যে কোনও মাউন্ট পয়েন্টে সাধারণ যেখানে অন্তর্নিহিত ফাইল সিস্টেম মাউন্ট করা হয়নি। যদি আপনি একই বুট সিডি থেকে বুট করেন এবং এর মতো কিছু করেন তবে mount -t procfs procfs /mnt/procআপনি বর্তমানে চলমান কার্নেলের / প্রকোপটি দেখতে পাবেন।
একটি সিভিএন

5

আপনি সঠিক, সেগুলি আসল ফাইল নয়।

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

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

একইভাবে, ফাইলগুলি /devআসলে সনাতন অর্থে ফাইল নয় (যদিও কিছু সিস্টেমে ফাইলগুলি /devপ্রকৃতপক্ষে ডিস্কে থাকতে পারে তবে তারা কোন ডিভাইসটি উল্লেখ করে তাদের সাথে তেমন কিছু তাদের থাকতে পারে না) - তারা আপনাকে কথা বলতে সক্ষম করে ডিভাইসে সাধারণ ইউনিক্স ফাইল আই / ও এপিআই - বা শেলগুলির মতো এটি ব্যবহার করে এমন কিছু ব্যবহার করে


1
এটি * নিক্সের মতো যা কেবল একটি ফাইলই সুরক্ষিত হতে পারে। যেহেতু অ্যাক্সেস নিয়ন্ত্রণের তালিকা ফাইল সিস্টেমে অব্যাহত রয়েছে তাই ফাইল সিস্টেম ড্রাইভার দ্বারা ইতিমধ্যে সরবরাহ করা সাধারণ প্রক্রিয়াটি ব্যবহার করে সুবিধাভোগী সংস্থানগুলি সুরক্ষিত করা সুবিধাজনক। এটি কার্নেল স্ট্রাকচারগুলিতে অ্যাক্সেস করে এমন সরঞ্জামগুলির বাস্তবায়নকে সহজতর করে এবং প্রোক ফাইল সিস্টেম ভার্চুয়াল ফাইলগুলি পড়ার পরিবর্তে উন্নত অনুমতি ব্যতিরেকে চালানোর অনুমতি দেয়।
পেক্কা

3

/procডিরেক্টরিটির অভ্যন্তরে , দুটি ধরণের সামগ্রী রয়েছে, প্রথম নম্বরযুক্ত ডিরেক্টরি এবং দ্বিতীয়টি হ'ল সিস্টেম তথ্য ফাইল।

/procএকটি ভার্চুয়াল ফাইল সিস্টেম। উদাহরণস্বরূপ, যদি আপনি এটি করেন তবে আপনি ls -l /proc/statদেখতে পাবেন যে এর আকার 0 বাইট রয়েছে তবে আপনি যদি "ক্যাট / প্রোক / স্ট্যাট" করেন তবে আপনি ফাইলটির অভ্যন্তরে কিছু সামগ্রী দেখতে পাবেন।

একটি করুন ls -l /proc, এবং আপনি কেবল সংখ্যা সহ প্রচুর ডিরেক্টরি দেখতে পাবেন। এই সংখ্যাগুলি প্রক্রিয়া আইডি (পিআইডি) উপস্থাপন করে। এই নম্বরযুক্ত ডিরেক্টরিতে থাকা ফাইলগুলি সেই নির্দিষ্ট পিআইডি সহ প্রক্রিয়াটির সাথে মিলে যায়।

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

কিছু লিনাক্স কমান্ড এই /procফাইলগুলি থেকে তথ্যটি পড়ে এবং এটি প্রদর্শন করে। উদাহরণস্বরূপ, ফ্রি কমান্ড /proc/meminfoফাইল থেকে মেমরির তথ্য পড়ে , এটি ফর্ম্যাট করে এবং প্রদর্শন করে।

পৃথক /procফাইলগুলি সম্পর্কে আরও জানতে , "ম্যান 5 ফাইল ফাইল" করুন।

/proc/cmdline – Kernel command line
/proc/cpuinfo – Information about the processors.
/proc/devices – List of device drivers configured into the currently running kernel.
/proc/dma – Shows which DMA channels are being used at the moment.
/proc/fb – Frame Buffer devices.
/proc/filesystems – File systems supported by the kernel.
/proc/interrupts – Number of interrupts per IRQ on architecture.
/proc/iomem – This file shows the current map of the system’s memory for its various devices
/proc/ioports – provides a list of currently registered port regions used for input or output communication with a device
/proc/loadavg – Contains load average of the system
The first three columns measure CPU utilization of the last 1, 5, and 10 minute periods.
The fourth column shows the number of currently running processes and the total number of processes.
The last column displays the last process ID used.
/proc/locks – Displays the files currently locked by the kernel
Sample line:
1: POSIX ADVISORY WRITE 14375 08:03:114727 0 EOF
/proc/meminfo – Current utilization of primary memory on the system
/proc/misc – This file lists miscellaneous drivers registered on the miscellaneous major device, which is number 10
/proc/modules – Displays a list of all modules that have been loaded by the system
/proc/mounts – This file provides a quick list of all mounts in use by the system
/proc/partitions – Very detailed information on the various partitions currently available to the system
/proc/pci – Full listing of every PCI device on your system
/proc/stat – Keeps track of a variety of different statistics about the system since it was last restarted
/proc/swap – Measures swap space and its utilization
/proc/uptime – Contains information about uptime of the system
/proc/version – Version of the Linux kernel, gcc, name of the Linux flavor installed.

2
এটি আমার মতো আরও শোনাচ্ছে "কীভাবে / প্রোকে ব্যবহার করা যায়?" বরং "কীভাবে / প্রকল্পটি কাজ করে?" দরকারী তথ্য, তবে অগত্যা এই নির্দিষ্ট প্রশ্নের উত্তর দেওয়া হচ্ছে না ।
একটি সিভিএন

/ প্রোক-এর প্রতিটি ফাইল রানটাইম সম্পর্কিত তথ্য, যার অর্থ আপনি যখন কার্নেলের ক্যাট / প্রোক / মেমিনফো অংশটি একটি ফাংশন পরিচালনা করেন যা ফাইলের সামগ্রী তৈরি করে।
শৈলেশ

3

ন্যূনতম চলমান উদাহরণ

আমার মতে এই বিষয়গুলি বোঝার সর্বোত্তম উপায় হ'ল প্রকৃতপক্ষে তাদের সাথে খেলা করা, সুতরাং এখানে একটি কার্নেল মডিউল যা একটি প্রোফস এন্ট্রি তৈরি করে:

myprocfs.c

#include <linux/debugfs.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h> /* seq_read, seq_lseek, single_open, single_release */
#include <uapi/linux/stat.h> /* S_IRUSR */

static const char *filename = "lkmc_procfs";

static int show(struct seq_file *m, void *v)
{
    seq_printf(m, "abcd\n");
    return 0;
}

static int open(struct inode *inode, struct  file *file)
{
    return single_open(file, show, NULL);
}

static const struct file_operations fops = {
    .llseek = seq_lseek,
    .open = open,
    .owner = THIS_MODULE,
    .read = seq_read,
    .release = single_release,
};

static int myinit(void)
{
    proc_create(filename, 0, NULL, &fops);
    return 0;
}

static void myexit(void)
{
    remove_proc_entry(filename, NULL);
}

module_init(myinit)
module_exit(myexit)
MODULE_LICENSE("GPL");

এবং তারপরে আমরা এর সাথে এটির সাথে যোগাযোগ করি:

insmod procfs.ko
cat /proc/lkmc_procfs

এবং এটি আউটপুট উত্পাদন করে:

abcd

এই উদাহরণে থেকে, আমরা পরিষ্কারভাবে দেখি যে procফাইল আমাদের যেমন নির্বিচারে "ফাইল জড়িত সিস্টেম কল" বাস্তবায়ন করার অনুমতি দেয় open, readএবং llseek

এই সিস্টেম কলগুলি তখন কার্নেলের সাথে নির্বিচারে যোগাযোগের জন্য ব্যবহার করা যেতে পারে।

সুতরাং, ফাইল সিস্টেমে প্রকৃত ফাইলগুলির সাথে এই ফাইলগুলির কিছু করার দরকার নেই এবং এটি প্রায় সকলের ক্ষেত্রেই।

উদাহরণস্বরূপ আমাদের ছোট্ট উদাহরণে আমরা কেবল একটি অকেজো ফাইল তৈরি করি যার জন্য readসর্বদা ফিরে আসে abcd\n

সহজেই এবং নিরাপদে এই কার্নেল মডিউলটি তৈরি করতে এবং খেলতে আমার সম্পূর্ণ স্বয়ংক্রিয় কিউইউ + বিল্ড্রুট সেটআপ রয়েছে:

কিছু অন্যান্য অনুরূপ ইন্টারফেস অন্তর্ভুক্ত:

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