এলএস এর মতো সিস্টেম কমান্ড কীভাবে তৈরি করা হয়?


19

* নিক্স সম্পর্কে আমার কিছু সন্দেহ আছে।

  • আমি জানি না কোন প্রকারের এক্সিকিউটেবল ফাইল ls, তা কিনা .sh বা .ksh বা অন্য কোনও ধরণের সিস্টেম যদি কার্যকর হয় তবে তা কী?

  • lsকমান্ডের উত্স কোডটি দেখতে কেমন তা দেখার চেষ্টা করেছি , এটি অপঠনযোগ্য কিছু দেখায়, এই জাতীয় অপঠনযোগ্য ফাইল তৈরি করতে * নিক্স কোন পদ্ধতি ব্যবহার করে এবং আমি আমার ফাইলগুলিকে এই ফাইলগুলির মতো করতে পারি (যেমন ls- অপঠনযোগ্য)?



4
আমি মনে করি এটি ডুপ করার চেয়ে উপরে URL এর সাথে আরও সম্পর্কিত।
slm

উত্তর:


31

fileকমান্ড এবং কমান্ডটি ব্যবহার করে আপনি ইউনিক্সে এক্সিকিউটেবলের প্রকৃতি নির্ধারণ করতে পারেন type

আদর্শ

আপনি typeডিস্কে কোনও এক্সিকিউটেবলের অবস্থান নির্ধারণ করতে ব্যবহার করেন :

$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls

সুতরাং আমি এখন জানি যে lsএটি আমার সিস্টেমে 2 টি স্থানে রয়েছে: /usr/bin/ls& /bin/ls। এই এক্সিকিউটেবলের দিকে তাকিয়ে আমি দেখতে পাচ্ছি যে তারা অভিন্ন:

$ ls -l /usr/bin/ls /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /usr/bin/ls

দ্রষ্টব্য: আপনি নিশ্চিত করতে পারেন যে তারা ব্যবহার করে cmpবা তাদের আকারের বাইরে অভিন্ন diff

বিভিন্ন সঙ্গে
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
সিএমপি সহ
$ cmp /usr/bin/ls /bin/ls
$ 

ফাইল ব্যবহার করা হচ্ছে

যদি আমি fileকমান্ডটি ব্যবহার করে তাদের জিজ্ঞাসা করি :

$ file /usr/bin/ls /bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped
/bin/ls:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped

সুতরাং এগুলি হবে আসল শারীরিক প্রোগ্রাম যা সি / সি ++ থেকে সংকলিত হয়েছে। যদি সেগুলি শেল স্ক্রিপ্ট হত তবে তারা সাধারণত এখানে এটি উপস্থাপন করত file:

$ file somescript.bash 
somescript.bash: POSIX shell script, ASCII text executable

ইএলএফ কী?

ইএলএফ একটি ফাইল ফর্ম্যাট , এটি একটি সংকলকের যেমন আউটপুট gcc, যা সি / সি ++ প্রোগ্রামগুলি সংকলন করতে ব্যবহৃত হয় ls

কম্পিউটিংয়ে এক্সিকিউটেবল এবং লিংকযোগ্য ফর্ম্যাট (ইএলএফ, আগে এক্সটেনসিবল লিঙ্কিং ফর্ম্যাট নামে পরিচিত) এক্সিকিউটেবল, অবজেক্ট কোড, শেয়ার্ড লাইব্রেরি এবং কোর ডাম্পগুলির জন্য একটি সাধারণ স্ট্যান্ডার্ড ফাইল ফর্ম্যাট।

এটির জন্য সাধারণত ফাইলের নামগুলির মধ্যে একটি এক্সটেনশান থাকে: কোনও কিছুই, .o, .so,। Bel, .prx, .puff, .bin


@ লার্জার্জ - বনাম বনাম টাইপ ব্যবহারের টিপসের জন্য এই প্রশ্নোত্তরটি দেখুন: যা unix.stackexchange.com/questions/85249/…typeআপনি যেখানেই ব্যবহার করতে প্ররোচিত হন whichবা যে কোনও জায়গায় ব্যবহার করা সাধারণত সেরা whereis
slm

3
অতিরিক্তভাবে, জিএনইউ সরঞ্জামগুলির জন্য, সোর্স কোডটি অবাধে উপলভ্য, আপনার অনুসন্ধানটি gnu.org/software
glenn jackman

অভিন্ন পরীক্ষার জন্য, আপনি কি সত্যিই ভালো কিছু ব্যবহার করা উচিত md5sumবা sha1sumশুধু ফাইলের মাপ এবং বার চেক না।
বব

@ Bob - এই ফাইলগুলি অভিন্ন হওয়ার সাথে Q এর কোনও সম্পর্ক ছিল না তাই আমি একটি সহজ পদ্ধতি দেখিয়েছি। ফাইলগুলি তুলনা করতে আমি সিএমপি এর মতো আরও উপযুক্ত সরঞ্জাম ব্যবহার করতাম যা বাইনারি ফাইলগুলির তুলনা করার জন্য বোঝানো হয়। এছাড়াও তারা কী প্যাকেজ সরবরাহ করেছে তা সন্ধান করা যদি তারা সম্পর্কিত হয় কি না তা নির্দেশ করে। তারা উভয়েরই অংশ coreutils-8.21-13.fc19.x86_64এবং আমি কেবল জানি যে তারা রেড হ্যাট রিলিজের সাথে ডিল করার 20 বছর থেকে অভিন্ন।
slm

@ Bob - ফাইলগুলির তুলনা করার জন্য উদাহরণগুলির জন্য আপডেটগুলি দেখুন।
slm

9

এটি একটি বাইনারি এক্সিকিউটেবল (বেশিরভাগ সিস্টেমের মতো মেশিন কোডে সংকলিত)। শেল স্ক্রিপ্টগুলি দ্রুত এবং নমনীয়ভাবে বিদ্যমান জিনিসগুলি থেকে সমাধান তৈরি করতে একসাথে অংশগুলিতে যোগ দিতে "আঠালো" এর মতো আরও বেশি। এটি * নিক্সের শক্তি।

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

এখানে ls.c ফাইল, যদি এটা সাহায্য করে: http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c


ওহ এবং বাইনারি অ্যাপ্লিকেশনগুলি কীভাবে তৈরি করবেন সেই প্রশ্নটি স্পষ্ট করে তুলতে: অসংখ্য প্রোগ্রামিং ভাষার মধ্যে বেছে নিন (দম্পতি বাদ দেওয়া বা অর্ধ-ব্যাখ্যা করা যেমন পাইথন, জাভা, জাভাস্ক্রিপ্ট, ... যা traditionতিহ্যগতভাবে স্ট্যান্ডেলোন এক্সিকিউটেবল উত্পাদন করে না বাইনারি ফাইল). তারপরে সেই ভাষাটি ব্যবহার করতে শিখুন এবং কীভাবে এটি সংকলন করবেন।
প্রাচ্য
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.