שאלה הפעלה בנתיב, ניתן למצוא על ידי אשר, עדיין לא ניתן לבצע ללא נתיב הכשרה מלאה?


יש לי בעיה מוזרה לכאורה, עם פקודה ב $ PATH כי הקליפה (ksh, פועל על לינוקס) נראה פחדן לסרב להפעיל. מבלי להשלים לחלוטין את הפקודה, אני מקבל:

#  mycommand
/bin/ksh: mycommand: not found [No such file or directory]

אבל ניתן למצוא את הקובץ לפיו:

#  which mycommand
/home/me/mydir/admbin/mycommand

אני גם רואה במפורש את הספרייה הזו ב- $ PATH:

#  echo $PATH | tr : '\n' | grep adm
/home/me/mydir/admbin

Exe במיקום זה נראה רגיל:

#  file /home/me/mydir/admbin/mycommand
/home/me/mydir/admbin/mycommand: setuid setgid ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped

# ls -l mycommand  
-r-sr-s--- 1 me mygroup 97892 2012-04-11 18:01 mycommand

ואם אני מפעיל אותו במפורש באמצעות נתיב מלא:

#  /home/me/mydir/admbin/mycommand

אני רואה את הפלט הצפוי. ללא שם: משהו בהחלט מבלבל את הקליפה כאן, אבל אני במחירי מה זה יכול להיות?

עריכה: מציאת מה שנראה כמו שאלה דומה: בינארי לא יופעל כאשר יפעל עם נתיב. לדוגמה, תוכנית לא תעבוד אבל התוכנית עובדת בסדר

בדקתי גם יותר מפקודה אחת כזו ב- $ PATH, אך מצאתי רק אחד:

# for i in `echo $PATH | tr : '\n'` ; do test -e $i/mycommand && echo $i/mycommand ; done
/home/me/mydir/admbin/mycommand

EDIT2:

עד הבוקר, את הבעיה נעלמה, ועכשיו אני יכול לבצע את ההפעלה.

זה יכול להיחשב כמו אימות ההצעה להתנתק ולהיכנס, אבל עשיתי את זה אתמול בלילה ללא הצלחה. זה logout / כניסה צריך לעשות גם את המקבילה של הפעלת הפקודה 'hash -r' שהוצע (אשר fwiw נראה גם ksh מובנה, ולא רק bash מובנה).

בתשובה למספר תשובות:

  • זהו קובץ הפעלה לא סקריפט (ראה את הפניה ELF בפלט פקודת הקובץ).

  • אני לא חושב שחסד היה עוזר. זה בסופו של דבר לאלץ את הפקודה לבצע מלא מוסמך. אני מניחה שהייתי מסוגלת להצמיד לחבטה את הקונכייה הנוכחית, אבל מכיוון שאינני יכולה עוד להישען, אין טעם לנסות זאת.

  • לא היו פסיקים ב- $ PathH. מאז אני כבר לא יכול לשכוח, אני לא להעמיס את השאלה הזאת עם מלא $ PATH.

  • לנסות פגז נוסף (כלומר באש) היה משהו שהייתי מנסה גם, כפי שהוצע. עם הבעיה נעלם, עכשיו אני לא יודע אם זה היה עוזר.

זה היה גם הציע לי היה בודק את ההרשאות במדריך. עושה זאת, עבור כל הספריות עד זה אני רואה:

# ls -ld $HOME $HOME/mydir $HOME/mydir/admbin
drwxr-xr-x 10 me root    4096 2012-04-12 12:20 /home/me
drwxrwsr-t 22 me mygroup 4096 2012-04-12 12:04 /home/me/mydir
drwxr-sr-x  2 me mygroup 4096 2012-04-12 12:04 /home/me/mydir/admbin

הבעלות בספרייה $ $ הוא פישל (לא צריך להיות קבוצת השורש). זה יכול לגרום לבעיות אחרות, אבל אני לא רואה איך זה היה גורם לזה.


12
2018-04-11 23:50




Scripting קונג פו שלך הוא מדהים. - Jeff Ferland
אני יודע שזה נשמע פשטני מדי אבל פעם היה לי את אותה בעיה והתברר להיות חצי המעי הגס המשמש מפריד נתיב במקום נקודתיים. - John Gardeniers
האם אתה יכול לספק את כל ההגדרה PathH שלך? - Jason Huntley
זו שאלה מצוינת. - gWaldo
יכול להיות המטמון של הקליפה? - Michael Slade


תשובות:


אתה כנראה צריך לעדכן את המטמון של פגז שלך פריטים $PATH באמצעות hash -r.


1
2018-04-12 09:56



$ apropos hash | grep ksh -- שום דבר. ענית עם bash מובנית, אבל זה לא הפגז המדובר. - Jeff Ferland


כמו כן, במקרים כאלה, לבדוק מה קורה כאשר התוכנית נקראת על ידי העברת ההפעלה שלה כמו ויכוח לקשר דינמי (עשוי לסרב לעשות זאת בעוד setwid / setgid על כמה מערכות).

(1) פלט של שני המקרים עשוי גם להיות חושף. "אין קובץ או ספריה כאלה" על קובץ הפעלה באמת אומר כי הקושר דינמי שצוין בקובץ ההפעלה לא ניתן למצוא (לדמיין את ההפעלה שיש טופס ELFin של #! / lib / ld-linux.what.so.ever בפנים)

התנהגות זו היתה אנשים המומים שהיו שם כדי לראות את סוף עידן libc5, ועכשיו מפעם לפעם אנשים dumbfounds בעידן של מעורבת i386 / amd64 עם אמצעים שונים של תמיכה שתי קבוצות הספרייה בטבע.

יחסית RPATH ב ביצוע לעומת $ PWD?

נ.ב השאלה השנייה קשורה MacOSX, אשר כנראה משתמש dyld ולא libc בתנאי מקשר. סוג שונה מאוד של בעלי חיים.


1
2018-05-05 23:04





בסדר, אין לי תשובה. הוכחתי כמה דברים וחשבתי שאוכל להוסיף זאת מאוחר יותר:

  • נוצר testfile - ההרשאות שלך להראות את זה הוא setwid ו הפעלה.
  • ניסיתי להגדיר אותו על נקודת הר עם nosuid: עדיין פועל
  • ניסיתי להגדיר אותו על נקודת הר עם noexec: נותן שגיאה אחרת

אז, לפי כל החשבונות, אני עדיין מבולבל. רק עבור grins ועל הסיכוי הוא זה פגז הקשורים פגז, אתה יכול לנסות את זה עם פגז שונה?


0
2018-04-12 02:10





אני מנחש שלתסריט שלך אין קליפה חוקית אחרי # !. לדוגמה, על כמה מערכות SCO מבוגר, סקריפטים עם #! / Bin / bash לא עובד כי bash באמת גר / usr / bin / bash. מטומטם, אבל היי SCO כמעט מת מסיבה, לא?

בדוק פגז שלך ולוודא שזה נקודות אמיתי בינארי / סקריפט.

עריכה: זה לא אומר אם זה סקריפט או בינארי, אבל בהנחה שלך 'ls-l' פלט נכון, אז אתה כנראה אין לי סקריפט 93kbyte ... אז זה כנראה בינארי משמעות התשובה שלי היא לגמרי שגוי.

האם ניסית להיכנס ולצאת בחזרה? אני יודע אם אני משתמש בינארי זה ב / usr / bin ואז להתקין / usr / local / bin הגירסה מהמקור, המערכת עדיין מנסה לבצע את אחד המקורי עד שאני יוצא וחוזר פנימה.


0
2018-04-12 12:51



זה היה קובץ הפעלה ולא כתב (ראה מידע ELF מקובץ בשאלה). כן, התנתקתי ונכנסתי. - Peeter Joot


הניחושים שלי:

  • היה לך שם כינוי mycommand. לדוגמה:

    alias mycommand=something
    
  • היה לך שם בשם mycommand. לדוגמה:

    mycommand() { something; }
    

בפעם הבאה שיש לך בעיה זו, נסה לפעול command -V mycommand לראות איזה פיקוד הוא מאמין mycommand J


0
2018-04-17 19:15



אף אחד מאלה לא היה המקרה של פקודה זו. - Peeter Joot


אין תשובה, רק חבורה של מחשבות:

  1. בדוק אם שם הקובץ מכיל רווח לבן; זה מקבל התעלם בשקט בעת שימוש בכרטיסייה השלמת ולהשתמש כפרמטר.
  2. נסה סקריפט / תוכנית אחרת בספריה.
  3. נסה לחזק את הקליפה מנסה לבצע את התסריט ולראות איפה זה שובר.

0
2018-04-12 14:09





היתה לי אותה בעיה בדיוק, ולא מצאתי תשובה כי הבעיה של הפוסטר המקורי נפתרה. אבל זה לא עבד בשבילי, ואני סוף סוף הצליח לעקוב אחר הבעיה למטה. אז אני מוסיף את הדברים הבאים כתשובה להודעה המקורית.

הסימפטומים שפגשתי היו הבאים. יש סקריפט (myscript.pl) ב / שלי / הביתה ספרייה. עכשיו מנסה להפעיל את זה:

> /my/home/myscript.pl
myscript.pl:  permission denied.

אישור מאומת מהקובץ (דגל ביצוע מוגדר). מאומת $ PATH (אם כי לא אמורה להיות בעיה).

אז אני מנסה (לאחר אימות דגל ההפעלה מוגדר על התסריט):

> cd /my/home/
> ./myscript.pl:  permission denied.

המממ ... אז אולי את התסריט אינו קורא את שפת scripting הנכון (Perl, במקרה זה). בראש הסקריפט יש את הקסם הנכון:

#!/usr/bin/perl

ואכן / usr / bin / perl קיים ועובד. אז השיחה הבאה פועלת כראוי.

/usr/bin/perl myscript.pl

לשונית אוטומטית לא תציג את הקובץ (לא tcsh ולא ב bash).

זה באמת זרק אותי. ואז נזכרתי כי לפני כמה חודשים הדיסק הקשיח שלי התרסק, ואת מנהל המערכת הצעירה במעבדה שלי מחדש את המערכת. חשבתי שאולי יש לדפוק את ההרשאות על המחיצות. ואכן, ב /etc/fstab, ההרשאה exec היה חסר!

/dev/sda1    /my     /ext4      rw,user

במקום

/dev/sda1    /my     /ext4      rw,user,exec

תוקן על ידי שינוי /etc/fstab ואת remounting:

mount -v -o remount /my

זה פתר את הבעיה לחלוטין. הניחוש שלי הוא דבר דומה אולי קרה עם הבעיה של הפוסטר המקורי, אלא שיש שם בעיית ההרשאה הייתה לסירוגין (למשל, היה שינוי זמני זה היה יכול להיפתר עם אתחול מחדש, אם התקיים).


0
2018-06-13 12:56