Zsh- এ ফাইলের অনুমতিতে স্ক্রিপ্ট চালানো হচ্ছে


16

আমি যেমন আশা করি তেমন আচরণ না করার জন্য ফাইলের অনুমতিগুলি কার্যকর করার বিষয়ে আমি বিভ্রান্ত হয়ে পড়েছি। সম্ভবত আমার প্রত্যাশা ভুল কারণ। যাই হোক:

আমার কাছে একটি স্ক্রিপ্ট ফাইল রয়েছে, কারণ সরলতার জন্য সবেমাত্র বলা হয় s, এটি অবস্থিত ~/bin। এই উদাহরণের স্বার্থে, ফাইলটিতে কেবল নিম্নলিখিত লাইনগুলি রয়েছে:

#!/bin/zsh
echo "Test";

খুব সহজ.

আমি নেভিগেট ~/binডিরেক্টরি, এবং chmodএর ফাইল অনুমতি sকাছে 400- অর্থাত, শুধুমাত্র পাঠযোগ্য আমাকে জন্য শুধুমাত্র। অনুমতি চালানোর কোনও অনুমতি নেই। সুতরাং আমি স্ক্রিপ্টটির পথে প্রবেশ করে এটি সম্পাদন করে চেষ্টা করব:

% ./s
zsh: permission denied: ./s

এ পর্যন্ত সব ঠিকই. ভুল অনুমতিগুলির কারণে ফাইলটি কার্যকর করা যায় না। বাম্পিং অনুমতিগুলি 500(অনুমোদিত মঞ্জুরি কার্যকর করা) খুব ভাল কাজ করে - এই অনুমতিগুলির সাথে ফাইলটি সূক্ষ্ম সম্পাদন করে:

% ./s
Test

প্রত্যাশার মতোই এটি সব। তবে তারপরে আমি chmodঅনুমতিগুলি ফিরে 400(আবার অনুমতিটি বন্ধ করে দেওয়া) sourceফাইলে প্রবেশের চেষ্টা করি এবং এটি ঘটে:

% source s
Test

অনুমতি থাকলেও 400, স্ক্রিপ্টটি কার্যকর করে।

সুতরাং এখানে আমার প্রশ্ন: কেন ./sব্যর্থ হয় (এটি করা উচিত) তবে source sসাধারণভাবে কার্যকর হয়? এটি কি কার্যকর করার অনুমতিটির পুরো উদ্দেশ্যকে পরাভূত করে না?

400অনুমতি, sh sএবং zsh sএছাড়াও কাজ করি।

আমি নিশ্চিত যে আমি হয় কোথাও মারাত্মক ভুল কিছু করছি বা বুঝতে পারি। যেখানে আমাকে কেউ বিন্দু আউট করতে পারেন, এবং এর মধ্যে পার্থক্য ব্যাখ্যা ./s, source s, sh sএবং zsh s?

উত্তর:


17

আপনি যখন চালান ./s, আপনি কার্নেলটিকে প্রোগ্রামটি চালিয়ে দিতে বলুন s। যদি আপনার এক্সিকিউশন অনুমতি থাকে, তবে কার্নেল ফাইলের প্রথম কয়েকটি বাইট পড়ে, #!লাইনটি দেখে তাই এটি জেনে যায় যে এটি একটি স্ক্রিপ্ট, এবং দোভাষীটি চালায়, স্ক্রিপ্টটির নামটিকে এটি প্রথম যুক্তি হিসাবে পাস করে। আপনার যদি মৃত্যুদন্ড কার্যকর করার অনুমতি না পেয়ে থাকে তবে কার্নেল প্রথম ধাপে এক্সিকিউশনটি বাতিল করে।

আপনি যখন চালান zsh s, আপনি চালিত করেন , zshএবং বলা ফাইলটি পড়তে sএবং আদেশ হিসাবে এটি ব্যাখ্যা করতে বলুন । আপনি নির্বাহ করছেন না s, আপনি নির্বাহ করছেন zshsh sবা একই জিনিস cat s

আপনি যখন দৌড়ান source s, আবার, আপনি zsh কে কোনও ফাইল পড়তে বলুন, তবে কী ব্যাপার তা হল যে আপনি এতে পড়ার অনুমতি পেয়েছেন।


ঠিক আছে, এটা বোঝা যায়। কিন্তু এটি কার্যকর করার অনুমতি থাকার বিন্দুকে পুরোপুরি পরাজিত করে না? এটি সেট করা আছে কি না তা বিবেচ্য নয়, আমি সর্বদা স্ক্রিপ্টটি সম্পাদন করতে সক্ষম হব (বা zsh কে স্ক্রিপ্টের আদেশগুলি ব্যাখ্যা করতে বলি যা সমান)।
C106

এছাড়াও, cat sকেবল ফাইলের বিষয়বস্তু মুদ্রণ করে। cat s | zshএগুলি zshপ্রিন্ট করে এবং প্রিন্ট করে Test
C106

1
@ সি 106 এক্সিকিউট করার অনুমতিটির মূল বিন্দুটি হ'ল ফাইলটি এমন কোনও কিছু উপস্থাপন করে যা আপনি অতিরিক্ত তথ্য ছাড়াই নির্বাহ করতে পারেন। ফাইলটি সেটুইড / সেটজিড থাকলে এটিও গুরুত্বপূর্ণ। একটি ফাইলের মৃত্যুদন্ডের অনুমতি নাও থাকতে পারে তবে তত্ক্ষণাত এমন নির্দেশাবলীর সমন্বয়ে থাকে যে এটি ঘটে থাকে যে কোনও কোনও কম্পিউটার প্রোগ্রাম কোথাও কার্যকর করে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

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