ชั้นเรียนวิทยาการคอมพิวเตอร์ที่มีประโยชน์ที่สุดที่คุณไม่เคยเรียนมาก่อน
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.txtcat log.txt | head -n5
: พิมพ์ 5 บรรทัดแรกจาก log.txtcat -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 หยุดโปรแกรมชั่วคราว 1kill -KILL %1
ส่งสัญญาณ KILL ยุติโปรแกรม 1 อย่างถาวร
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 เพิ่มเติม (อีกมากมาย!) โปรดดู สูตรโกงเป็นกลุ่มนี้.
ความคิดสุดท้าย
ยินดีด้วย คุณทำ '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 คอม/ฟีด
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- การปฏิบัติตามบล็อคเชน
- การประชุม blockchain
- ที่ปรึกษาบล็อคเชน
- coinbase
- เหรียญอัจฉริยะ
- เอกฉันท์
- การประชุม crypto
- การทำเหมือง crypto
- cryptocurrency
- ซึ่งกระจายอำนาจ
- Defi
- สินทรัพย์ดิจิทัล
- ethereum
- เรียนรู้เครื่อง
- โทเค็นที่ไม่สามารถทำซ้ำได้
- เพลโต
- เพลโตไอ
- เพลโตดาต้าอินเทลลิเจนซ์
- Platoblockchain
- เพลโตดาต้า
- เพลโตเกม
- รูปหลายเหลี่ยม
- หลักฐานการเดิมพัน
- W3
- ลมทะเล