- čeština∙ Deutsch ∙εληνικά∙español∙français∙อินโดนีเซีย∙ italiano ∙∙∙繁體中文∙∙∙∙∙∙∙∙∙∙
หมายเหตุ: ฉันวางแผนที่จะแก้ไขสิ่งนี้และมองหาผู้เขียนร่วมใหม่เพื่อช่วยในการขยายสิ่งนี้เป็นคู่มือที่ครอบคลุมมากขึ้น ในขณะที่มันเป็นที่นิยมมากมันอาจจะกว้างขึ้นและลึกกว่าเล็กน้อย หากคุณต้องการเขียนและใกล้เคียงกับการเป็นผู้เชี่ยวชาญเกี่ยวกับเนื้อหานี้และยินดีที่จะพิจารณาความช่วยเหลือโปรดส่งข้อความถึงฉันที่ Josh (0x40) Holloway.com –Jlevy, Holloway ขอบคุณ!

ความคล่องแคล่วในบรรทัดคำสั่งเป็นทักษะที่มักจะถูกทอดทิ้งหรือถือว่าเป็น arcane แต่ช่วยเพิ่มความยืดหยุ่นและผลผลิตของคุณในฐานะวิศวกรในทั้งสองวิธีที่ชัดเจนและละเอียดอ่อน นี่คือการเลือกโน้ตและเคล็ดลับในการใช้บรรทัดคำสั่งที่เราพบว่ามีประโยชน์เมื่อทำงานกับ Linux เคล็ดลับบางอย่างเป็นระดับประถมศึกษาและบางอย่างมีความเฉพาะเจาะจงค่อนข้างซับซ้อนหรือคลุมเครือ หน้านี้ไม่นาน แต่ถ้าคุณสามารถใช้และเรียกคืนรายการทั้งหมดที่นี่คุณรู้มาก
งานนี้เป็นผลมาจากผู้เขียนและนักแปลหลายคน บางส่วนของสิ่งนี้ปรากฏขึ้นบน Quora แต่ตั้งแต่นั้นมาก็ย้ายไปที่ GitHub ซึ่งผู้คนมีความสามารถมากกว่าผู้เขียนดั้งเดิมได้ทำการปรับปรุงมากมาย โปรดส่งคำถาม หากคุณมีคำถามที่เกี่ยวข้องกับบรรทัดคำสั่ง โปรดมีส่วนร่วม หากคุณเห็นข้อผิดพลาดหรือสิ่งที่ดีกว่า!
ขอบเขต:
หมายเหตุ:
apt , yum , dnf , pacman , pip หรือ brew (ตามความเหมาะสม) เพื่อติดตั้งโปรแกรมใหม่ เรียนรู้ทุบตีขั้นพื้นฐาน ที่จริงแล้ว man bash และอย่างน้อยก็อ่านทุกอย่าง; มันค่อนข้างง่ายที่จะติดตามและไม่นาน เปลือกสำรองอาจเป็นสิ่งที่ดี แต่ทุบตีนั้นทรงพลังและพร้อมใช้งานเสมอ (เรียนรู้ เพียง ZSH, ปลา ฯลฯ ในขณะที่การล่อลวงแล็ปท็อปของคุณเอง จำกัด คุณในหลาย ๆ สถานการณ์เช่นการใช้เซิร์ฟเวอร์ที่มีอยู่)
เรียนรู้อย่างน้อยหนึ่งตัวแก้ไขข้อความที่ดี Editor nano เป็นหนึ่งในสิ่งที่ง่ายที่สุดสำหรับการแก้ไขขั้นพื้นฐาน (การเปิด, แก้ไข, บันทึก, การค้นหา) อย่างไรก็ตามสำหรับผู้ใช้พลังงานในเทอร์มินัลข้อความไม่มีการทดแทนสำหรับ VIM ( vi ), ตัวแก้ไขที่ยากต่อการเรียนรู้ แต่น่าเคารพ, เร็วและเต็มรูปแบบ หลายคนใช้ Emacs คลาสสิกโดยเฉพาะอย่างยิ่งสำหรับงานแก้ไขที่ใหญ่ขึ้น (แน่นอนว่านักพัฒนาซอฟต์แวร์ที่ทันสมัยที่ทำงานในโครงการที่กว้างขวางนั้นไม่น่าจะใช้เพียงตัวแก้ไขที่ใช้ข้อความบริสุทธิ์และควรคุ้นเคยกับ IDE และเครื่องมือกราฟิกที่ทันสมัย)
การค้นหาเอกสาร:
man (สำหรับผู้อยากรู้อยากเห็น man man จะแสดงหมายเลขส่วนเช่น 1 คือคำสั่ง "ปกติ" 5 คือไฟล์/การประชุมและ 8 คือการบริหาร) ค้นหาหน้าผู้ชายด้วย aproposhelp และ help -d คุณสามารถค้นหาได้ว่าคำสั่งเป็นงานที่สามารถเรียกใช้งานได้เชลล์ในตัวหรือนามแฝงโดยใช้ type commandcurl cheat.sh/command จะให้ "แผ่นโกง" สั้น ๆ พร้อมตัวอย่างทั่วไปของวิธีการใช้คำสั่งเชลล์ เรียนรู้เกี่ยวกับการเปลี่ยนเส้นทางของเอาต์พุตและอินพุตโดยใช้ > และ < และท่อโดยใช้ | - รู้ > เขียนทับไฟล์เอาต์พุตและ >> ต่อท้าย เรียนรู้เกี่ยวกับ Stdout และ Stderr
เรียนรู้เกี่ยวกับการขยายไฟล์ลูกโลกด้วย * (และอาจจะ ? และ [ ... ] ) และการอ้างถึงและความแตกต่างระหว่างคำพูดสองเท่า " และเดี่ยว ' (ดูเพิ่มเติมเกี่ยวกับการขยายตัวของตัวแปรด้านล่าง)
ทำความคุ้นเคยกับการจัดการงาน Bash: & , Ctrl-Z , Ctrl-C , jobs , fg , bg , kill ฯลฯ
รู้ ssh และพื้นฐานของการรับรองความถูกต้องด้วยรหัสผ่านผ่าน ssh-agent , ssh-add ฯลฯ
การจัดการไฟล์พื้นฐาน: ls และ ls -l (โดยเฉพาะอย่างยิ่งเรียนรู้ว่าทุกคอลัมน์ใน ls -l หมายถึงอะไร), less , head , tail และ tail -f (หรือดีกว่า, chown less +F du -hs * , ln chmod du ln -s (เรียนรู้ความแตกต่างและข้อดีของการเชื่อมโยงที่นุ่มนวล สำหรับการจัดการระบบไฟล์, df , mount , fdisk , mkfs , lsblk เรียนรู้ว่า inode คืออะไร ( ls -i หรือ df -i )
การจัดการเครือข่ายพื้นฐาน: ip หรือ ifconfig , dig , traceroute , route
เรียนรู้และใช้ระบบการจัดการควบคุมเวอร์ชันเช่น git
รู้การแสดงออกปกติและธงต่าง ๆ เพื่อ grep / egrep ตัวเลือก -i , -o , -v , -A , -B และ -C มีค่าควรทราบ
เรียนรู้ที่จะใช้ apt-get , yum , dnf หรือ pacman (ขึ้นอยู่กับ Distro) เพื่อค้นหาและติดตั้งแพ็คเกจ และตรวจสอบให้แน่ใจว่าคุณมี pip ในการติดตั้งเครื่องมือบรรทัดคำสั่งที่ใช้ Python (ด้านล่างสองสามข้อนั้นง่ายที่สุดในการติดตั้งผ่าน pip )
ใน BASH ใช้ แท็บ เพื่อทำอาร์กิวเมนต์ให้สมบูรณ์หรือแสดงรายการคำสั่งที่มีอยู่ทั้งหมดและ CTRL-R เพื่อค้นหาผ่านประวัติคำสั่ง (หลังจากกดให้พิมพ์เพื่อค้นหากด CTRL-R ซ้ำ ๆ เพื่อหมุนเวียนผ่านการจับคู่มากขึ้นกด Enter เพื่อเรียกใช้คำสั่งที่พบหรือกดลูกศรขวาเพื่อวางผลลัพธ์ในบรรทัดปัจจุบันเพื่ออนุญาตการแก้ไข)
ใน Bash ให้ใช้ CTRL-W เพื่อลบคำสุดท้ายและ CTRL-U เพื่อลบเนื้อหาออกจากเคอร์เซอร์ปัจจุบันกลับไปที่จุดเริ่มต้นของบรรทัด ใช้ ALT-B และ ALT-F เพื่อเคลื่อนที่ตามคำศัพท์ CTRL-A เพื่อย้ายเคอร์เซอร์ไปยังจุดเริ่มต้นของบรรทัด CTRL-E เพื่อย้ายเคอร์เซอร์ไปยังจุดสิ้นสุดของบรรทัด CTRL-K เพื่อฆ่าไปยังจุดสิ้นสุดของบรรทัด CTRL-L เพื่อล้างหน้าจอ ดู man readline สำหรับ keybindings เริ่มต้นทั้งหมดใน Bash มีจำนวนมาก ตัวอย่างเช่น alt-. รอบการโต้แย้งก่อนหน้านี้และ alt- * ขยาย Glob
อีกทางเลือกหนึ่งถ้าคุณรักคีย์ -คีย์สไตล์ Vi ให้ใช้ set -o vi (และ set -o emacs เพื่อนำกลับมา)
สำหรับการแก้ไขคำสั่งยาวหลังจากตั้งค่าตัวแก้ไขของคุณ (ตัวอย่างเช่น export EDITOR=vim ), CTRL-X CTRL-E จะเปิดคำสั่งปัจจุบันในตัวแก้ไขสำหรับการแก้ไขแบบหลายบรรทัด หรือในสไตล์ VI, Escape-V
หากต้องการดูคำสั่งล่าสุดให้ใช้ history ติดตามด้วย !n (โดยที่ n คือหมายเลขคำสั่ง) เพื่อดำเนินการอีกครั้ง นอกจากนี้ยังมีตัวย่อมากมายที่คุณสามารถใช้งานได้สิ่งที่มีประโยชน์มากที่สุดอาจเป็น !$ สำหรับอาร์กิวเมนต์สุดท้ายและ !! สำหรับคำสั่งสุดท้าย (ดู "การขยายประวัติ" ในหน้ามนุษย์) อย่างไรก็ตามสิ่งเหล่านี้มักจะถูกแทนที่ด้วย CTRL-R และ ALT- -
ไปที่ไดเรกทอรีบ้านของคุณด้วย cd เข้าถึงไฟล์ที่เกี่ยวข้องกับไดเรกทอรีโฮมเมดของคุณด้วยคำนำหน้า ~ (เช่น ~/.bashrc ) ในสคริปต์ sh อ้างถึงโฮมไดเร็กตอรี่เป็น $HOME
เพื่อกลับไปที่ไดเรกทอรีการทำงานก่อนหน้านี้: cd -
หากคุณครึ่งทางผ่านการพิมพ์คำสั่ง แต่เปลี่ยนใจให้กด alt- # เพื่อเพิ่ม # ที่จุดเริ่มต้นและป้อนเป็นความคิดเห็น (หรือใช้ Ctrl-A , # , Enter ) จากนั้นคุณสามารถกลับไปที่มันในภายหลังผ่านประวัติคำสั่ง
ใช้ xargs (หรือ parallel ) มันทรงพลังมาก หมายเหตุคุณสามารถควบคุมจำนวนรายการที่ดำเนินการต่อบรรทัด ( -L ) เช่นเดียวกับ Parallelism ( -P ) หากคุณไม่แน่ใจว่ามันจะทำสิ่งที่ถูกต้องให้ใช้ xargs echo ก่อน นอกจากนี้ -I{} ก็มีประโยชน์ ตัวอย่าง:
find . -name ' *.py ' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname pstree -p เป็นการแสดงผลที่เป็นประโยชน์ของแผนผังกระบวนการ
ใช้ pgrep และ pkill เพื่อค้นหาหรือกระบวนการส่งสัญญาณตามชื่อ ( -f มีประโยชน์)
รู้สัญญาณต่าง ๆ ที่คุณสามารถส่งกระบวนการ ตัวอย่างเช่นในการระงับกระบวนการให้ใช้ kill -STOP [pid] สำหรับรายการทั้งหมดให้ดู man 7 signal
ใช้ nohup หรือ disown หากคุณต้องการกระบวนการพื้นหลังที่จะทำงานตลอดไป
ตรวจสอบกระบวนการใดที่กำลังฟังผ่าน netstat -lntp หรือ ss -plat (สำหรับ tcp; add -u สำหรับ udp) หรือ lsof -iTCP -sTCP:LISTEN -P -n (ซึ่งทำงานบน macOS)
ดูเพิ่มเติมที่ lsof และ fuser สำหรับซ็อกเก็ตและไฟล์แบบเปิด
ดู uptime หรือ w เพื่อทราบว่าระบบทำงานนานแค่ไหน
ใช้ alias เพื่อสร้างทางลัดสำหรับคำสั่งที่ใช้กันทั่วไป ตัวอย่างเช่น alias ll='ls -latr' สร้างนามแฝงใหม่ ll
บันทึกนามแฝงการตั้งค่าเชลล์และฟังก์ชั่นที่คุณใช้ใน ~/.bashrc และจัดเรียงเชลล์เข้าสู่ระบบเพื่อจัดหามัน สิ่งนี้จะทำให้การตั้งค่าของคุณพร้อมใช้งานในเซสชันเชลล์ทั้งหมดของคุณ
ใส่การตั้งค่าตัวแปรสภาพแวดล้อมเช่นเดียวกับคำสั่งที่ควรดำเนินการเมื่อคุณเข้าสู่ระบบใน ~/.bash_profile การกำหนดค่าแยกต่างหากจะต้องใช้สำหรับเชลล์ที่คุณเปิดตัวจากการเข้าสู่ระบบสภาพแวดล้อมแบบกราฟิกและงาน cron
ซิงโครไนซ์ไฟล์การกำหนดค่าของคุณ (เช่น .bashrc และ .bash_profile ) ในคอมพิวเตอร์หลายเครื่องที่มี GIT
เข้าใจว่าจำเป็นต้องมีการดูแลเมื่อตัวแปรและชื่อไฟล์รวมถึงช่องว่าง ล้อมรอบตัวแปรทุบตีของคุณด้วยเครื่องหมายคำพูดเช่น "$FOO" ชอบตัวเลือก -0 หรือ -print0 เพื่อเปิดใช้งานอักขระ null เพื่อกำหนดชื่อไฟล์เช่น locate -0 pattern | xargs -0 ls -al หรือ find / -print0 -type d | xargs -0 ls -al หากต้องการทำซ้ำในชื่อไฟล์ที่มีช่องว่างใน A for loop ให้ตั้งค่า IFS ของคุณให้เป็นสายใหม่โดยใช้ IFS=$'n' เท่านั้น
ในสคริปต์ Bash ใช้ set -x (หรือ set -v ซึ่งบันทึกอินพุตดิบรวมถึงตัวแปรที่ไม่ได้รับการกล่าวขานและความคิดเห็น) สำหรับการดีบักเอาต์พุต ใช้โหมดที่เข้มงวดเว้นแต่คุณจะมีเหตุผลที่ดีที่จะไม่: ใช้ set -e เพื่อยกเลิกข้อผิดพลาด (รหัสออกที่ไม่ใช่ศูนย์) ใช้ set -u เพื่อตรวจจับการใช้งานตัวแปร UNSET พิจารณา set -o pipefail ด้วยเพื่อยกเลิกข้อผิดพลาดภายในท่อ (แม้ว่าจะอ่านเพิ่มเติมถ้าคุณทำเพราะหัวข้อนี้ค่อนข้างบอบบาง) สำหรับสคริปต์ที่เกี่ยวข้องมากขึ้นให้ใช้กับ trap บนทางออกหรือ ERR นิสัยที่มีประโยชน์คือการเริ่มต้นสคริปต์เช่นนี้ซึ่งจะทำให้ตรวจจับและยกเลิกข้อผิดพลาดทั่วไปและพิมพ์ข้อความ:
set -euo pipefail
trap " echo 'error: Script failed: see failed command above' " ERR # do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir ในการทุบตีโปรดทราบว่ามีการขยายตัวของตัวแปรมากมาย การตรวจสอบตัวแปรมีอยู่: ${name:?error message} ตัวอย่างเช่นหากสคริปต์ทุบตีต้องการอาร์กิวเมนต์เดียวเพียงแค่เขียน input_file=${1:?usage: $0 input_file} การใช้ค่าเริ่มต้นหากตัวแปรว่างเปล่า: ${name:-default} หากคุณต้องการเพิ่มพารามิเตอร์เพิ่มเติม (เป็นทางเลือก) ในตัวอย่างก่อนหน้าคุณสามารถใช้บางอย่างเช่น output_file=${2:-logfile} หากถูกละเว้น $2 และว่างเปล่า output_file จะถูกตั้งค่าเป็น logfile การขยายตัวทางคณิตศาสตร์: i=$(( (i + 1) % 5 )) ลำดับ: {1..10} การตัดแต่งของสตริง: ${var%suffix} และ ${var#prefix} ตัวอย่างเช่นถ้า var=foo.pdf ดังนั้น echo ${var%.pdf}.txt พิมพ์ foo.txt
การขยายตัวรั้งโดยใช้ { ... } สามารถลดการต้องใช้ข้อความที่คล้ายกันอีกครั้งและรวมรายการโดยอัตโนมัติของรายการ สิ่งนี้มีประโยชน์ในตัวอย่างเช่น mv foo.{txt,pdf} some-dir (ซึ่งย้ายทั้งสองไฟล์), cp somefile{,.bak} (ซึ่งขยายไปยัง cp somefile somefile.bak ) หรือ mkdir -p test-{a,b,c}/subtest-{1,2,3} การขยายตัวรั้งจะดำเนินการก่อนการขยายตัวอื่น ๆ
ลำดับของการขยายคือ: การขยายตัวของรั้ง; การขยายตัวของ Tilde, พารามิเตอร์และการขยายตัวของตัวแปร, การขยายตัวทางคณิตศาสตร์และการทดแทนคำสั่ง (ทำในรูปแบบซ้ายไปขวา); การแยกคำ; และการขยายชื่อไฟล์ (ตัวอย่างเช่นช่วงเช่น {1..20} ไม่สามารถแสดงด้วยตัวแปรโดยใช้ {$a..$b} ใช้ seq หรือ a for ลูปแทนเช่น seq $a $b หรือ for((i=a; i<=b; i++)); do ... ; done
เอาต์พุตของคำสั่งสามารถปฏิบัติเหมือนไฟล์ผ่าน <(some command) (เรียกว่าการทดแทนกระบวนการ) ตัวอย่างเช่นเปรียบเทียบ Local /etc/hosts กับรีโมทอันหนึ่ง:
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
ใน Bash เปลี่ยนเส้นทางทั้งเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานผ่าน: some-command >logfile 2>&1 หรือ some-command &>logfile บ่อยครั้งเพื่อให้แน่ใจว่าคำสั่งจะไม่ปล่อยให้ที่จับไฟล์เปิดไปยังอินพุตมาตรฐานโดยผูกไว้กับเทอร์มินัลที่คุณอยู่นอกจากนี้ยังเป็นแนวปฏิบัติที่ดีในการเพิ่ม </dev/null
ใช้ man ascii สำหรับตาราง ASCII ที่ดีโดยมีฐานสิบหกและค่าทศนิยม สำหรับข้อมูลการเข้ารหัสทั่วไป man unicode , man utf-8 และ man latin1 มีประโยชน์
ใช้ screen หรือ tmux เพื่อมัลติเพล็กซ์หน้าจอโดยเฉพาะอย่างยิ่งมีประโยชน์ในการประชุม SSH ระยะไกลและแยกและเชื่อมต่อกับเซสชันอีกครั้ง byobu สามารถปรับปรุงหน้าจอหรือ TMUX โดยการให้ข้อมูลเพิ่มเติมและการจัดการที่ง่ายขึ้น ทางเลือกที่น้อยที่สุดสำหรับการคงอยู่ของเซสชันเท่านั้นคือ dtach
ใน SSH การรู้วิธีพอร์ตอุโมงค์ด้วย -L หรือ -D (และบางครั้ง -R ) มีประโยชน์เช่นการเข้าถึงเว็บไซต์จากเซิร์ฟเวอร์ระยะไกล
มันจะเป็นประโยชน์ในการปรับแต่งการกำหนดค่า SSH ของคุณ ตัวอย่างเช่น ~/.ssh/config นี้มีการตั้งค่าเพื่อหลีกเลี่ยงการเชื่อมต่อที่ลดลงในสภาพแวดล้อมเครือข่ายบางอย่างใช้การบีบอัด (ซึ่งเป็นประโยชน์กับ SCP ผ่านการเชื่อมต่อแบนด์วิดท์ต่ำ) และช่องสัญญาณมัลติเพล็กซ์ไปยังเซิร์ฟเวอร์เดียวกันกับไฟล์ควบคุมท้องถิ่น:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
ตัวเลือกอื่น ๆ ที่เกี่ยวข้องกับ SSH StrictHostKeyChecking=no มีความไวต่อความปลอดภัยและควรเปิดใช้งานด้วยความระมัดระวังเช่นต่อ ForwardAgent=yes ข่ายย่อยหรือโฮสต์หรือในเครือข่ายที่เชื่อถือ
พิจารณา mosh ทางเลือกสำหรับ SSH ที่ใช้ UDP หลีกเลี่ยงการเชื่อมต่อที่ลดลงและเพิ่มความสะดวกสบายบนถนน (ต้องการการตั้งค่าฝั่งเซิร์ฟเวอร์)
เพื่อให้ได้รับสิทธิ์ในไฟล์ในรูปแบบแปดเท่าซึ่งมีประโยชน์สำหรับการกำหนดค่าระบบ แต่ไม่สามารถใช้ได้ใน ls และง่ายต่อการใช้งานให้ใช้บางอย่างเช่น
stat -c ' %A %a %n ' /etc/timezone สำหรับการเลือกค่าแบบโต้ตอบจากเอาต์พุตของคำสั่งอื่นใช้ percol หรือ fzf
สำหรับการโต้ตอบกับไฟล์ตามเอาต์พุตของคำสั่งอื่น (เช่น git ) ให้ใช้ fpp (pathpicker)
สำหรับเว็บเซิร์ฟเวอร์ที่เรียบง่ายสำหรับไฟล์ทั้งหมดในไดเรกทอรีปัจจุบัน (และ subdirs) ที่มีให้สำหรับทุกคนในเครือข่ายของคุณใช้: python -m SimpleHTTPServer 7777 (สำหรับพอร์ต 7777 และ Python 2) และ python -m http.server 7777 (สำหรับพอร์ต 7777 และ Python 3)
สำหรับการเรียกใช้คำสั่งเป็นผู้ใช้รายอื่นให้ใช้ sudo ค่าเริ่มต้นในการรันเป็นรูท ใช้ -u เพื่อระบุผู้ใช้รายอื่น ใช้ -i เพื่อเข้าสู่ระบบเป็นผู้ใช้นั้น (คุณจะถูกขอรหัสผ่าน ของคุณ )
สำหรับการสลับเชลล์เป็นผู้ใช้รายอื่นให้ใช้ su username หรือ su - username หลังด้วย "-" ได้รับสภาพแวดล้อมราวกับว่าผู้ใช้รายอื่นเพิ่งเข้าสู่ระบบโดยไม่ต้องใช้ชื่อผู้ใช้ค่าเริ่มต้นเป็นรูท คุณจะถูกขอรหัสผ่าน ของผู้ใช้ที่คุณกำลังเปลี่ยนไป
รู้เกี่ยวกับขีด จำกัด 128K ในบรรทัดคำสั่ง ข้อผิดพลาด "รายการอาร์กิวเมนต์ยาวเกินไป" นี้เป็นเรื่องปกติเมื่อไวลด์การ์ดจับคู่ไฟล์จำนวนมาก (เมื่อสิ่งนี้เกิดขึ้นทางเลือกเช่น find และ xargs อาจช่วยได้)
สำหรับเครื่องคิดเลขพื้นฐาน (และแน่นอนว่าการเข้าถึง Python โดยทั่วไป) ให้ใช้ล่าม python ตัวอย่างเช่น,
>>> 2+3
5
หากต้องการค้นหาไฟล์ตามชื่อในไดเรกทอรีปัจจุบัน find . -iname '*something*' (หรือคล้ายกัน) หากต้องการค้นหาไฟล์ได้ทุกที่ตามชื่อให้ใช้ locate something (แต่จำไว้ว่า updatedb อาจไม่ได้จัดทำดัชนีไฟล์ที่สร้างขึ้นเมื่อเร็ว ๆ นี้)
สำหรับการค้นหาทั่วไปผ่านแหล่งข้อมูลหรือไฟล์ข้อมูลมีหลายตัวเลือกขั้นสูงหรือเร็วกว่า grep -r รวมถึง (ตามลำดับคร่าวๆจากรุ่นเก่ากว่าใหม่) ack , ag ("The Silver Searcher") และ rg (RIPGREP)
ในการแปลง HTML เป็นข้อความ: lynx -dump -stdin
สำหรับ Markdown, HTML และการแปลงเอกสารทุกชนิดลอง pandoc ตัวอย่างเช่นในการแปลงเอกสาร Markdown เป็นรูปแบบ Word: pandoc README.md --from markdown --to docx -o temp.docx
หากคุณต้องจัดการกับ XML xmlstarlet นั้นเก่า แต่ก็ดี
สำหรับ JSON ใช้ jq สำหรับการใช้งานแบบโต้ตอบดู jid และ jiq
สำหรับ Yaml ใช้ shyaml
สำหรับไฟล์ Excel หรือ CSV, CSVKIT มี in2csv , csvcut , csvjoin , csvgrep ฯลฯ
สำหรับ Amazon S3, s3cmd นั้นสะดวกและ s4cmd เร็วกว่า aws ของ Amazon และ saws ที่ได้รับการปรับปรุงนั้นจำเป็นสำหรับงานอื่น ๆ ที่เกี่ยวข้องกับ AWS
รู้เกี่ยวกับ sort และ uniq รวมถึงตัวเลือก -u และ -d ของ Uniq -ดูหนึ่งตอร์ปิโดด้านล่าง ดู comm ด้วย
รู้เกี่ยวกับ cut paste และ join เพื่อจัดการไฟล์ข้อความ หลายคนใช้ cut แต่ลืมเกี่ยวกับ join
รู้เกี่ยวกับ wc เพื่อนับ newLines ( -l ), อักขระ ( -m ), คำ ( -w ) และไบต์ ( -c )
รู้เกี่ยวกับ tee เพื่อคัดลอกจาก stdin ไปยังไฟล์และยัง stdout เช่นเดียวกับใน ls -al | tee file.txt
สำหรับการคำนวณที่ซับซ้อนมากขึ้นรวมถึงการจัดกลุ่มฟิลด์ย้อนกลับและการคำนวณทางสถิติให้พิจารณา datamash
รู้ว่าสถานที่มีผลกระทบต่อเครื่องมือบรรทัดคำสั่งจำนวนมากในรูปแบบที่ลึกซึ้งรวมถึงลำดับการเรียงลำดับ (การเปรียบเทียบ) และประสิทธิภาพ การติดตั้ง Linux ส่วนใหญ่จะตั้งค่า LANG หรือตัวแปรอื่น ๆ ในการตั้งค่าท้องถิ่นเช่น US English แต่โปรดทราบว่าการเรียงลำดับจะเปลี่ยนไปหากคุณเปลี่ยนสถานที่ และรู้ว่ารูทีน I18N สามารถจัดเรียงหรือคำสั่งอื่น ๆ ทำงานช้าลง หลายครั้ง ในบางสถานการณ์ (เช่นการดำเนินการที่ตั้งไว้หรือการดำเนินการที่เป็นเอกลักษณ์ด้านล่าง) คุณสามารถเพิกเฉยต่อกิจวัตร I18N ที่ช้าทั้งหมดและใช้ลำดับการเรียงลำดับแบบไบต์แบบดั้งเดิมโดยใช้ export LC_ALL=C
คุณสามารถตั้งค่าสภาพแวดล้อมของคำสั่งเฉพาะได้โดยนำหน้าการเรียกใช้การตั้งค่าตัวแปรสภาพแวดล้อมเช่นใน TZ=Pacific/Fiji date
รู้ awk และ sed พื้นฐานสำหรับการปูนข้อมูลอย่างง่าย ดูตัวอย่างหนึ่งตอร์ปิโด
หากต้องการแทนที่สตริงที่เกิดขึ้นทั้งหมดในหนึ่งไฟล์ขึ้นไป:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren (ในบางกรณีคำสั่ง rename ยังอนุญาตให้เปลี่ยนชื่อได้หลายครั้ง แต่ต้องระวังเนื่องจากฟังก์ชั่นของมันไม่เหมือนกันในการแจกแจง Linux ทั้งหมด) # Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from ' (.*).bak ' --to ' 1 ' * .bak
# Same as above, using rename, if available:
rename ' s/.bak$// ' * .bakrsync เป็นเครื่องมือคัดลอกไฟล์ที่รวดเร็วและหลากหลายเป็นพิเศษ เป็นที่รู้จักกันดีในเรื่องการซิงโครไนซ์ระหว่างเครื่องจักร แต่มีประโยชน์อย่างเท่าเทียมกันในพื้นที่ เมื่อข้อ จำกัด ด้านความปลอดภัยอนุญาตให้ใช้ rsync แทน scp ช่วยให้สามารถกู้คืนการถ่ายโอนได้โดยไม่ต้องเริ่มต้นใหม่ตั้งแต่เริ่มต้น นอกจากนี้ยังเป็นหนึ่งในวิธีที่เร็วที่สุดในการลบไฟล์จำนวนมาก: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir สำหรับการตรวจสอบความคืบหน้าเมื่อประมวลผลไฟล์ให้ใช้ pv , pycp , pmonitor , progress , rsync --progress หรือสำหรับการคัดลอกระดับบล็อก dd status=progress
ใช้ shuf เพื่อสับเปลี่ยนหรือเลือกบรรทัดสุ่มจากไฟล์
รู้ตัวเลือกของ sort สำหรับตัวเลขใช้ -n หรือ -h สำหรับการจัดการหมายเลขที่มนุษย์อ่านได้ (เช่นจาก du -h ) รู้ว่าคีย์ทำงานอย่างไร ( -t และ -k ) โดยเฉพาะอย่างยิ่งระวังว่าคุณต้องเขียน -k1,1 เพื่อจัดเรียงตามฟิลด์แรกเท่านั้น -k1 หมายถึงเรียงลำดับตามสายทั้งหมด การเรียงลำดับที่มั่นคง ( sort -s ) มีประโยชน์ ตัวอย่างเช่นในการเรียงลำดับก่อนโดยฟิลด์ 2 จากนั้นสองโดยฟิลด์ 1 คุณสามารถใช้ sort -k1,1 | sort -s -k2,2
หากคุณจำเป็นต้องเขียนแท็บตัวอักษรในบรรทัดคำสั่งใน bash (เช่นสำหรับอาร์กิวเมนต์ -t เพื่อเรียงลำดับ) ให้กด Ctrl -V [tab] หรือเขียน $'t' (หลังดีกว่าที่คุณสามารถคัดลอก/วาง)
เครื่องมือมาตรฐานสำหรับการแก้ไขซอร์สซอร์สเป็น diff และ patch ดูเพิ่มเติมที่ diffstat สำหรับสถิติสรุปของ Diff และ sdiff สำหรับความแตกต่างแบบเคียงข้างกัน หมายเหตุ diff -r ทำงานสำหรับไดเรกทอรีทั้งหมด ใช้ diff -r tree1 tree2 | diffstat สำหรับบทสรุปของการเปลี่ยนแปลง ใช้ vimdiff เพื่อเปรียบเทียบและแก้ไขไฟล์
สำหรับไฟล์ไบนารีให้ใช้ hd , hexdump หรือ xxd สำหรับการถ่ายโอนข้อมูล hex อย่างง่ายและ bvi , hexedit หรือ biew สำหรับการแก้ไขแบบไบนารี
นอกจากนี้สำหรับไฟล์ไบนารี strings (รวมถึง grep ฯลฯ ) ช่วยให้คุณค้นหาบิตของข้อความ
สำหรับ diffs ไบนารี (การบีบอัดเดลต้า) ใช้ xdelta3
ในการแปลงการเข้ารหัสข้อความลองใช้ iconv หรือ uconv สำหรับการใช้งานขั้นสูงมากขึ้น รองรับสิ่ง Unicode ขั้นสูงบางอย่าง ตัวอย่างเช่น:
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x ' ::Any-Hex; ' < input.txt
uconv -f utf-8 -t utf-8 -x ' ::Any-Name; ' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x ' ::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt หากต้องการแยกไฟล์เป็นชิ้น ๆ ให้ดู split (แยกตามขนาด) และ csplit (เพื่อแยกด้วยรูปแบบ)
วันที่และเวลา: เพื่อให้ได้วันที่และเวลาปัจจุบันในรูปแบบ ISO 8601 ที่เป็นประโยชน์ให้ใช้ date -u +"%Y-%m-%dT%H:%M:%SZ" (ตัวเลือกอื่น ๆ เป็นปัญหา) หากต้องการจัดการกับการแสดงออกวันที่และเวลาให้ใช้ dateadd , datediff , strptime ฯลฯ จาก dateutils
ใช้ zless , zmore , zcat และ zgrep เพื่อทำงานกับไฟล์ที่ถูกบีบอัด
แอตทริบิวต์ไฟล์สามารถชำระได้ผ่าน chattr และเสนอทางเลือกระดับล่างสำหรับการอนุญาตไฟล์ ตัวอย่างเช่นเพื่อป้องกันการลบไฟล์ sudo chattr +i /critical/directory/or/file ไม่ตั้งใจธงที่ไม่เปลี่ยนรูป
ใช้ getfacl และ setfacl เพื่อบันทึกและกู้คืนสิทธิ์ไฟล์ ตัวอย่างเช่น:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (สร้างไฟล์กระจัดกระจาย), fallocate (ext4, xfs, btrfs และระบบไฟล์ OCFS2), xfs_mkfile (เกือบทุกระบบไฟล์มาในแพ็คเกจ XFSProgs), mkfile สำหรับการดีบักเว็บ, curl และ curl -I มีประโยชน์หรือเทียบเท่า wget ของพวกเขาหรือ httpie ที่ทันสมัยกว่า
หากต้องการทราบสถานะ CPU/ดิสก์ปัจจุบันเครื่องมือคลาสสิกอยู่ top (หรือ htop ที่ดีกว่า), iostat และ iotop ใช้ iostat -mxz 15 สำหรับ CPU พื้นฐานและรายละเอียดดิสก์ต่อพาร์ติชันสถิติและข้อมูลเชิงลึกด้านประสิทธิภาพ
สำหรับรายละเอียดการเชื่อมต่อเครือข่ายใช้ netstat และ ss
สำหรับภาพรวมอย่างรวดเร็วของสิ่งที่เกิดขึ้นในระบบ dstat มีประโยชน์อย่างยิ่ง สำหรับภาพรวมที่กว้างที่สุดพร้อมรายละเอียดใช้ glances
หากต้องการทราบสถานะหน่วยความจำให้เรียกใช้และทำความเข้าใจกับผลลัพธ์ของ free และ vmstat โดยเฉพาะอย่างยิ่งโปรดทราบค่า "แคช" คือหน่วยความจำที่เก็บโดยเคอร์เนล Linux เป็นแคชไฟล์ดังนั้นจึงนับได้อย่างมีประสิทธิภาพต่อค่า "ฟรี"
การดีบักระบบ Java เป็นกาต้มน้ำที่แตกต่างกัน แต่เป็นเคล็ดลับง่ายๆเกี่ยวกับ Oracle's และ JVM อื่น ๆ คือคุณสามารถเรียกใช้ kill -3 <pid> และการติดตามสแต็กเต็มรูปแบบและการสรุปกอง (รวมถึงรายละเอียดการรวบรวมขยะทั่วไป jps ของ JDK, jstat , jstack , jmap มีประโยชน์ เครื่องมือ SJK มีความก้าวหน้ามากขึ้น
ใช้ mtr เป็น traceroute ที่ดีกว่าเพื่อระบุปัญหาเครือข่าย
สำหรับการดูว่าทำไมดิสก์จึงเต็ม ncdu จะประหยัดเวลาในคำสั่งปกติเช่น du -sh *
ในการค้นหาซ็อกเก็ตหรือกระบวนการที่ใช้แบนด์วิดท์ให้ลองใช้ iftop หรือ nethogs
เครื่องมือ ab (มาพร้อมกับ Apache) มีประโยชน์สำหรับการตรวจสอบประสิทธิภาพของเว็บเซิร์ฟเวอร์อย่างรวดเร็ว สำหรับการทดสอบโหลดที่ซับซ้อนมากขึ้นลอง siege
สำหรับการดีบักเครือข่ายที่จริงจังมากขึ้น wireshark , tshark หรือ ngrep
รู้เกี่ยวกับ strace และ ltrace สิ่งเหล่านี้จะเป็นประโยชน์หากโปรแกรมล้มเหลวแขวนหรือล้มเหลวและคุณไม่รู้ว่าทำไมหรือถ้าคุณต้องการได้รับแนวคิดทั่วไปเกี่ยวกับประสิทธิภาพ หมายเหตุตัวเลือกการทำโปรไฟล์ ( -c ) และความสามารถในการแนบกับกระบวนการทำงาน ( -p ) ใช้ตัวเลือก TRACE Child ( -f ) เพื่อหลีกเลี่ยงการโทรที่สำคัญที่ขาดหายไป
รู้เกี่ยวกับ ldd เพื่อตรวจสอบไลบรารีที่ใช้ร่วมกัน ฯลฯ - แต่ไม่เคยรันบนไฟล์ที่ไม่น่าเชื่อถือ
รู้วิธีเชื่อมต่อกับกระบวนการทำงานกับ gdb และรับร่องรอยสแต็ก
ใช้ /proc บางครั้งมันก็เป็นประโยชน์อย่างน่าอัศจรรย์เมื่อทำการดีบักปัญหาสด ตัวอย่าง:/proc xxx /proc/cpuinfo , /proc/meminfo , /proc/cmdline , /proc/xxx/cwd /proc/xxx/exe /proc/xxx/fd/ , /proc/xxx/smaps
เมื่อทำการดีบักว่าทำไมบางอย่างผิดพลาดในอดีต sar อาจมีประโยชน์มาก มันแสดงสถิติประวัติศาสตร์เกี่ยวกับ CPU, หน่วยความจำ, เครือข่าย ฯลฯ
สำหรับระบบที่ลึกกว่าและการวิเคราะห์ประสิทธิภาพให้ดูที่ stap (SystemTap), perf และ sysdig
ตรวจสอบระบบปฏิบัติการที่คุณใช้งานด้วย uname หรือ uname -a (ข้อมูล UNIX/KERNEL ทั่วไป) หรือ lsb_release -a (ข้อมูล distro linux)
ใช้ dmesg เมื่อใดก็ตามที่มีบางสิ่งที่ทำหน้าที่ตลกจริงๆ (อาจเป็นปัญหาฮาร์ดแวร์หรือไดรเวอร์)
หากคุณลบไฟล์และไม่ได้เพิ่มพื้นที่ดิสก์ที่คาดหวังตามที่รายงานโดย du ตรวจสอบว่าไฟล์นั้นใช้งานโดยกระบวนการหรือไม่: lsof | grep deleted | grep "filename-of-my-big-file"
ตัวอย่างบางส่วนของคำสั่งร่วมกัน:
sort / uniq สมมติว่า a และ b เป็นไฟล์ข้อความที่ไม่มีอยู่แล้ว นี่คือเร็วและใช้งานได้กับไฟล์ที่มีขนาดโดยพลการสูงถึงกิกะไบต์จำนวนมาก (การเรียงลำดับไม่ได้ถูก จำกัด ด้วยหน่วยความจำแม้ว่าคุณอาจต้องใช้ตัวเลือก -T ถ้า /tmp อยู่ในพาร์ติชันรูทขนาดเล็ก) ดูบันทึกเกี่ยวกับ LC_ALL ด้านบนและตัวเลือก sort 'S -u (ทิ้งไว้เพื่อความชัดเจนด้านล่าง) sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
ใช้ grep . * เพื่อตรวจสอบเนื้อหาของไฟล์ทั้งหมดในไดเรกทอรีอย่างรวดเร็ว (ดังนั้นแต่ละบรรทัดจะถูกจับคู่กับชื่อไฟล์) หรือ head -100 * (ดังนั้นแต่ละไฟล์จึงมีส่วนหัว) สิ่งนี้มีประโยชน์สำหรับไดเรกทอรีที่เต็มไปด้วยการตั้งค่าการกำหนดค่าเช่นใน /sys , /proc , /etc
การรวมตัวเลขทั้งหมดในคอลัมน์ที่สามของไฟล์ข้อความ (นี่อาจเร็วกว่า 3x และรหัสน้อยกว่า 3x เทียบเท่ากับ Python):
awk ' { x += $3 } END { print x } ' myfilels -l แบบเรียกซ้ำ แต่อ่านง่ายกว่า ls -lR : find . -type f -lsacct_id ที่มีอยู่ใน URL หากคุณต้องการนับจำนวนคำขอสำหรับแต่ละ acct_id : egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn หากต้องการตรวจสอบการเปลี่ยนแปลงอย่างต่อเนื่องให้ใช้ watch เช่นตรวจสอบการเปลี่ยนแปลงไฟล์ในไดเรกทอรีด้วย watch -d -n 2 'ls -rtlh | tail' หรือไปยังการตั้งค่าเครือข่ายในขณะที่แก้ไขปัญหาการตั้งค่า WiFi ของคุณด้วย watch -d -n 2 ifconfig
เรียกใช้ฟังก์ชั่นนี้เพื่อรับเคล็ดลับแบบสุ่มจากเอกสารนี้ (Parses Markdown และแยกรายการ):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed ' /cowsay[.]png/d ' |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v " (html/body/ul/li[count(p)>0])[ $RANDOM mod last()+1] " |
xmlstarlet unesc | fmt -80 | iconv -t US
} expr : ดำเนินการเลขคณิตหรือบูลีนหรือประเมินการแสดงออกปกติ
m4 : โปรเซสเซอร์มาโครอย่างง่าย
yes : พิมพ์สตริงมาก
cal : ปฏิทินที่ดี
env : เรียกใช้คำสั่ง (มีประโยชน์ในสคริปต์)
printenv : พิมพ์ตัวแปรสภาพแวดล้อม (มีประโยชน์ในการดีบักและสคริปต์)
look : ค้นหาคำภาษาอังกฤษ (หรือบรรทัดในไฟล์) เริ่มต้นด้วยสตริง
cut , paste และ join : การจัดการข้อมูล
fmt : รูปแบบข้อความย่อหน้า
pr : รูปแบบข้อความลงในหน้า/คอลัมน์
fold : ห่อเส้นข้อความ
column : ฟอร์แมตฟอร์แมตฟอร์แมตลงในคอลัมน์หรือตารางที่จัดตำแหน่ง
expand และ unexpand : แปลงระหว่างแท็บและช่องว่าง
nl : เพิ่มหมายเลขบรรทัด
seq : หมายเลขพิมพ์
bc : เครื่องคิดเลข
factor : จำนวนเต็มปัจจัย
gpg : เข้ารหัสและลงชื่อเข้าใช้ไฟล์
toe : ตารางของรายการ terminfo
nc : การดีบักเครือข่ายและการถ่ายโอนข้อมูล
socat : ซ็อกเก็ตรีเลย์และพอร์ต TCP (คล้ายกับ netcat )
slurm : การสร้างภาพข้อมูลเครือข่าย
dd : การย้ายข้อมูลระหว่างไฟล์หรืออุปกรณ์
file : ระบุประเภทของไฟล์
tree : แสดงไดเรกทอรีและไดเรกทอรีย่อยเป็นต้นไม้ทำรัง ชอบ ls แต่เรียกซ้ำ
stat : ข้อมูลไฟล์
time : ดำเนินการและเวลาคำสั่ง
timeout : ดำเนินการคำสั่งตามระยะเวลาที่กำหนดและหยุดกระบวนการเมื่อระยะเวลาที่กำหนดเสร็จสมบูรณ์
lockfile : สร้างไฟล์ semaphore ที่สามารถลบได้โดย rm -f
logrotate : หมุน, บีบอัดและบันทึกจดหมาย
watch : เรียกใช้คำสั่งซ้ำ ๆ แสดงผลลัพธ์และ/หรือเน้นการเปลี่ยนแปลง
when-changed : รันคำสั่งใด ๆ ที่คุณระบุเมื่อใดก็ตามที่เห็นการเปลี่ยนแปลงไฟล์ ดู inotifywait และ entr เช่นกัน
tac : พิมพ์ไฟล์ย้อนกลับ
comm : เปรียบเทียบไฟล์ที่เรียงลำดับทีละบรรทัด
strings : แยกข้อความจากไฟล์ไบนารี
tr : การแปลตัวละครหรือการจัดการ
iconv หรือ uconv : การแปลงสำหรับการเข้ารหัสข้อความ
split และ csplit : แยกไฟล์
sponge : อ่านอินพุตทั้งหมดก่อนที่จะเขียนมีประโยชน์สำหรับการอ่านจากนั้นเขียนไปยังไฟล์เดียวกันเช่น grep -v something some-file | sponge some-file
units : การแปลงหน่วยและการคำนวณ; แปลง furlongs ต่อสัปดาห์เป็น twips ต่อ Blink (ดูเพิ่มเติม /usr/share/units/definitions.units )
apg : สร้างรหัสผ่านแบบสุ่ม
xz : การบีบอัดไฟล์อัตราส่วนสูง
ldd : ข้อมูลไลบรารีแบบไดนามิก
nm : สัญลักษณ์จากไฟล์วัตถุ
ab หรือ wrk : เว็บเซิร์ฟเวอร์การเปรียบเทียบ
strace : ระบบเรียกดีบัก
mtr : Better Traceroute สำหรับการดีบักเครือข่าย
cssh : Shell พร้อมกันด้วยภาพ
rsync : ซิงค์ไฟล์และโฟลเดอร์ผ่าน SSH หรือในระบบไฟล์ท้องถิ่น
wireshark และ tshark : การจับแพ็คเก็ตและการดีบักเครือข่าย
ngrep : grep สำหรับเลเยอร์เครือข่าย
host และ dig : การค้นหา DNS
lsof : ประมวลผลไฟล์ descriptor และซ็อกเก็ต
dstat : สถิติระบบที่มีประโยชน์
glances : ภาพรวมระดับสูงหลายระบบ
iostat : สถิติการใช้ดิสก์
mpstat : สถิติการใช้งาน CPU
vmstat : สถิติการใช้หน่วยความจำ
htop : รุ่นที่ดีขึ้นของด้านบน
last : ประวัติเข้าสู่ระบบ
w : ใครเข้าสู่ระบบ
id : ข้อมูลประจำตัวผู้ใช้/กลุ่ม
sar : สถิติระบบประวัติศาสตร์
iftop หรือ nethogs : การใช้เครือข่ายโดยซ็อกเก็ตหรือกระบวนการ
ss : สถิติซ็อกเก็ต
dmesg : ข้อความแสดงข้อผิดพลาดในการบูตและระบบ
sysctl : ดูและกำหนดค่าพารามิเตอร์เคอร์เนล Linux ณ เวลาทำงาน
hdparm : SATA/ATA Disk Manipulation/Performance
lsblk : รายการอุปกรณ์บล็อก: มุมมองต้นไม้ของดิสก์และพาร์ติชันดิสก์ของคุณ
lshw , lscpu , lspci , lsusb , dmidecode : ข้อมูลฮาร์ดแวร์รวมถึง CPU, BIOS, RAID, กราฟิก, อุปกรณ์ ฯลฯ
lsmod และ modinfo : รายการและแสดงรายละเอียดของโมดูลเคอร์เนล
fortune , ddate และ sl : อืมดีขึ้นอยู่กับว่าคุณพิจารณาว่าตู้รถไฟไอน้ำและใบเสนอราคา zippy "มีประโยชน์"
รายการเหล่านี้เป็นรายการที่เกี่ยวข้องกับ macOS เท่านั้น
การจัดการแพ็คเกจด้วย brew (Homebrew) และ/หรือ port (MacPorts) สิ่งเหล่านี้สามารถใช้ในการติดตั้งบน MacOS คำสั่งมากมายข้างต้น
คัดลอกเอาต์พุตของคำสั่งใด ๆ ไปยังแอพเดสก์ท็อปที่มี pbcopy และวางอินพุตจากหนึ่งด้วย pbpaste
ในการเปิดใช้งานคีย์ตัวเลือกในเทอร์มินัล MacOS เป็นคีย์ ALT (เช่นที่ใช้ในคำสั่งด้านบนเช่น ALT -B , ALT -F ฯลฯ ), การตั้งค่าเปิด -> โปรไฟล์ -> คีย์บอร์ดและเลือก "ใช้ตัวเลือกเป็นคีย์เมตา"
ในการเปิดไฟล์ด้วยแอพเดสก์ท็อปให้ใช้ open หรือ open -a /Applications/Whatever.app
Spotlight: ค้นหาไฟล์ด้วย mdfind และรายการข้อมูลเมตา (เช่นข้อมูล Exif Photo) ด้วย mdls
โปรดทราบว่า MacOS ขึ้นอยู่กับ BSD UNIX และคำสั่งมากมาย (เช่น ps , ls , tail , awk , sed ) มีการเปลี่ยนแปลงเล็กน้อยจาก Linux ซึ่งได้รับอิทธิพลจากเครื่องมือ UNIX และ GNU แบบ V-style คุณสามารถบอกความแตกต่างได้บ่อยครั้งโดยการสังเกตหน้าผู้ชายมีหัวข้อ "คู่มือคำสั่งทั่วไป BSD" ในบางกรณีสามารถติดตั้งรุ่น GNU ได้เช่นกัน (เช่น gawk และ gsed สำหรับ GNU AWK และ SED) หากการเขียนสคริปต์ Bash Cross-Platform หลีกเลี่ยงคำสั่งดังกล่าว (ตัวอย่างเช่นพิจารณา Python หรือ perl ) หรือทดสอบอย่างรอบคอบ
หากต้องการรับข้อมูลการปล่อย MacOS ให้ใช้ sw_vers
รายการเหล่านี้เกี่ยวข้องกับ Windows เท่านั้น
เข้าถึงพลังของเชลล์ Unix ภายใต้ Microsoft Windows โดยการติดตั้ง Cygwin สิ่งที่อธิบายไว้ในเอกสารนี้ส่วนใหญ่จะทำงานนอกกรอบ
ใน Windows 10 คุณสามารถใช้ระบบย่อย Windows สำหรับ Linux (WSL) ซึ่งให้สภาพแวดล้อมการทุบตีที่คุ้นเคยพร้อมยูทิลิตี้บรรทัดคำสั่ง Unix
หากคุณต้องการใช้เครื่องมือนักพัฒนา GNU (เช่น GCC) เป็นหลักใน Windows ให้พิจารณา MingW และแพ็คเกจ MSYS ซึ่งให้บริการสาธารณูปโภคเช่น Bash, Gawk, Make และ Grep MSYS ไม่มีคุณสมบัติทั้งหมดเมื่อเทียบกับ Cygwin MingW มีประโยชน์อย่างยิ่งสำหรับการสร้างพอร์ต Windows ดั้งเดิมของเครื่องมือ UNIX
อีกทางเลือกหนึ่งที่จะได้รับรูปลักษณ์ของ Unix และรู้สึกภายใต้ Windows คือเงินสด โปรดทราบว่ามีคำสั่ง UNIX และตัวเลือกบรรทัดคำสั่งเพียงไม่กี่ตัวเท่านั้นที่มีอยู่ในสภาพแวดล้อมนี้
คุณสามารถดำเนินการและสคริปต์งานการจัดการระบบ Windows ส่วนใหญ่จากบรรทัดคำสั่งโดยการเรียนรู้และการใช้ wmic
เครื่องมือเครือข่าย Windows บรรทัดคำสั่งดั้งเดิมที่คุณอาจพบว่ามีประโยชน์ ได้แก่ ping , ipconfig , tracert และ netstat
คุณสามารถทำงาน Windows ที่มีประโยชน์มากมายโดยเรียกใช้คำสั่ง Rundll32
ติดตั้งโปรแกรม UNIX เพิ่มเติมด้วยตัวจัดการแพ็คเกจของ Cygwin
ใช้ mintty เป็นหน้าต่างบรรทัดคำสั่งของคุณ
เข้าถึง Windows Clipboard ผ่าน /dev/clipboard
Run cygstart to open an arbitrary file through its registered application.
Access the Windows registry with regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! -
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.