วิธีที่จะเป็นวิซาร์ดบรรทัดคำสั่ง

ชั้นเรียนวิทยาการคอมพิวเตอร์ที่มีประโยชน์ที่สุดที่คุณไม่เคยเรียนมาก่อน

ภาพที่สร้างขึ้นด้วย การแพร่กระจายที่เสถียร

Oสิ่งหนึ่งที่ฉันสังเกตมาโดยตลอดตลอดอาชีพการงานของฉันก็คือ นักวิทยาศาสตร์และวิศวกรข้อมูลที่มีประสิทธิผลมากที่สุด มักจะมีสิ่งหนึ่งที่เหมือนกัน นั่นคือ วิซาร์ดบรรทัดคำสั่ง- พวกเขาสามารถนำทางระบบไฟล์ของคอมพิวเตอร์ ค้นหารูปแบบในไฟล์บันทึก และจัดการงาน ซอร์สโค้ด และการควบคุมเวอร์ชันทั้งหมดได้จากบรรทัดคำสั่ง โดยไม่ต้องอาศัยการนำทางที่ช้าด้วยเมาส์และอินเทอร์เฟซผู้ใช้แบบกราฟิก

อย่างไรก็ตาม 'เวทมนตร์' ของบรรทัดคำสั่งนี้ ซึ่งดูเหมือนว่าคนที่ไม่คุ้นเคยกับเครื่องมือเชลล์อาจดูเหมือนไม่ได้เป็นส่วนหนึ่งของหลักสูตรวิทยาการคอมพิวเตอร์มาตรฐาน หนึ่ง หลักสูตร MIT เกี่ยวกับการเรียนรู้บรรทัดคำสั่งของคุณมีชื่อเหมาะเจาะ “ภาคการศึกษาที่ขาดหายไปของการศึกษา CS ของคุณ"

โพสต์นี้เป็นคลาส 'command-line Wizardry 10' ส่วนตัวของฉัน 101 บทเรียน มุ่งเป้าไปที่ผู้อ่านที่ต้องการทำงานกับบรรทัดคำสั่งมากขึ้น และใช้งานอินเทอร์เฟซผู้ใช้แบบกราฟิกน้อยลง เราจะครอบคลุมพื้นฐานเกี่ยวกับเชลล์และตัวแปรเส้นทาง นามแฝง การอนุญาตไฟล์ การสตรีมและการไพพ์ การจัดการงานที่มีประสิทธิภาพ tmux, ssh, git และ vim

มาเริ่มกันเลย. ยินดีต้อนรับสู่ CLW101

1. เปลือก

เมื่อคุณเปิดเทอร์มินัล คุณกำลังดูที่ เปลือกเช่น bash (บอร์นอีกครั้งเชลล์) หรือ ZSH (z-shell) เชลล์เป็นภาษาการเขียนโปรแกรมที่สมบูรณ์พร้อมการเข้าถึงโปรแกรมมาตรฐานบางโปรแกรมที่ช่วยให้สามารถนำทางระบบไฟล์และจัดการข้อมูลได้ คุณสามารถค้นหาเชลล์ที่คุณใช้งานอยู่ได้โดยพิมพ์:

ก้อง $ SHELL

ใน bash แต่ละครั้งที่คุณเริ่มเชลล์ใหม่ เชลล์จะโหลดลำดับของคำสั่งที่ระบุไว้ภายใน .bashrc ซึ่งโดยทั่วไปจะอยู่ในโฮมไดเร็กตอรี่ของคุณ (หากคุณใช้ Mac โดยปกติจะมีไฟล์ .bash_profile ไฟล์แทน) ในไฟล์นั้น คุณสามารถระบุสิ่งที่มีประโยชน์ได้ เช่น ตัวแปรพาธหรือนามแฝงของคุณ (มีรายละเอียดเพิ่มเติมด้านล่าง)

2. ตัวแปรเส้นทาง

เมื่อคุณพิมพ์ชื่อของบางโปรแกรมลงในเชลล์ของคุณ เช่น python, cat,หรือ lsเชลล์รู้ได้อย่างไรว่าไปเอาโปรแกรมนั้นมาจากไหน? นั่นคือจุดประสงค์ของการ ตัวแปรเส้นทาง- ตัวแปรนี้จัดเก็บรายการเส้นทางทั้งหมดที่เชลล์ค้นหาโปรแกรม โดยคั่นด้วยเครื่องหมายทวิภาค คุณสามารถตรวจสอบตัวแปรพาธของคุณได้โดยพิมพ์:

เสียงสะท้อน $PATH

และคุณสามารถเพิ่มไดเร็กทอรีเพิ่มเติมให้กับตัวแปรพา ธ ของคุณด้วยคำสั่งนี้:

ส่งออก PATH = "my_new_path: $ PATH"

วิธีที่ดีที่สุดคือเพิ่มคำสั่งนี้ลงในไฟล์ bashrc เพื่อให้ไดเร็กทอรีเพิ่มเติมของคุณอยู่ในเส้นทางของคุณเสมอเมื่อคุณเริ่มเชลล์ใหม่

3. นามแฝง

นามแฝง เป็นคำสั่งแบบกำหนดเองที่คุณสามารถกำหนดได้เพื่อหลีกเลี่ยงการพิมพ์คำสั่งที่ยาวซ้ำแล้วซ้ำอีก เช่น:

นามแฝง ll = "ls -lah"
นามแฝง gs = "สถานะ git"
นามแฝง gp = git push origin master"

นามแฝงยังใช้เพื่อสร้างการป้องกันสำหรับขั้นตอนการพัฒนาของคุณได้ เช่น โดยการกำหนด

นามแฝง mv = "mv -i"

เทอร์มินัลของคุณจะเตือนคุณหากไฟล์ที่คุณกำลังจะย้ายมีอยู่แล้วในไดเร็กทอรีใหม่ เพื่อที่คุณจะได้ไม่เขียนทับไฟล์ที่คุณไม่ได้ตั้งใจจะเขียนทับโดยไม่ได้ตั้งใจ

เมื่อคุณเพิ่มนามแฝงเหล่านี้ลงในไฟล์ bashrc แล้ว นามแฝงเหล่านี้จะพร้อมใช้งานเสมอเมื่อคุณเริ่มเชลล์ใหม่

4. การอนุญาตไฟล์และ sudo

เมื่อผู้ใช้หลายรายแชร์เครื่องกัน สิ่งสำคัญคือต้องตั้งค่า สิทธิ์ของไฟล์ ที่กำหนดว่าผู้ใช้รายใดสามารถดำเนินการใดกับข้อมูลใดได้ เมื่อคุณพิมพ์ ls -lคุณจะเห็นไฟล์ในไดเรกทอรีปัจจุบันของคุณพร้อมกับสิทธิ์ในรูปแบบต่อไปนี้:

-rwxrwxrwx

ที่นี่

  • rwx ย่อมาจากสิทธิ์ในการอ่าน เขียน และดำเนินการตามลำดับ
  • และอำนาจลึกลับ rwx การบล็อกมีไว้สำหรับ (1) ผู้ใช้ (2) กลุ่มผู้ใช้ และ (3) คนอื่นๆ ในตัวอย่างที่กำหนด ทั้ง 3 เอนทิตีเหล่านี้มีสิทธิ์ในการอ่าน เขียน และดำเนินการ
  • เส้นประแสดงว่านี่คือไฟล์ แทนที่จะเป็นเส้นประ คุณยังสามารถเห็นก d สำหรับไดเร็กทอรีหรือ l สำหรับลิงค์สัญลักษณ์

คุณสามารถแก้ไขการอนุญาตไฟล์ด้วย chmod- เช่น ถ้าอยากให้ไฟล์ปฏิบัติการได้ด้วยตัวเอง ก็ให้พิมพ์

chmod u+x my_program.py

👉 หากไฟล์สามารถเรียกใช้งานได้ เชลล์จะรู้วิธีเรียกใช้งานได้อย่างไร? ซึ่งระบุด้วย 'hashbang' ในแถวแรกของไฟล์ เช่น #!/bin/bash สำหรับสคริปต์ทุบตีหรือ #!/bin/python สำหรับสคริปต์หลาม

สุดท้ายนี้ มี 'ผู้ใช้ขั้นสูง' พิเศษที่มีสิทธิ์ทั้งหมดสำหรับไฟล์ทั้งหมด คุณสามารถเรียกใช้คำสั่งใดก็ได้ตามที่ผู้ใช้ขั้นสูงเขียน sudo ต่อหน้าคำสั่งนั้น คุณยังสามารถเปิด sudo shell แบบสแตนด์อโลนได้ด้วยการเรียกใช้งาน

ของ su sudo

⚠️ใช้ sudo ด้วยความระมัดระวัง ด้วย sudo คุณสามารถเปลี่ยนแปลงโค้ดที่ควบคุมฮาร์ดแวร์ของคอมพิวเตอร์ของคุณได้ และข้อผิดพลาดอาจทำให้เครื่องของคุณใช้งานไม่ได้ โปรดจำไว้ว่า พลังที่ยิ่งใหญ่มาพร้อมกับความรับผิดชอบที่ยิ่งใหญ่

5. การสตรีมและการวางท่อ

พื้นที่ ที่พริ้ว ผู้ประกอบการ > เปลี่ยนเส้นทางเอาต์พุตจากโปรแกรมไปยังไฟล์ >> ทำสิ่งเดียวกัน แต่จะต่อท้ายไฟล์ที่มีอยู่แทนที่จะเขียนทับหากมีอยู่แล้ว สิ่งนี้มีประโยชน์สำหรับการบันทึกโปรแกรมของคุณเองเช่นนี้:

หลาม my_program.py > ไฟล์บันทึก

แนวคิดที่มีประโยชน์อีกประการหนึ่งคือ การเป่า: x | y รันโปรแกรม x และกำหนดทิศทางเอาต์พุตจาก x ไปยังโปรแกรม y ตัวอย่างเช่น:

  • cat log.txt | tail -n5 : พิมพ์ 5 บรรทัดสุดท้ายจาก log.txt
  • cat log.txt | head -n5 : พิมพ์ 5 บรรทัดแรกจาก log.txt
  • cat -b log.txt | grep error : แสดงบรรทัดทั้งหมดใน log.txt ที่มีสตริง 'error' พร้อมด้วยหมายเลขบรรทัด (-b)

6. บริหารจัดการงาน

หากคุณรันโปรแกรมจากบรรทัดคำสั่งของคุณ (เช่น python run.py) โดยค่าเริ่มต้นโปรแกรมจะทำงานใน เบื้องหน้าและป้องกันไม่ให้คุณทำอะไรอีกจนกว่าโปรแกรมจะเสร็จสิ้น ในขณะที่โปรแกรมกำลังทำงานอยู่เบื้องหน้า คุณสามารถ:

  • พิมพ์ control+C ซึ่งจะส่งสัญญาณ SIGINT (สัญญาณขัดจังหวะ) ไปยังโปรแกรม โดยสั่งให้เครื่องขัดจังหวะโปรแกรมทันที (เว้นแต่โปรแกรมมีวิธีจัดการสัญญาณเหล่านี้ภายใน)
  • พิมพ์ control+Z ซึ่งจะหยุดโปรแกรมชั่วคราว หลังจากหยุดโปรแกรมชั่วคราวแล้วสามารถดำเนินการต่อได้โดยนำโปรแกรมไปไว้เบื้องหน้า (fg) หรือโดยการส่งไปที่พื้นหลัง (bg).

เพื่อเริ่มคำสั่งของคุณในเบื้องหลังทันที คุณใช้ & โอเปอเรเตอร์:

หลาม run.py &

👉 คุณจะรู้ได้อย่างไรว่าขณะนี้โปรแกรมใดกำลังทำงานอยู่ในพื้นหลัง? ใช้คำสั่ง jobs- ซึ่งจะแสดงชื่อของงานที่กำลังทำงานอยู่ตลอดจนรหัสกระบวนการ (PID)

สุดท้ายkill เป็นโปรแกรมส่งสัญญาณไปยังโปรแกรมที่ทำงานอยู่เบื้องหลัง ตัวอย่างเช่น,

  • kill -STOP %1 ส่งสัญญาณ STOP หยุดโปรแกรมชั่วคราว 1
  • kill -KILL %1 ส่งสัญญาณ KILL ยุติโปรแกรม 1 อย่างถาวร
บานหน้าต่างเทอร์มินัลสี่บานบนเทอร์มินัล Macbook ส่วนตัวของฉันพร้อม tmux (ภาพโดยผู้เขียน)

7. tmux

tmux ('เทอร์มินัลมัลติเพล็กเซอร์') ช่วยให้คุณสร้างเทอร์มินัลใหม่และนำทางระหว่างเทอร์มินัลเหล่านั้นได้อย่างง่ายดาย สิ่งนี้มีประโยชน์อย่างยิ่ง ตัวอย่างเช่น คุณสามารถใช้เทอร์มินัลหนึ่งเพื่อนำทางระบบไฟล์ของคุณ และเทอร์มินัลอื่นเพื่อดำเนินงาน ด้วย tmux คุณสามารถมีทั้งสองสิ่งนี้เคียงข้างกันได้

👉 อีกเหตุผลหนึ่งในการเรียนรู้ tmux คือการพัฒนาระยะไกล: เมื่อคุณออกจากระบบจากเครื่องระยะไกล (ไม่ว่าจะโดยตั้งใจหรือไม่ตั้งใจก็ตาม) โปรแกรมทั้งหมดที่ทำงานอยู่ในเชลล์ของคุณจะถูกยกเลิกโดยอัตโนมัติ ในทางกลับกัน หากคุณรันโปรแกรมภายในเชลล์ tmux คุณสามารถถอดหน้าต่าง tmux ออกจากระบบ ปิดคอมพิวเตอร์ของคุณ และกลับมาที่เชลล์นั้นในภายหลังราวกับว่าคุณไม่เคยออกจากระบบมาก่อน

ต่อไปนี้เป็นคำสั่งพื้นฐานบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งาน tmux:

  • tmux new -s run สร้างเซสชันเทอร์มินัลใหม่ด้วยชื่อ 'run'
  • control-BD: ถอดหน้าต่างนี้ออก
  • tmux a : แนบไปกับหน้าต่างล่าสุด
  • tmux a -t run : แนบไปกับหน้าต่างที่เรียกว่า 'run'
  • control-B“ : เพิ่มบานหน้าต่างเทอร์มินัลอื่นด้านล่าง
  • control-B% : เพิ่มบานหน้าต่างเทอร์มินัลอื่นทางด้านขวา
  • control-B➡️ : เลื่อนไปที่บานหน้าต่างเทอร์มินัลไปทางขวา (คล้ายกับซ้าย, ขึ้น, ลง)

8. SSH และคู่คีย์

ssh เป็นโปรแกรมสำหรับล็อกอินเข้าสู่เครื่องระยะไกล ในการเข้าสู่ระบบเครื่องระยะไกล คุณจะต้องระบุชื่อผู้ใช้และรหัสผ่าน หรือใช้คู่คีย์ที่ประกอบด้วยคีย์สาธารณะ (ซึ่งทั้งสองเครื่องสามารถเข้าถึงได้) และคีย์ส่วนตัว (ซึ่งมีเฉพาะในเครื่องของคุณเองเท่านั้น) สามารถเข้าถึงได้)

ssh-keygen เป็นโปรแกรมสำหรับสร้างคู่คีย์ดังกล่าว ถ้าคุณวิ่ง ssh-keygenโดยค่าเริ่มต้นจะสร้างคีย์สาธารณะชื่อ id_rsa.pub และคีย์ส่วนตัวชื่อ id_rsaและวางทั้งคู่ลงในของคุณ ~/.ssh ไดเรกทอรี คุณจะต้องเพิ่มกุญแจสาธารณะให้กับเครื่องระยะไกล ซึ่งอย่างที่คุณควรทราบในตอนนี้ คุณสามารถทำได้โดยการไพพ์ร่วมกัน cat, sshและตัวดำเนินการสตรีมมิ่ง:

แมว .ssh/id_rsa.pub | ผู้ใช้ ssh@remote 'cat >> ~/.ssh/authorized_keys'

ตอนนี้คุณสามารถใช้ ssh ในระยะไกลได้เพียงแค่ระบุรหัสส่วนตัวของคุณ:

ssh ระยะไกล -i ~/.ssh/id_rsa

แนวทางปฏิบัติที่ดียิ่งขึ้นคือการสร้างไฟล์ ~/.ssh/config ซึ่งมีการกำหนดค่าการตรวจสอบสิทธิ์ ssh ทั้งหมดของคุณ ตัวอย่างเช่นหากคุณ config ไฟล์มีดังนี้:

ผู้พัฒนาโฮสต์
ชื่อโฮสต์ระยะไกล
ไฟล์ข้อมูลประจำตัว ~/.ssh/id_rsa

จากนั้นคุณสามารถเข้าสู่ระบบระยะไกลได้โดยเพียงแค่พิมพ์ ssh dev.

9. คอมไพล์

git คือระบบควบคุมเวอร์ชันที่ช่วยให้คุณสามารถนำทางประวัติเวอร์ชันและสาขาของโค้ดจากบรรทัดคำสั่งได้อย่างมีประสิทธิภาพ

👉หมายเหตุ git ไม่เหมือนกับ GitHub: git เป็นโปรแกรมแบบสแตนด์อโลนที่สามารถจัดการเวอร์ชันของโค้ดบนแล็ปท็อปในพื้นที่ของคุณ ในขณะที่ GitHub เป็นที่สำหรับโฮสต์โค้ดของคุณจากระยะไกล

ต่อไปนี้เป็นคำสั่ง git ที่จำเป็น:

  • git add : ระบุไฟล์ที่คุณต้องการรวมไว้ในการส่งครั้งถัดไป
  • git commit -m 'my commit message' : กระทำการเปลี่ยนแปลงรหัส
  • git checkout -b dev : สร้างสาขาใหม่ชื่อ 'dev' และตรวจสอบสาขานั้น
  • git merge dev : รวม dev เข้ากับสาขาปัจจุบัน หากสิ่งนี้สร้างข้อขัดแย้งในการผสาน คุณจะต้องแก้ไขข้อขัดแย้งเหล่านี้ด้วยตนเอง จากนั้นจึงดำเนินการ git add file_that_changed; git merge --continue
  • git stash : คืนค่าการเปลี่ยนแปลงทั้งหมด และ git stash pop นำพวกเขากลับมา สิ่งนี้มีประโยชน์หากคุณทำการเปลี่ยนแปลงกับสาขาหลัก แล้วตัดสินใจว่าคุณต้องการให้การเปลี่ยนแปลงเหล่านั้นเป็นสาขาแยกต่างหากจริงๆ
  • git reset --hard : คืนค่าการเปลี่ยนแปลงทั้งหมดอย่างถาวร

และนี่คือคำสั่ง git ที่จำเป็นสำหรับการจัดการกับโฮสต์ระยะไกล (เช่น GitHub):

  • git clone : โคลนสำเนาของรหัส repo ไปยังเครื่องของคุณ
  • git push origin master : ผลักดันการเปลี่ยนแปลงไปยังโฮสต์ระยะไกล (เช่น GitHub)
  • git pull : ดึงเวอร์ชันล่าสุดจากระยะไกล (นี่ก็วิ่งเหมือนกัน. git fetch; git merge;).

👉 ก่อนจะสามารถรันคำสั่งได้ เช่น git push origin masterคุณจะต้องตรวจสอบสิทธิ์ด้วยคู่กุญแจ ssh (ดูบทที่ 8) หากคุณใช้ GitHub คุณสามารถวางรหัสสาธารณะไว้ใต้การตั้งค่าโปรไฟล์ของคุณได้

10. กลุ่ม

Vim เป็นโปรแกรมแก้ไขข้อความที่ใช้บรรทัดคำสั่งที่ทรงพลัง เป็นความคิดที่ดีที่จะเรียนรู้คำสั่งพื้นฐานอย่างน้อยในกลุ่ม:

  • บางครั้งคุณอาจต้องลงชื่อเข้าใช้เครื่องระยะไกลและทำการเปลี่ยนแปลงรหัสที่นั่น vim เป็นโปรแกรมมาตรฐานและมักจะใช้งานได้กับทุกเครื่องที่คุณใช้งาน
  • เมื่อวิ่ง git commitโดยค่าเริ่มต้น git จะเปิด vim เพื่อเขียนข้อความคอมมิต อย่างน้อยที่สุดคุณก็จะต้องการทราบวิธีการเขียน บันทึก และปิดไฟล์

สิ่งที่สำคัญที่สุดที่ต้องเข้าใจเกี่ยวกับ vim คือมีโหมดการทำงานที่แตกต่างกัน เมื่อคุณเปิดตัว vim คุณจะอยู่ข้างใน โหมดการนำทางซึ่งคุณใช้เพื่อนำทางผ่านไฟล์ พิมพ์ i ที่จะเริ่มต้น โหมดแก้ไขซึ่งคุณสามารถเปลี่ยนแปลงไฟล์ได้ พิมพ์ Esc ปุ่มเพื่อออกจากโหมดแก้ไขและกลับไปที่โหมดการนำทาง

สิ่งที่มีประโยชน์เกี่ยวกับโหมดการนำทางคือ คุณสามารถนำทางและจัดการไฟล์ด้วยแป้นพิมพ์ได้อย่างรวดเร็ว ตัวอย่างเช่น:

  • x ลบอักขระ
  • dd ลบทั้งแถว
  • b (ย้อนกลับ) ไปที่คำก่อนหน้า n (ถัดไป) ไปที่คำถัดไป
  • :wq บันทึกการเปลี่ยนแปลงของคุณและปิดไฟล์
  • :q! ละเว้นการเปลี่ยนแปลงของคุณและปิดไฟล์

หากต้องการดูแป้นพิมพ์ลัด vim เพิ่มเติม (อีกมากมาย!) โปรดดู สูตรโกงเป็นกลุ่มนี้.

ภาพถ่ายโดย วาซิลี โคโลดา on Unsplash

ความคิดสุดท้าย

ยินดีด้วย คุณทำ 'command line Wizardry 101' สำเร็จแล้ว อย่างไรก็ตาม เราเพิ่งจะขูดพื้นผิวตรงนี้เท่านั้น เพื่อเป็นแรงบันดาลใจ ให้พิจารณาปัญหาต่อไปนี้:

“กำหนดไฟล์ข้อความและจำนวนเต็ม kพิมพ์ไฟล์ kคำที่พบบ่อยที่สุดในไฟล์ (และจำนวนครั้งที่เกิดขึ้น) ในความถี่ที่ลดลง”

ในฐานะนักวิทยาศาสตร์ข้อมูล แรงกระตุ้นแรกของฉันอาจเป็นการเปิดตัวโน้ตบุ๊ก jupyter โหลดข้อมูลลงในแพนด้า จากนั้นใช้ฟังก์ชัน เช่น แพนด้า agg- อย่างไรก็ตาม สำหรับวิซาร์ดบรรทัดคำสั่งที่ช่ำชอง นี่คือหนึ่งซับ:

tr -cs A-Za-z '' | tr AZ az | เรียงลำดับ | ยูนิค -c | เรียงลำดับ -rn | sed ${1}q

นี่ไม่ได้ดูแตกต่างไปจากจินตนาการของ Stable Diffusion ที่แสดงในตอนต้นของบทความนี้มากนัก เวทมนตร์จริงๆ

วิธีที่จะเป็นตัวช่วยสร้างบรรทัดคำสั่ง เผยแพร่ซ้ำจากแหล่งที่มา https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rss—-7f60cf5620c9—4 ผ่าน https://towardsdatascience คอม/ฟีด

<!–

->

ประทับเวลา:

เพิ่มเติมจาก ที่ปรึกษาบล็อคเชน