පරිසර විචල්‍යයක් පැමිණියේ කොහෙන්ද යන්න තීරණය කරන්නේ කෙසේද?


178

මා කලකට පෙර සැකසූ ලිනක්ස් උදාහරණයක් තිබේ. මම එය සකස් කර ලොග් වූ rootවිට මා විසින් සකස් කරන ලද පරිසර විචල්‍යයන් කිහිපයක් ඇති නමුත් ඒවා පැමිණියේ කොහෙන්දැයි මට මතක නැත.

  • මම පරීක්ෂා කර ~/.bash_profile, /etc/.bash_rcසහ සියලු ආරම්භක පිටපත්.
  • මම ක්රියාත්මක කරනවා findහා grepකැමැතියි.

පැහැදිලිව පෙනෙන තැනක බැලීමට මට අමතක විය යුතු යැයි මට හැඟේ. මෙය හදුනා ගැනීම සඳහා උපක්‍රමයක් තිබේද?


7
/etc/environmentතවත් එකක්.
ඩෙරොබට්

8
සහ /etc/env.d/*ගොනු. නමුත් grep -R "YOUR_VARIABLE" /etc/සොයා ගැනීම හොඳම ක්‍රමයයි.
rozciorzewiacz


zrozciorzewiacz සරලම ක්‍රමය ... විචල්‍යය සැබවින්ම / etc / (මගේ නඩුවේ මෙන්) යටතේ කොතැනක හෝ පිහිටා තිබේ නම්; ඔබ එය පිළිතුරක් ලෙස පළ කළහොත්, මම ඉහළට ඔසවා තබමි;)
පේළිය

Answers:


63

envවිචල්යයන් පෙන්වීමට ඔබ විධානය භාවිතා කරන්නේ නම් , ඒවා දළ වශයෙන් ඒවා නිර්මාණය කළ අනුපිළිවෙලින් පෙන්විය යුතුය. පද්ධතිය විසින් ආරම්භයේදී ඉතා ඉක්මනින් හෝ පසුකාලීනව .ප්‍රොෆයිල් හෝ වෙනත් වින්‍යාස ගොනුවක් මඟින් ඒවා සකසා තිබේ නම් ඔබට මෙය මාර්ගෝපදේශයක් ලෙස භාවිතා කළ හැකිය. මගේ අත්දැකීම් අනුව, setසහ exportවිධානයන් ඒවායේ විචල්‍යයන් අකාරාදී පිළිවෙලට වර්ග කරනු ඇත, එවිට ලැයිස්තුගත කිරීම එතරම් ප්‍රයෝජනවත් නොවේ.


1
එය විශිෂ්ටයි ... මම පරිසර විචල්‍යයක් ඉවත් කරන්නේ කුමක් දැයි සොයා ගැනීමට උත්සාහ කරනවා හැර (/ etc / environment හි සකසා ඇත). :-) (ඔව්, එය මුලින් සකසා ඇත ... එය ඉවත් වන තැනට ලොග් වීම සඳහා මම විවිධාකාරයෙන් ස්ක්‍රිප්ට් වල පේළි එක් කරමි ...)
මයිකල් ෂෙපර්

1
මෙය ඔහුගේ ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත. පාරිසරික විචල්‍යයේ වටිනාකම දැන ගැනීමට ඔහුට අවශ්‍ය නැත, එම පාරිසරික විචල්‍යය ලබා ගැනීම සඳහා කවචය යොමු කරන වින්‍යාස ගොනුවේ පිහිටීම දැන ගැනීමට ඔහුට අවශ්‍යය.
ඇන්ඩෲ

160

නම් zshඔබේ පිවිසුම් ෂෙල් වේ:

zsh -xl

සමග bash:

PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2

එමඟින් පිවිසුම් කවචයක් අනුකරණය කර දැනට සිදු කර ඇති සෑම දෙයක්ම (stderr සමඟ හරවා යවන ලද ප්‍රදේශ හැර zsh) සහ දැනට අර්ථකථනය කර ඇති ගොනුවේ නම පෙන්වනු ඇත.

එබැවින් ඔබ කළ යුත්තේ එම නිමැවුමේ ඔබේ පරිසර විචල්‍යයේ නම සෙවීම පමණි. (ඔබට scriptසම්පූර්ණ ෂෙල් සැසි ප්‍රතිදානය ගබඩා කිරීමට උදව් කිරීමට විධානය භාවිතා කළ හැකිය , නැතහොත් bashප්‍රවේශය සඳහා, ටර්මිනලය වෙනුවට ප්‍රතිදානය ගබඩා කිරීම 7> file.logවෙනුවට භාවිතා කරන්න ).7>&2xtracefile.log

ඔබේ විචල්‍යය එහි නොමැති නම්, බොහෝ විට කවචය එය ආරම්භයේදීම උරුම කර ගත් නිසා එය PAM වින්‍යාසය, වැනි ~/.ssh/environment, හෝ ඔබේ X11 සැසි ආරම්භයේදී ( ~/.xinitrc, ~/.xsession) කියවන ලද දේවල් හෝ ඔබේ පිවිසුම ආරම්භ කළ සේවා අර්ථ දැක්වීම මත සකසා ඇත. කළමනාකරු හෝ ඊට පෙර සමහර ඇරඹුම් පිටපතක. එවිට find /etc -type f -exec grep -F THE_VAR {} +උදව් විය හැකිය.


6
ආකර්ෂණීය හා ප්රයෝජනවත්, ස්තූතියි. අපට n00bs, ඔබ මාදිලිය ගැන තව ටිකක් විස්තර කරන අතර මෙය අපව තබන මාදිලියෙන් අප ඉවත් වන්නේ කෙසේද? නිදසුනක් ලෙස, අපට මෙම ප්‍රතිදානය සරලව නල කළ නොහැක.
ජෙෆ්රි හේල්

6
E ජෙෆ්රි හේල් ඔබ zsh -xl 2>&1, එනම් ස්ටෙඩර් සහ ස්ටෑඩ් අවුට්ස් ඒකාබද්ධ කරන්නේ නම් , ඔබට සුපුරුදු පරිදි අතුගා දැමිය හැකිය.
රාකේෂ්

1
fishකවචය සමඟ මෙය කිරීමට ක්‍රමයක් තිබේද?
නික් ස්වීටින්

1
මම හිතන්නේ ඔබට භාවිතා කළ හැකිය PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>/tmp/$(uuidgen), පසුව එම අහඹු ගොනුවද අඹරන්න.
bd1251252

2
Bash අසාමාන්ය masterly සතුව
Alexander.Iljushkin

65

මුලින්ම බැලීමට සමහර ස්ථාන:

පද්ධතිය පුළුල්

  • /etc/environment: විශේෂයෙන් පරිසර විචල්‍යයන් සඳහා අදහස් කෙරේ
  • /etc/env.d/*: පරිසර විචල්‍යයන්, බහු ගොනු වලට බෙදීම
  • /etc/profile: සියලු වර්ගවල ආරම්භක ස්ක්‍රිප්ට්
  • /etc/profile.d/*: ආරම්භක ස්ක්‍රිප්ට්
  • /etc/bashrc, /etc/bash.bashrc: කාර්යයන් සහ අන්වර්ථයන් සඳහා අදහස් කෙරේ

පරිශීලක විශේෂිත

  • ~/.bash_profile: පිවිසුම් (bash-) ෂෙල් වෙඩි සඳහා ආරම්භ කිරීම
  • ~/.bashrc: සියළුම අන්තර්ක්‍රියාකාරී (bash-) ෂෙල් වෙඩි සඳහා ආරම්භ කිරීම
  • ~/.profile: සියලුම ෂෙල් වෙඩි සඳහා භාවිතා කරයි
  • ~/.cshrc, ~/.zshrc, ~/.tcshrc: Bash නොවන කටු හා සමාන

34

Ian සයන් නිවැරදි ය. භාවිතයට වඩා වෙනත් findහා grepඔබ එය කොහේ සිට පැමිණි කෙනෙක් දැයි සොයා ගැනීමට කළ හැකි දක්නට නොමැති වන අතර,. එය සැබවින්ම පරිසර විචල්‍යයක් බව දැන, මම ඔබේ සෙවීම / etc / සහ ඔබේ නිවාස නාමාවලිය වෙත යොමු කිරීමට උත්සාහ කරමි. VARIABLEඔබ සොයන සුදුසු විචල්‍යය සමඟ ප්‍රතිස්ථාපනය කරන්න :

$ grep -r VARIABLE /etc/*

$ grep -r VARIABLE ~/.*


1
'ඔබට බැහැ' යනුවෙන් පවසන පිළිතුරකට, 'ඔව් ඔබට පුළුවන්' යැයි කියන පිළිතුරු වලින් වටවී තිබීම පුදුම සහගතය.
මයිකල් ෂෙපර්

විචල්‍යයක් සකසා ඇත්තේ කොහේද යන්න තීරණය කිරීමට සත්‍ය වශයෙන්ම මගක් සපයන කිසිදු පිළිතුරක් මා දකින්නේ නැත. ප්‍රයෝජනවත් හෝඩුවාවන් කිහිපයක් ඇත, නමුත් කාර්යය කළ හැකි එක් ලයිනර් යන්ත්‍රයක් නොමැත.
වැග්නර්

මේ දේ මගේ කාලය විසඳුවා. තෑන්ක්ස්.
හසන් රාසා

Ic මයිකල්ෂෙපර් "ඔබට එය සොයාගත නොහැක. පසුව "ඔබට පුළුවන්" හි එය විස්තර කරන්නේ කෙසේද? grep භාවිතා කිරීම
පේළිය

24

ඔබ set -xඔබේ .profileහෝ ඊට ඇතුළත් කළහොත් .bash_profile, පසුව ඇති සියලුම ෂෙල් විධාන සම්මත දෝෂයකට ලොග් වනු ඇති අතර ඒවායින් එකක් මෙම විචල්‍යයන් සකසන්නේ දැයි ඔබට දැකගත හැකිය. එය සොයා ගැනීමට ඔබට set -xඉහළින් තැබිය හැකිය /etc/profile. ප්‍රතිදානය ඉතා වාචික විය හැකි බැවින් ඔබට එය වැනි ගොනුවකට හරවා යැවීමට අවශ්‍ය විය හැකිය exec 2>/tmp/profile.log.

ඔබේ පද්ධතිය PAM භාවිතා කරන්නේ නම්, හෝ pam_envපැටවීමේ ඉල්ලීම් සොයා බලන්න . මෙම මොඩියුලය මඟින් විශේෂිත ලිපිගොනු වලින් පරිසර විචල්‍යයන් පටවනු ලැබේ, නැතහොත් ගොනුවක් නිශ්චිතව දක්වා නොමැති නම් පද්ධති පෙරනිමියකින් ( සහ ඩේබියන් සහ උබුන්ටු මත) පටවනු ලැබේ . ලිනක්ස් හි පරිසර විචල්‍ය අර්ථ දැක්වීම් සහිත තවත් ගොනුවක් වන්නේ (ආරම්භ වන රේඛා සඳහා බලන්න )./etc/pam.conf/etc/pam.d/*/etc/environment/etc/security/pam_env.conf/etc/login.defsENV_



4

සඳහා zshභාවිතා කරන්නන්, (ආරම්භක කාලය තුළ) ප්රවේශ ඇති ගොනු සොයා දීම ප්රයෝජනවත් විය හැකි, ඔවුන් බොහෝ නොවන අතර එක් දෙයක් අර්ථ සිටි සොයා ගැනීමට එක්-විසින්-එක් ඔවුන් හරහා බලා ගත හැක.

zsh -o SOURCE_TRACE

0

පරිසර විචල්‍යයන් / etc / profile ගොනුවේ ගබඩා කර ඇති බැවින් වැඩි / etc / පැතිකඩ කර ඔබට අවශ්‍ය env විචල්‍යයන් පරීක්ෂා කර බලන්න. / Etc / profile නොමැති නම් ඔබේ නිවාස නාමාවලියෙහි .profile ගොනුව සඳහා ලොක් කරන්න.


1
පාරිසරික විචල්‍යයන් ගබඩා කර නොමැති අතර /etc/profile, bashපිවිසුම් කවචයක් ලෙස භාවිතා කරන විට ඔබට ඒවා පද්ධතිය පුරා අර්ථ දැක්විය හැකිය . ලිපිගොනු සහ / හෝ විධාන රේඛාවලින් අර්ථ දැක්වීම් කියවීමෙන් පසු ඒවා ෂෙල් ක්‍රියාවලිය මඟින් ගබඩා කරනු ලැබේ.
ඇන්තන්

-2

උදාහරණයක් ලෙස, ඔබට HISTFILE විචල්‍යය සහ එහි වටිනාකම සොයා ගැනීමට අවශ්‍ය නම් හෝ ඉතිහාසය පිළිබඳව කුමන විචල්‍යයන් අර්ථ දක්වා ඇත්දැයි දැන ගැනීමට අවශ්‍ය නම් ඔබ මෙය කවචයේ ටයිප් කරයි:

set | grep HIST
env | grep HIST
printenv | grep HIST

ඔබ මේ වන විටත් නම දන්නේ නම්, ඒ මන්ද: echo "$HISTFILE"?
ජෙෆ් ෂලර්

මන්ද, අපට $ HISTFILE විචල්‍යය අර්ථ දක්වා ඇති ස්ථානයෙන් සොයා ගැනීමට අවශ්‍යය. අබු ඉතිහාසය නිර්වචනය කර ඇත්තේ කුමන විචල්‍යයන් දැයි දැන ගැනීමට මට අවශ්‍ය නම්
Vusal Aliyev

2
අවාසනාවට, setවිචල්‍යය නිර්වචනය කළේ කුමන ගොනුවදැයි ඔබට නොකියයි.
ජෙෆ් ෂලර්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.