NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
HE

פקודות לינוקס ומיומנויות מעטפת

sed: עריכת זרמים מבלי לפתוח עורך

עריכות של sed לרוחב: זרמים שלמים של טקסט עוברים דרכו, יוצאים עם טרנספורמציה, ואף עורך לא נפתח. המוניטין שלו מגיע מ-i, שהופך החלפה בשורה אחת לפעולת אצווה על פני אלפי קבצים, ומסיפורי האסונות של מנהלים שהריצו אותו ללא סיומת גיבוי. זרימת העבודה הבטוחה לעולם אינה משתנה: הפעל את ההחלפה גלויה, אשר את הפלט, ולאחר מכן הוסף -i עם סיומת ושמור את קוד היציאה.

נקודות עיקריות

  1. תצוגה מקדימה לפני שאתה מתחייב: קובץ sed -n '10,20p' מציג טווח שורות, ואותו שילוב של -n פלוס p מדפיס רק שורות התואמות לביטוי רגולרי או כתובת.
  2. החלף בדגלים שעושים את מה שאתה מתכוון: s/old/new/g עבור כל ההתאמות, מספר כמו 2g רק עבור השני, ו-E עבור ביטוי רגולרי מורחב ללא עמוד של escapes לאחור.
  3. עריכות במקום מקבלות סיומת, ללא יוצאים מן הכלל: אפליקציית sed -i.bak 's/http://https:/g' שומרת גיבוי בעל שם זהה לצד כל שינוי; הסיומת הזו הצילה יותר פריסות מאשר היסטוריית הביטול של כל עורך.
  4. תווי הפרדה בחינם: s|/var/www|/srv/app|g (או s#...#g) נמנע מקרבות בריחה מלוחות כשהתבנית שלך מלאה בנתיבים.
  5. -i אינו אטומי: התרסקות או רעקס פגום באמצע אצווה השאירו מאחור קבצים שנכתבו למחצה, כך שעבודות בכמות גדולה פועלות נגד עותקים או עצים במעקב אחר git, אף פעם לא העותק היחיד.
  6. GNU ו-BSD sed לא מסכימים לגבי -i: BSD דורש את הסיומת לפני הסקריפט (sed -i '' עובד על macOS, אינו תחביר של לינוקס), וזו סיבה נוספת לכך שסקריפטי ניידות נמנעים לחלוטין מ-i.
  7. מחק ובודד הם פעלים כנים: 'd' מסיר שורות תואמות (עם '/^#/d' רצועות הערות), ו-n עם טווח מבודד קטע; שניהם קוראים טוב יותר מאשר תחליפים חכמים.
  8. כל דבר שעבר עריכות בשורה אחת, בלוקים מילוליים מרובי שורות, או צירוף מצבים שייך ל-awk או לסקריפט אמיתי; לאלץ את sed לעשות עבודת מתכנת היא הדרך שבה נולדים one-liners בלתי קריאים.

הערת שטח

sed-i הראשון שלי ללא סיומת .bak פגע בתצורת nginx ייצור ממש לפני שיא התנועה של אחר הצהריים. מאז כל עריכה במקום נושאת סיומת גיבוי, ואני קורא את פלט הריצה היבשה עוד לפני שה-i מתקרב לפקודה.

שאלות נפוצות

כיצד אוכל לערוך רק שורות שמתאימות למשהו אחר?

התייחסו אליהם: sed '/cache/s/true/false/' מתהפך נכון ל-false רק בשורות מטמון, וטווחים כמו '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' עריכות לבלוקים; הכתובת קודמת, הפקודה שנייה.

מדוע sed לא יתאים לקצוות השורות בקובץ ערוך ב-Windows?

שורות אלה מסתיימות בתווים להחזרת כרכרה שהעוגנים '$' לא מצפים להם; הסר אותם עם tr תחילה או נרמל בדרך פנימה, ותוכן מרובה שורות עדיין שייך ל-awk או לפרל עם -0777.

האם sed מהיר יותר מ-awk עבור תחליפים פשוטים?

באופן שולי ולא רלוונטי; שניהם מסתיימים באלפיות שניות בקבצים בגודל תצורה. בחר לפי קריאות, כי עמית צריך לבטל את ה-one liner שלך תוך שישה חודשים.

האם אני יכול להוסיף בלוקי תצורה שלמים עם sed?

כן: 'a' מוסיף אחרי, 'i' מוסיף לפני, ו-'c' מחליף את השורה, אבל שמור על הטקסט שהוכנס פשוט וחד-תכליתי; בלוקים אמיתיים שייכים לקובץ תבנית או לשלב הקצאה תקין.

איך Kinetikatech מסייעת לך ב-פקודות לינוקס ומיומנויות מעטפת

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

דבר עם מהנדס

צריך עזרה בניהול שרתים?

צוות המומחים שלנו זמין 24/7 - זמן תגובה 30 דקות.

קבל עזרה support@kinetikatech.com