รู้ว่าคุณมีเครื่องมืออะไร
คุณจะไม่มีทางรู้ทุกสิ่งล่วงหน้า แต่คุณสามารถรู้ว่าคุณต้องทำงานกับอะไร ยิ่งคุณรู้เครื่องมือมากเท่าใดคุณก็ยิ่งสามารถใช้งานได้มากขึ้นเท่านั้น หากคุณรู้ว่าเครื่องมือคืออะไรสิ่งที่ทำและตำแหน่งที่จะหาข้อมูลเพิ่มเติมเกี่ยวกับมันแสดงว่าเริ่มต้นได้ดีพอ
ทำความคุ้นเคยกับman
หน้าต่างๆ คุณไม่ต้องจดจำพวกเขา แต่คุณควรรู้ว่าจะหาสิ่งที่คุณกำลังมองหา man
หน้าเว็บดีกว่า Google ในการค้นหารายละเอียดไวยากรณ์เนื่องจากหน้าเว็บที่ติดตั้งบนระบบที่กำหนดนั้นสะท้อนถึงนิสัยใจคอหรือข้อมูลเฉพาะรุ่นที่สอดคล้องกับระบบที่คุณกำลังดู
ถ้าคุณใช้apache
มากฉันขอแนะนำให้เรียนรู้ไวยากรณ์การกำหนดค่า apache หากคุณใช้nginx
แทนเรียนรู้สิ่งนั้นแทน แต่อย่างใดคุณควรรู้ว่าทั้งคู่ต่างกันอย่างไรและต่างกันอย่างไร
เครื่องมือระบบ
มีเครื่องมือบางอย่างที่จะช่วยคุณไม่ว่าระบบดูแลระบบแบบไหนที่คุณกำลังทำอยู่ สมมติว่าคุณรู้พื้นฐานเช่นchmod
และmount
อื่น ๆ ต่อไปนี้เป็นเครื่องมือที่มีประโยชน์มากบางอย่างที่ผู้ดูแลระบบบางคนไม่เข้าใจดีพอ:
- rsync
- sar / iostat (ส่วนหนึ่งของแพ็คเกจ sysstat)
- setfacl / getfacl (ผู้ดูแลระบบส่วนใหญ่คิดว่า chmod / chown เป็นสิ่งที่คุณต้องทำงานด้วย)
- ขดและ / หรือ wget
- iptables
- ใคร / ครั้งสุดท้าย / w
บรรทัดคำสั่ง Ninja
ฉันว่าความเข้าใจที่ดีเกี่ยวกับ shell scripting นั้นเป็นสิ่งมหัศจรรย์ที่ทำให้สิ่งที่ยากทำได้ง่ายและรวดเร็ว หากคุณต้องค้นหาไวยากรณ์คุณจะไม่มีโอกาสเลยดังนั้นการรู้ล่วงหน้าเป็นเรื่องสำคัญ
ตัวอย่างเช่นสมมติว่าคุณมีไดเรกทอรีที่เต็มไปด้วยmysqldump
ไฟล์ ".sql" แต่ละไฟล์แสดงถึงฐานข้อมูลที่จำเป็นต้องนำเข้าสู่เซิร์ฟเวอร์ คุณนำเข้าทั้งหมด 35 รายการด้วยตนเองหรือไม่ หากคุณมีความคุ้นเคยกับการใช้สคริปต์เชลล์อย่างรวดเร็วมันง่ายมากที่จะพิมพ์คำสั่งเพียงคำเดียวแล้วหยิบกาแฟ:
หมายเหตุ: ฉันแบ่งมันเป็นเส้นแยกเพื่อให้อ่านง่าย หากคุณเว้นเครื่องหมายอัฒภาคไว้คุณสามารถใส่ทุกอย่างไว้ในบรรทัดเดียว มิฉะนั้นไม่จำเป็นต้องใช้เครื่องหมายอัฒภาคในตอนท้ายของแต่ละบรรทัด
for FILE in *.sql; do
NAME=${FILE%.sql};
mysql -e "create database $NAME";
mysql $NAME < $FILE;
done
sed
นอกจากนี้ผมขอแนะนำให้การแปรงขึ้นเกี่ยวกับการใช้ คิดว่ามันเป็นวิธีในการใช้การแสดงออกปกติทุกที่ http://www.grymoire.com/Unix/Sed.html
สมมติว่าคุณเปลี่ยนหมายเลขโทรศัพท์และจำเป็นต้องอัปเดตหน้าเว็บทั้งหมดของคุณตามนั้น (และบันทึกสำเนาสำรองในกรณีที่คุณเลอะ)
sed -i.bak 's/555-1234/555-4321/' *.html
การรู้วิธีการเชื่อมโยงเครื่องมือที่มีอยู่อย่างถูกต้องเพื่อทำสิ่งใหม่ ๆ จะมีประโยชน์เช่นกัน สมมติว่าคุณต้องทำเช่นเดียวกับข้างต้น แต่ยังค้นหาในไดเรกทอรีย่อยด้วย -
find public_html -name '*.html' -print0 | xargs -0 sed -i.bak 's/555-1234/555-4321/'
perl
นอกจากนี้ยังเป็นประโยชน์ที่จะมีบางคนที่มีประสบการณ์ คุณอาจไม่จำเป็นต้องเขียนโปรแกรมที่จริงจังกับมัน แต่มันถูกออกแบบมาเพื่อทำสิ่งต่าง ๆ มากมายที่ทำsed
และawk
อาจมีความยืดหยุ่นเพียงเล็กน้อยเท่านั้น
Perl สามารถใช้ในการทำมายากลบรรทัดคำสั่งโดยใช้-e
ตัวเลือก การใช้กับ-p
, -n
และ-i
, คุณสามารถเขียนตัวกรองอย่างง่าย ๆ เพื่อทำสิ่งที่มีประโยชน์จริงๆ ตัวอย่างเช่นสมมติว่าคุณต้องค้นหาที่อยู่ IP ของทุกคนที่เข้าถึง "/admin.php" ในเดือนกันยายน:
perl -ne '
/([^ ]+).*\[..\/Sep\/2010.*\] "GET \/admin.php / and print "$1\n"' < access_log
ดู? นั่นไม่เลวเลย ในฐานะผู้ดูแลระบบคุณคาดว่าจะรู้วิธีการทำสิ่งนี้