כיצד להשתמש בפקודה הראשונית ב - Linux

ראשית הוא ההורה של כל התהליכים. תפקידו העיקרי הוא ליצור תהליכים מתוך סקריפט המאוחסן בקובץ / etc / inittab (ראה inittab (5)). קובץ זה בדרך כלל יש ערכים אשר לגרום init להשריץ sty s על כל שורה כי משתמשים יכולים להיכנס. היא גם שולטת תהליכים אוטונומיים הנדרשים על ידי מערכת מסוימת.

Runlevels

Runlevel הוא תצורת תוכנה של המערכת המאפשרת רק קבוצה נבחרת של תהליכים להתקיים. התהליכים שנולדו על ידי init עבור כל אלה runlevels מוגדרים בקובץ / etc / inittab . ראשוני יכול להיות באחד runlevels שמונה: 0-6 ו- S או s . Runlevel הוא שונה על ידי בעל משתמש מועדף להפעיל telinit , אשר שולח אותות מתאימים כדי init , אומר את זה runlevel כדי לשנות.

Runlevels 0 , 1 , ו 6 שמורות. Runlevel 0 משמש כדי לעצור את המערכת, runlevel 6 משמש אתחול מחדש של המערכת, ו runlevel 1 משמש כדי להעביר את המערכת למצב משתמש יחיד. Runlevel S לא נועד באמת לשמש ישירות, אבל יותר עבור סקריפטים כי הם להורג בעת הזנת runlevel 1. לקבלת מידע נוסף על זה, לראות את manpages עבור כיבוי (8) ו inittab (5).

Runlevels 7-9 תקפים גם, אם כי לא ממש מתועד. הסיבה לכך היא שגורמי יוניקס "מסורתיים" אינם משתמשים בהם. במקרה אתה סקרן, runlevels S ו S הם למעשה אותו הדבר. פנימי הם כינויים עבור runlevel אותו.

אתחול

לאחר הפעלת init כצעד האחרון של רצף האתחול של הליבה, הוא מחפש את הקובץ / etc / inittab כדי לראות אם קיים ערך מסוג initdefault (ראה inittab (5)). ערך initdefault קובע את מערכת ההפעלה הראשונית של המערכת. אם אין ערך כזה (או לא / etc / inittab בכלל), יש להפעיל את runlevel במסוף המערכת.

Runlevel S או S להביא את המערכת למצב משתמש יחיד ואינם דורשים / etc / קובץ inittab . במצב משתמש יחיד, פגז שורש נפתח על / dev / מסוף .

בעת כניסה למצב משתמש בודד, init קורא את ioctl של הקונסולה (2) ממצב /etc/ioctl.save . אם קובץ זה אינו קיים, init מאתחל את השורה ב 9600 baud ועם הגדרות CLOCAL . כאשר init משאיר מצב משתמש בודד, הוא מאחסן את הגדרות ioctl של הקונסולה בקובץ זה, כך שהוא יוכל להשתמש בהן מחדש עבור ההפעלה הבאה של משתמש יחיד.

בעת כניסה למצב מרובה משתמשים בפעם הראשונה, init מבצע את ערכי האתחול והאתחול כדי לאפשר התקנת מערכות קבצים לפני שהמשתמשים יוכלו להיכנס. לאחר מכן, כל הערכים התואמים את runlevel מעובדים.

כאשר מתחילים תהליך חדש, init בודק תחילה אם הקובץ / etc / incriptcript קיים. אם כן, הוא משתמש בסקריפט זה כדי להתחיל את התהליך.

בכל פעם שהילד מסתיים, init מתעדת את העובדה ואת הסיבה שהיא מתה ב- / var / run / utmp ו / var / log / wtmp , בתנאי שקיימים קבצים אלה.

שינוי Runlevels

לאחר שהיא הולידה את כל התהליכים שצוינו, init מחכה שאחד מתהליכי הצאצא שלה ימות, אות Powerfail, או עד שיאותתו על ידי telinit כדי לשנות את הרצת המערכת. כאשר אחד משלושת התנאים לעיל מתרחשת, זה מחדש בוחן את / etc / קובץ inittab . ניתן להוסיף ערכים חדשים לקובץ זה בכל עת. עם זאת, init עדיין מחכה לאחד משלושת התנאים לעיל להתרחש. כדי לספק מענה מיידי, את q או telinit q פקודה יכול להתעורר init כדי לבחון מחדש את / etc / קובץ inittab .

אם init אינו במצב משתמש יחיד ומקבל אות Powerfail (SIGPWR), הוא קורא את הקובץ / etc / powerstatus . לאחר מכן הוא מפעיל פקודה המבוססת על התוכן של קובץ זה:

לְהִכָּשֵׁל)

הכוח נכשל, UPS מספקת את הכוח. הפעל את ערכי Powerwait ו- Powerfail .

בסדר)

הכוח שוחזר, לבצע את ערכי Powerokwait .

נָמוּך)

הכוח נכשל ו- UPS יש סוללה חלשה. הפעל את ערכי Powerfailnow .

אם / etc / powerstatus אינו קיים או מכיל שום דבר אחר אז האותיות F , O או L , init יתנהג כאילו קרא את האות F.

השימוש של SIGPWR ו / etc / powerstatus הוא discouraged. מי שרוצה אינטראקציה עם init צריך להשתמש / dev / initctl ערוץ שליטה - לראות את קוד המקור של חבילת sysvinit לתיעוד נוסף על זה.

כאשר init נדרש לשנות את runlevel, הוא שולח את אות אזהרה SIGTERM לכל התהליכים שאינם מוגדרים runlevel חדש. לאחר מכן הוא ממתין 5 שניות לפני סיום בכוח תהליכים אלה באמצעות אות SIGKILL . שים לב ש- init מניחה שכל התהליכים הללו (וצאצאיהם) נשארים באותה קבוצת תהליכים, שיוצרה במקור עבורם. אם תהליך כלשהו משנה את שיוך קבוצת התהליך שלו, הוא לא יקבל אותות אלה. תהליכים אלה צריכים להיות מופסקת בנפרד.

Telinit

/ sbin / telinit מקושר / sbin / init . זה לוקח ארגומנט אחד תווים אותות init כדי לבצע את הפעולה המתאימה. הטיעונים הבאים משמשים הנחיות לטליניט :

0 , 1 , 2 , 3 , 4 , 5 או 6

לספר init כדי לעבור לרמת ההפעלה שצוין.

a , b , c

לספר init לעבד רק את אלה / etc / inittab ערכי קובץ נתקל runlevel, b או c .

Q או q

לספר init לבחון מחדש את / etc / קובץ inittab .

S או s

לספר init כדי לעבור למצב משתמש יחיד.

U או u

לספר לחדש לבצע את עצמו (שמירה על המדינה). לא בדיקה מחדש של / etc / קובץ inittab קורה. רמת הפעלה צריך להיות אחד Ss12345 , אחרת הבקשה תתעלם בשקט.

Telinit יכול גם לספר לינץ כמה זמן זה צריך לחכות בין שליחת התהליכים אותות SIGTERM ו SIGKILL. ברירת המחדל היא 5 שניות, אך ניתן לשנות זאת באמצעות האפשרות -t sec .

telinit יכול להיות מופעל רק על ידי משתמשים עם הרשאות מתאימות.

הבינארי init בודק אם הוא init או telinit על ידי עיון במזהה התהליך שלה; מזהה התהליך האמיתי של init הוא תמיד 1 . מכאן נובע כי במקום להתקשר telinit אפשר גם פשוט להשתמש init במקום קיצור.