অন্যান্য ব্যবহারকারীর পরিবেশগত পরিবর্তনশীল [বদ্ধ] পান


23

অন্য কোনও ব্যবহারকারীর পরিবেশের পরিবর্তনশীল দেখতে পাবার কি উপায় আছে? আমি এটি রুট হিসাবে করতে চাই, সুতরাং অনুমতিগুলি অনুমান করা কোনও সমস্যা হবে না।

ব্যবহারকারীর জন্য নিজেই, আমি ব্যবহার করি echo $PATHবা set | grep PATH(বা setযখন আমি ভেরিয়েবলটির নাম মনে করি না)। অন্য ব্যবহারকারীর জন্য অনুরূপ নির্দেশ কী হবে?

এর মূল্য কী, আমি উবুন্টু সার্ভার 13.04 এ আছি।


4
ব্যবহারকারীদের পরিবেশ পরিবর্তনশীল নেই, প্রক্রিয়াগুলি রয়েছে। এক ব্যবহারকারীর দ্বারা সম্পাদিত প্রক্রিয়াগুলির জন্য সবার কাছে একই পরিবেশ না থাকা সাধারণ। আপনি কোন সমস্যার সমাধান করার চেষ্টা করছেন?
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

@ গিলস উদাহরণস্বরূপ, আমি জানতে চাইছি একজন ব্যবহারকারীর মেইল ​​ফোল্ডারটি কী। আমি সেই ব্যবহারকারী হিসাবে লগইন করতে পারি echo $MAIL, তারপরেও, তবে আমি ভেবেছিলাম সেখানে একটি শর্টকাট থাকতে পারে।

3
এটি এখনও প্রশ্নটিকে কার্যকরভাবে সংজ্ঞায়িত করে না (এবং উদাহরণস্বরূপ আপনি যে উত্তরটি গ্রহণ করেছেন তা অনেকগুলি কারণের উপর নির্ভর করে কাজ করতে পারে বা নাও পারে)। আপনি কি ডিফল্ট মেলবক্সের অবস্থানটি সন্ধান করছেন? আপনি কি সেই লোকেশনটি খুঁজছেন যেখানে ব্যবহারকারী আসলে তার লোকাল মেলটি গ্রহণ করে (যা ব্যবহারকারীর সাথে থাকলে আলাদা থাকতে পারে, এবং নাও থাকতে পারে .forward)? ব্যবহারকারীরা তাদের .profileবা অন্যান্য কনফিগারেশন ফাইলগুলিতে প্রায়শই কয়েকটি ভেরিয়েবল সেট করেন এবং এগুলি সমস্তকে বিশ্বস্তভাবে গণনার কোনও উপায় নেই। আবার, আপনি কোন সমস্যার সমাধান করার চেষ্টা করছেন?
গিলস 'অশুচি হওয়া বন্ধ করুন'

উত্তর:


20

আরেকটি বিকল্প ব্যবহার করা হয় env। এটি চালান root:

sudo -Hiu $user env | grep $var

উদাহরণ স্বরূপ

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon

1
আমি যখন রুট হিসাবে লগ ইন করি এবং আমার মানক ব্যবহারকারীর নামের জন্য এই কমান্ডটি কার্যকর করি তখন আমি পাই HOME=/root। যে রুট হোম ডিরেক্টরি, কিন্তু এটা না আমার মান বাড়িতে ডিরেক্টরি। লগ-ইন করার সময় কোনও নির্দিষ্ট ব্যবহারকারী যে পরিবেশটি পেতে পারে তা আপনি যদি জানতে চান তবে আপনাকে এই নির্দিষ্ট ব্যবহারকারীর লগইন শেলের স্টার্টআপ স্ক্রিপ্টগুলি চালাতে হবে (এবং মনে রাখবেন যে তার লগইন শেলটি আপনার লগইন শেল থেকে পৃথক হতে পারে)।
উউউ

@ আমরা কোন সিস্টেমে? এটা আমার জন্য ভালই কাজ করে। আপনি rootলগইন পরিচালক থেকে লগ ইন মানে কি ? আমি সূক্ষ্মভাবে নামিয়ে যদি লগ ইন করি তবে এটি ঠিক আছে root
টেরডন

আমি একটি ডেবিয়ান মেশিনে আছি আমি uwe হিসাবে লগ ইন, একটি xterm খুলুন, চালানো env | grep HOMEএবং পেতে HOME=/home/uwe; আমি মৃত্যুদন্ড কার্যকর করি suএবং তারপরে আরও একবার আসি env | grep HOMEএবং পেয়ে HOME=/rootযাই, তখন আমি দৌড়ে যাই sudo -u uwe env | grep HOMEএবং এখনও পাই HOME=/root
উওউ

@ অদ্ভুত আমি একটি ডেবিয়ান (এলএমডিই) মেশিনেও আছি, আপনি বর্ণিত ঠিক একই প্রক্রিয়াটি করেছি (এমনকি xtermআমার সাধারণ টার্মিনালের পরিবর্তে ব্যবহৃতও ) এবং প্রত্যাশিত ফলাফল পেয়েছি।
টেরডন

ম্যানুয়াল অনুসারে, বিকল্পটি উপস্থিত থাকলে বা সংশ্লিষ্ট এন্ট্রি sudoসেট করা থাকলে কেবলমাত্র হোম ভেরিয়েবল সেট করে। দেখে মনে হচ্ছে আমাদের sudoers ফাইল পৃথক পৃথক। যাইহোক, সম্ভবত এটি এখানে ব্যবহার করা ভাল ধারণা । -H/etc/sudoers-H-i
উয়েউ

2

একটি ব্যবহারকারীর জন্য, আপনি এটি এর মতো করতে পারেন:

su - <username> -c '. ~/.profile; echo $PATH'

তালিকা all সমস্ত ব্যবহারকারীর পাঠ্য:

for user in $(cat /etc/passwd | awk -F: '{print $1}'); do
  su - $user -c '. ~/.profile; printf "%s\n" "$PATH"'
done

@ ক্যামিল স্ট্যাপস

. ~/.profileএইভাবে আমি আমার প্রিয় ব্যক্তি পিটারিস ক্রুমিন্সের কাছ থেকে শিখেছি এমন কৌশল। তিনি এখানে কৌশলটি ব্যাখ্যা করেছিলেন । সম্ভবত পরে বাশ সংস্করণে বিকল্প সহ বিল্ডিং ছিল NON_INTERACTIVE_LOGIN_SHELLS


ধন্যবাদ! কারণ $PATHএটি . ~/.profile; অংশ ছাড়াই কাজ করে - এটি কীসের জন্য?

@ ক্যামিলস্ট্যাপগুলি "এটি কাজ করে" বলতে আপনার অর্থ কী? হ্যাঁ, আপনি $PATHসোর্সিং না করেও এর জন্য একটি মান পেয়েছেন ~/.profileতবে এটি আপনার পছন্দ মতো প্রায় নেই (= এই ব্যবহারকারী যখন লগ ইন করবেন তখন এটি দেখবে)। এমনকি সোর্সিং ~/.profileপুরোপুরি নির্ভরযোগ্য নয়, যেহেতু ব্যবহারকারী শেল ব্যবহার করতে পারেন যার প্রারম্ভিক ফাইলটি পৃথক ~/.profile
উয়েউ

@ আমরা ছাড়াও একই আউটপুট পেয়েছি, তবে আমার ধারণা এটি তখনকার কাকতালীয় ঘটনা।

আপনি ধরে নিচ্ছেন যে ব্যবহারকারী csh ব্যবহার করছে না।
গ্লেন জ্যাকম্যান

@CamilStaps প্রথম প্রশ্ন সেই নির্দিষ্ট ব্যবহারকারী তার মধ্যে তাঁর পথ পরিবর্তন কিনা তা ব্যবহারকারীকে ~/.profileএ সব। তবে যে কোনও ক্ষেত্রে, আচরণটি sudoঅনেকটা কনফিগার করা যেতে পারে /etc/sudoers(টের্ডনের সাথে আমার আলোচনা দেখুন), সুতরাং যখন আমাদের সিস্টেমগুলি অন্যরকম আচরণ করে, সম্ভবত এটি কনফিগারেশন ফাইলগুলির মধ্যে পার্থক্যের কারণে ঘটে।
উউউ

0

রুট থেকে আপনি su -ব্যবহারকারীর কাছে যেতে পারেন এবং তারপরে আপনি দেখতে চান এমন পরিবেশের পরিবর্তনশীলটিকে গ্রেপ করুন:

su - <username> -c 'echo $PATH'


কোনও কারণে এটি আমার পক্ষে কার্যকর হয় না, এমনকি যদি কমান্ডটি ভিন্ন ব্যবহারকারী হিসাবে কার্যকর করা হয়। আমি "এনভিভি" ব্যবহার করে শেষ করেছি, সুতরাং runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2আমার পক্ষে ভাল কাজ করে। আপনি যদি রুট না হন তবে কমান্ডের সাথে উপসর্গের প্রয়োজন sudo
আন্দ্রে-নিকুলি পেট্রে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.