ওএস এক্স মাভারিক্সে সিস্টেম-ব্যাপী পরিবেশের ভেরিয়েবল কীভাবে সেট করবেন


36

আমরা /etc/environmentমাউন্টেন সিংহে সিস্টেম-ব্যাপী পরিবেশের ভেরিয়েবলগুলি সেট করতে ব্যবহার করতাম । তবে, মনে হয় এই ফাইলটি আর পড়েনি।

আদর্শভাবে সমাধানটি সমস্ত ব্যবহারকারীর জন্য প্রয়োগ করা উচিত এবং এসএসএস কনসোল সেশনগুলির সাথে এটি কাজ করা আমাদের প্রয়োজন। কাজ করার জন্য আমাদের এটি দরকার

ssh user@mavericks-machine 'echo $MY_ENV_VAR'

এখনও পর্যন্ত আমরা চেষ্টা করেছি:

  • /etc/launchd.conf

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

  • ~/.profile, ~/.bash_profileইত্যাদি

    কেবল শাঁসের জন্য প্রযোজ্য

কোন পরামর্শ?


ফাইলটি ( /etc/environment) পড়েনি কারণ এটি কোনও ক্রস-সিস্টেমের মান নয় - এটি লিনাক্স পিএএম সুবিধার অংশ মাত্র। ম্যাক ওএস এক্স লিনাক্স নয় এবং পিএএম ব্যবহার করে না, বা আমার জ্ঞানের সাথে অন্য অপারেটিং সিস্টেম ব্যবহার করে না। আপনি কেবল এটির সাথে পালিয়ে গেছেন কারণ আপনি লিনাক্সে ছিলেন, স্পষ্টতই। এবং হ্যাঁ, এটি এখনও পড়ে আছে - লিনাক্স দ্বারা ;-)
amn

উত্তর:


18

ম্যাভেরিক্সের আগে সঠিক ফাইলটি ছিল ~/.MacOSX/environment.plist। এটি আর সমর্থিত নয়।

ডারউইনে এবং ম্যাক ওএস এক্স-এ, এগুলি সেট করার উপযুক্ত জায়গাটি /etc/launchd.confসমস্ত প্রক্রিয়াতে প্রয়োগ করার জন্য; যদি বিশেষভাবে ব্যবহারকারীর শেলগুলির সাথে সম্পর্কিত হয়, তবে প্রশ্নটির শেলের উপর নির্ভর করে উপযুক্ত শেল ফাইলগুলি ব্যবহার করুন। দেখুন launchd.confএবং launchctlআরো অনেক কিছুর জন্য মানুষ পেজ।

বলেছিল ...

যদি আপনার লক্ষ্যটি বিশেষত এটি এসএস সেশনের জন্য প্রয়োগ করা দেখতে হয় তবে আপনার সচেতন হওয়া দরকার যে সুরক্ষা কারণে, এই পদ্ধতিতে পরিবেশ পরিবর্তনশীল প্রয়োগ করে না ssh। আসলে একটি ssh অধিবেশন সাধারণত ওএস থেকে পরিবেশগত ভেরিয়েবলগুলির অনেকগুলি সীমাবদ্ধ সেট পায় কারণ এটি "লগইন" বা "ইন্টারেক্টিভ" শেল হিসাবে পরিচিত নয়, এটি একটি "অ ইন্টারেক্টিভ" শেল হিসাবে শ্রেণিবদ্ধ করা হয়েছে। ( man bashশেল প্রকারের জন্য আরও দেখুন )) এসএসএস এনভায়রনমেন্ট ভেরিয়েবলগুলি যেভাবে পরিচালনা করে তা এসএসএস / এসএসডি ডক্স এবং ম্যান পৃষ্ঠাগুলিতে ভালভাবে আবৃত।

Ssh - যা এটি নিজস্ব শেল, বাশ সদৃশ - অধিবেশনের জন্য পরিবেশের ভেরিয়েবলগুলি ~/.ssh/environmentতাদের প্রাসঙ্গিক লঞ্চ ফাইলগুলিতে ব্যাশ বা সিএসএস ইত্যাদির জন্য এগুলি নির্ধারণের সমতুল্য হিসাবে সংরক্ষণ করা হয় । এটি সম্ভবত আপনি যেখানে আপনার ব্যবহারকারীর ssh সেশনের জন্য আপনার ENV ভেরিয়েবলগুলি সেট করতে চান, যদিও আপনি কেন আপনার মূল পোস্টে বিশ্বব্যাপী ENVs নির্ধারণ করতে চাইছেন তা বিশদ নন, যা সমাধান সরবরাহে সহায়ক হতে পারে। আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি স্বতন্ত্রভাবে প্রতি ব্যবহারকারীর উপর সেট করুন প্রতিটি স্বতন্ত্র অ্যাকাউন্টের উপর ভিত্তি করে যথাযথ সুরক্ষা বজায় রাখতে কমপক্ষে সীমাবদ্ধ সুযোগ সুবিধা / গুণাবলী সেরা অনুশীলন অনুসরণ করে।

যদি কোনও কারণে আপনি এর সুরক্ষা সম্পর্কিত বিষয়গুলি উপেক্ষা করতে চান তবে PermitUserEnvironmentআপনার এসএসএস কনফিগারেশনে সেট করুন। নোট করুন যে UseLoginসক্ষম করা থাকলে এটি অক্ষম করা আছে । গুরুত্বপূর্ণ: উপলব্ধি করুন যে এর অর্থ হ'ল ব্যবহারকারী অ্যাকাউন্টগুলি /bin/falseতাদের শেল হিসাবে ব্যবহার করার জন্য সেট করেছে - ব্যবহারকারী অ্যাকাউন্ট নিষ্ক্রিয় করার জন্য সাধারণ পদ্ধতি - এখন সম্ভবত এই বিধিনিষেধের চারপাশ পেতে পারে এবং এটি এখন সক্রিয় হয়ে উঠতে পারে, এটি বিপজ্জনক। /bin/falseসুরক্ষা প্রত্যাশা হিসাবে অনেকগুলি অ্যাকাউন্ট তাদের শেল হিসাবে ব্যবহারের জন্য সেট করা আছে ।

নীচের লাইনটি হ'ল আপনি বিশ্বব্যাপী এটি করা উচিত নয় এবং সুরক্ষার কারণে এসএসভি ENV প্রচার করার আশা করছেন। আপনার প্রশ্নটি কার্যকরভাবে, উদ্দেশ্যমূলকভাবে জিজ্ঞাসা করছে যে সুরক্ষার কারণে বিদ্যমান কয়েকটি ব্যবস্থাকে কীভাবে পরাস্ত করতে হয়।


খুব বিস্তারিত উত্তর (+10) আমি উপসংহারটিও পছন্দ করি :) স্বাগতম!
ঝুঁকিপূর্ণ

আমি পরামর্শ দিচ্ছি যে নিরাপত্তা সতর্কতার সাথে এটি করার যথাযথ কারণ থাকতে পারে। এটি সব আপনার হুমকির মডেলের উপর নির্ভর করে। আপনি যদি পরীক্ষা অটোমেশন মেশিনগুলির একটি গ্রুপ সেট আপ করেন তবে এটি করার অর্থটি হতে পারে।
উছুগাকা

2
স্ট্যাকওভারফ্লো.com / a / 26311753 / 1081043 অনুসারে , /etc/launchd.confওএসএক্স 10.10 ইয়োসেমাইট হিসাবে আর কাজ করে না।
উইসবুকি

10

আপনি যদি ব্যবহার করে থাকেন bashতবে পরিবেশের ভেরিয়েবলগুলিতে সেট করা /etc/profileসমস্ত ব্যবহারকারীর জন্য প্রযোজ্য।

bashওএস এক্স মাভারিক্সের ম্যানুয়াল থেকে আমার জোর দিয়ে (এটি পূর্ববর্তী সংস্করণ থেকে পরিবর্তিত হয়নি):

যখন বাশকে একটি ইন্টারেক্টিভ লগইন শেল হিসাবে, বা - লগিন বিকল্পের সাথে একটি অ-ইন্টারেক্টিভ শেল হিসাবে ডাকা হয়, এটি প্রথমে ফাইল / ইত্যাদি / প্রোফাইল থেকে কমান্ডগুলি পড়ে এবং কার্যকর করে, যদি সেই ফাইলটি বিদ্যমান থাকে। এই ফাইলটি পড়ার পরে, এটি সেই ক্রমে ash / .bash_profile, ~ / .bash_login, এবং ~ /। প্রোফাইলে অনুসন্ধান করে এবং উপস্থিত এবং পঠনযোগ্য যা প্রথমটি থেকে আদেশগুলি পড়ে এবং কার্যকর করে।
...
যদি শ নামের সাথে বাশকে আহ্বান জানানো হয় তবে এটি পসিক্স স্ট্যান্ডার্ডের সাথে সঙ্গতি রেখে যতটা সম্ভব নিবিড়ভাবে ofতিহাসিক সংস্করণের শুরুর আচরণ নকল করার চেষ্টা করে । ইন্টার-অ্যাক্টিভ ইন্টারেক্টিভ অ্যাক্টিভ লগইন শেল, বা - লগিন বিকল্প সহ একটি অ-ইন্টারেক্টিভ শেল হিসাবে আহ্বান করা হলে, এটি প্রথমে / etc / প্রোফাইল থেকে আদেশগুলি পড়ার এবং সম্পাদন করার চেষ্টা করে এবং ~ /। প্রোফাইল, সেই ক্রমে।


5

আপনি (এবং অন্য যে কেউ এই প্রশ্নটি সন্ধান করছেন) প্রায় নিশ্চিতভাবেই নিম্নলিখিত পথটি খুঁজছেন:

/private/etc/paths

আপনি /private/etc/paths.dযদি মূল সিস্টেমের ডিফল্ট "পাথ" কনফিগারেশন ডকুমেন্টটি পরিবর্তন এড়াতে চান তবে আপনি সর্বদা আপনার সম্পাদনাগুলি এতে রাখতে পারেন, তবে তারপরে সেগুলি আপনার $PATHভেরিয়েবলের শেষে যুক্ত করা হবে , সুতরাং যদি আপনি সামনে $PATH( ডিরেক্টরিতে) ডিরেক্টরি যুক্ত করতে চান ডিফল্ট সিস্টেম ইউটিলিটিগুলি ওভাররাইড করুন, উদাহরণস্বরূপ), আপনাকে কেবলমাত্র মূল /private/etc/pathsফাইলটি সম্পাদনা করতে হবে এবং সেগুলি তালিকার শীর্ষে যুক্ত করতে হবে। উদাহরণস্বরূপ, আমি এটি একটি ফোল্ডারের জন্য করি যেখানে আমি কয়েকটি মুখ্য স্ক্রিপ্টগুলি নিজেই তৈরি করেছিলাম, সাথে কয়েকটি মূল উপযোগিতা যেমন,mozjpeg, আমি চাই যে সিস্টেমটি যে ডিফল্টগুলি আসে তার পরিবর্তে সর্বদা এটি ব্যবহার করে (যেভাবে কোনও প্রোগ্রাম দ্বারা সংরক্ষিত সমস্ত জেপিগ ফাইলগুলি নিয়মিত সিস্টেম সিজেপেইগ ইউটিলিটিটি সংকোচনের চেয়ে 10% বেশি স্বয়ংক্রিয়ভাবে সংকুচিত হয়ে যায় - I ' এটি পড়ুন যে বেশিরভাগ সিস্টেমে এটি ডিফল্ট না হওয়ার কারণ হ'ল এটি অনেক ধীর গতিযুক্ত, তবে আপনি যখন ০.০২ সেকেন্ডের বিপরীতে ০.০৪ সেকেন্ডের মতো কিছু কথা বলছেন, তখন "of এর গুণক দ্বারা ধীর" আসলে বেশি কিছু বোঝায় না doesn't যে কোনও কিছুর ... ধরে নেওয়া এই কোনও সার্ভার নয় অবশ্যই)। আমি জানি প্রচুর লোকেরা সম্ভবত সিস্টেমে এটি গভীরভাবে সম্পাদনা করার সম্ভাব্য "বিপদ" সম্পর্কে সতর্ক করবে, তবে আমি বলব যে আপনি যদি এর মতো উত্তর খুঁজছেন তবে আপনি সম্ভবত কোনও ইউটিলিটি নামকরণ করার জন্য যথেষ্ট জানেন know সংঘাতগুলি যা ভবিষ্যতে সম্ভাব্যভাবে উত্থিত হতে পারে,/private/etc/pathsসত্যই এটি সম্ভব সমস্ত ব্যবহারকারী / লগইন / ইনস্ট্যান্সগুলিতে তাদের প্রচার করে - সমস্ত প্রোগ্রাম, শেলস ইত্যাদি তাদের ফাইলের ভিত্তি তৈরি করতে সেই ফাইলের পাথগুলি ব্যবহার করবে $PATH

সত্যি কথা বলতে কি, আমি এখানে অবাক হয়ে এখনও অবাক হয়েছি আর কেউ এ বিষয়ে উল্লেখ করেনি। এসএসএইচ-নির্দিষ্ট ব্যবহার সম্পর্কে লঞ্চ এবং বিভ্রান্তির সাথে যে সমস্ত গোলমাল হচ্ছে ... এই সমাধানটি যে কেউ এই মূল সমস্যাটি সত্যই সন্ধান করছে - পরিষ্কার, সরল থেকে উত্স, সর্বদা কার্যক্ষম সমাধান।

যাইহোক, আপনি যদি ভাবছেন তবে ওএস এক্স /etcএ কেবল একটি সিমিলিংক /private/etc, যাতে আপনি কেবল সহজেই করতে পারেন sudo nano /etc/pathsএবং একই সঠিক জায়গায় যেতে পারেন। উপরের পাথটি হ'ল ফাইলের সম্পূর্ণ আসল পথ।


2
যদি না আমি কিছু অনুপস্থিত করছি, যে শুধুমাত্র একটি সিস্টেম-ব্যাপী এনভায়রনমেন্ট ভেরিয়েবল সেট হবে - $PATH। ওপি একটি সাধারণ সমাধান সন্ধান করছে বলে মনে হচ্ছে - কোনও এনভ ভার, সিস্টেম-প্রশস্ত, যেমন $EDITOR, ইত্যাদি নির্ধারণ করে
জন এন

এমনকি sudoম্যাকস সিয়েরায়, কমান্ডটি সহ , আমি যদি পথের সাথে সংযোজন সহ echoএকটি নতুন ফাইল ব্যবহার করার চেষ্টা করি তবে আমি অনুমতি অস্বীকার করি /private/etc/paths.d। তবে এটি প্রথমে ফাইল তৈরিতে কাজ করে, তারপরে sudo mvফাইলটি সরানোর জন্য ব্যবহার করুন /private/etc/paths.d
মুরে

এই সাহায্য করেছে। আমার মধ্যে AT पथ নির্ধারণ করা সত্ত্বেও অন্য ডিরেক্টরিগুলি আমার পাঠ্যপুস্তকে প্রেনডেন্ট হচ্ছিল ~/.zshrc... অপরাধী সত্যই ছিল /private/etc/pathsএবং আমাকে এই ফাইলটি আপডেট করতে হয়েছিল। ধন্যবাদ।
nonbeing

1

আমার অনুরূপ সমস্যা ~/.bashrcছিল , বিশেষত যখন আমি এসএসএইচ দিয়ে আমার মেশিনের সাথে সংযুক্ত ছিলাম তখন তা উত্সাহিত করা হত না। আমি দেখতে পেয়েছি যে এসএসএইচডি এর জন্য একটি কনফিগারেশন সেটিংস পরিবর্তন করা কৌশলটি করেছে। সম্ভবত আপনার সমস্যাটিও এসএসএইচ ডেমনের সাথেই আছে?

নিম্নলিখিত হিসাবে এসএসএইচ পরিষেবাটির কনফিগারেশন ফাইলটি পরিবর্তন করুন:

# /etc/sshd_config
PermitUserEnvironment yes

তারপরে সিস্টেম পছন্দসমূহ> ভাগ করে নেওয়ার ক্ষেত্রে রিমোট লগইন পরিষেবাটি পুনরায় চালু করুন।

sshd_configম্যানপেজ থেকে :

 PermitUserEnvironment
         Specifies whether ~/.ssh/environment and environment= options in
         ~/.ssh/authorized_keys are processed by sshd(8).  The default is
         ``no''.  Enabling environment processing may enable users to
         bypass access restrictions in some configurations using mecha-
         nisms such as LD_PRELOAD.

(এটি যদি সহায়তা করে তবে আমি আমার ব্যক্তিগত উইকিতে এটি কীভাবে পরীক্ষা করেছি তা লিখে রেখেছি )


1

যদি অন্যরা সাধারণ গ্রাফিকাল লগইন সেশন থেকে শুরু হওয়া প্রক্রিয়াগুলির জন্য পরিবেশের ভেরিয়েবলগুলি কীভাবে সেট করবেন তা অনুসন্ধান করে, আপনি ব্যবহার করতে পারেন /etc/launchd.conf। উদাহরণস্বরূপ /usr/local/bin, ডিফল্ট পথে যুক্ত করুন, চালান

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

এবং পরিবর্তনগুলি প্রয়োগ করতে পুনরায় চালু করুন। পরিবর্তনগুলি প্রয়োগ করার আরেকটি উপায় হ'ল launchctl</etc/launchd.conf;sudo launchctl</etc/launchd.confপ্রক্রিয়া চালানো ও পুনরায় চালু করা।


/etc/launchd.conf আর আরম্ভ করার পরে আর ব্যবহার করা হয় না।
uchuugaka

2
/etc/launchd.confওএসএক্স 10.10 ইয়োসেমাইট
উইসবুকি

0

হুম ... ম্যাক ওএস এক্স ১০.০.০. এর হিসাবে এবং সম্ভবত এর আগে, man -s5 launchd.confআমাদের বলে: " launchd.conf is no longer respected by the system." আমার এখনই ফাইলে একটি ডামি ভেরিয়েবল স্থাপন করার জন্য অনেক বেশি জিনিস চলছে এবং এটি সত্যিকার অর্থে কাজ করে কি না তা দেখার জন্য পুনরায় চালু করতে হবে সব, কিন্তু ডকুমেন্টেশন বলে যে এটি কাজ করা উচিত নয়।

আমি নিশ্চিত যে এটি হবে না। কর man launchctlএবং আপনি দেখতে পাবেন: " The /etc/launchd.conf file is no longer consulted for subcommands to run during early boot time; this functionality was removed for security considerations."

আপনি যা করতে পারেন তা হ'ল পরিবেশের পরিবর্তনশীলগুলি আপনি যে কোনও ফাইলের মধ্যে গ্লোবাল-ইশ হতে চান, সম্ভবত এটি environmentলিনাক্সের সাথে রাখার জন্য বলা হয়েছে, বা (অ্যাপল পরে এর সাথে কিছু করার সিদ্ধান্ত নিয়েছে - আপনি কখনই জানেন না) environment.conf, যেমন আমি করেছি, তারপরে এটি উত্স করুন /etc/profile:

if [ -f /etc/environment.conf ]; then
   source /etc/environment.conf
fi

বা, আপনি যদি কমপ্যাক্ট ফর্ম্যাটটি পছন্দ করেন:

if [ -f /etc/environment.conf ]; then . /etc/environment.conf; fi

আপনি যদি বাশ ব্যতীত অন্য কোনও শেল ব্যবহার করেন , এবং এটি ব্যাশের মতো একই পরিবর্তনশীল-সেটিং বাক্য গঠন ব্যবহার করে (যেমন zsh, আমি মনে করি), আপনাকে শেলটির সিস্টেম-প্রশস্ত আরসি ফাইল (যেমন /etc/zshrc) থেকে এই ফাইলটি উত্স করতে হবে । আপনি যদি একটি শেল ব্যবহার করেন যা আলাদা সিনট্যাক্স, উদাহরণস্বরূপ, tcsh ব্যবহার করে তবে আপনাকে সেই শেলের জন্য অনুরূপ একটি ফাইল বজায় রাখতে হবে এবং এটি শেলের সিস্টেম-প্রশস্ত আরসি ফাইল (উদাহরণস্বরূপ /etc/csh.cshrctcsh এর জন্য) থেকে উত্স করতে হবে , বা আরও ভাল একটি স্ক্রিপ্ট তৈরি করতে হবে যা এটি স্বয়ংক্রিয়ভাবে জেনারেট করে, সুতরাং আপনাকে কেবল ভেরিয়েবল যুক্ত / পরিবর্তন করতে একটি ফাইল সম্পাদনা করতে হবে। এটি এই জাতীয় টিউটোরিয়ালের জায়গা নয়; গুগলে কয়েক সেকেন্ডের মধ্যে কীভাবে [t] সিএসএস ভেরিয়েবল রফতানিগুলি ব্যাশ সিনট্যাক্সে রূপান্তর করতে হবে https://stackoverflow.com/questions/2710790/how-to-source-a-csh-script-in-bash-to এ -set-পরিবেশের, সুতরাং অন্য দিকে যেতে সম্ভবত কিছু উপলভ্য আছে।

আমার অভিজ্ঞতা হয়েছে যে ম্যাক ওএস এক্স অনুমানযোগ্য আরসি ফাইল আচরণ থেকে আরও এবং আরও দূরে চলেছে। অন্তত 10.8 এর হিসাবে, এটা কোনো লোড বলে মনে হয় /etc/rc.common, /etc/rc.confবা /etc/rc.<anything>, কিংবা (যেহেতু অন্তত 10.9) এটিকে লোড করা হবে /etc/bash.bashrcইন্টারেক্টিভ nonlogin শাঁস জন্য (যা এটা অবশ্যই কাজ করা উচিত, শুধু এটা লোড মত ~/.bashrcতাদের জন্য, কিন্তু, 10.10 হিসাবে) । তারপরে আবার আমার কাছে ফিঙ্ক, ম্যাকপোর্টস এবং হোমব্রিউ সব ইনস্টলিং স্টাফ রয়েছে, তাই সম্ভবত তাদের মধ্যে একটি ডিফল্ট ডটফিল আচরণে হস্তক্ষেপ করছে। YMMV।


প্রশ্নটি পূর্বের ওএস এক্স এর জন্য রয়েছে অন্যান্য উদাহরণস্বরূপ আপেল.স্ট্যাকেক্সেঞ্জার
কুইকশনস

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