แบ่งปันคุณสมบัติและลูกเล่นบรรทัดคำสั่งของคุณสำหรับ Unix / Linux พยายามเก็บเปลือกหอย / ผู้ไม่เชื่อเรื่องพระเจ้า distro ถ้าเป็นไปได้ สนใจเห็น aliases, one-liners, คีย์ลัด, เชลล์สคริปต์ขนาดเล็ก ฯลฯ
แบ่งปันคุณสมบัติและลูกเล่นบรรทัดคำสั่งของคุณสำหรับ Unix / Linux พยายามเก็บเปลือกหอย / ผู้ไม่เชื่อเรื่องพระเจ้า distro ถ้าเป็นไปได้ สนใจเห็น aliases, one-liners, คีย์ลัด, เชลล์สคริปต์ขนาดเล็ก ฯลฯ
คำตอบ:
สิ่งนี้จะขยายออกไปตาม!!
เคล็ดลับที่กล่าวถึงในคำตอบนี้ มีคำสั่งที่เกี่ยวข้องกับประวัติศาสตร์มากมายที่มักจะถูกลืม (ผู้คนมักจะแทงUp100 ครั้งแทนที่จะมองหาคำสั่งที่พวกเขารู้ว่าพวกเขาพิมพ์)
history
คำสั่งจะแสดงรายการของคำสั่งที่เรียกใช้เมื่อเร็ว ๆ นี้ที่มี designator เหตุการณ์ไปทางซ้าย!N
จะแทนที่คำสั่งที่เกี่ยวข้องกับตัวกำหนดเหตุการณ์ N
!-N
จะทดแทนN
THคำสั่งล่าสุด; เช่น!-1
จะแทนที่คำสั่งล่าสุดล่าสุด!-2
เป็นอันดับสองเป็นต้น!!
เป็นที่จดย่อ!-1
เพื่อทดแทนคำสั่งสุดท้ายอย่างรวดเร็ว!string
จะแทนที่คำสั่งล่าสุดที่เริ่มต้นด้วย string
!?string?
จะแทนที่คำสั่งล่าสุดที่มี string
นักออกแบบ Word สามารถเพิ่มลงใน!
คำสั่งประวัติเพื่อแก้ไขผลลัพธ์ ลำไส้ใหญ่แยกเหตุการณ์และคำว่า designators !!:0
เช่น designator เหตุการณ์!!
สามารถยากที่จะเพียงแค่!
เมื่อใช้ designator คำเพื่อให้เทียบเท่ากับ!!:0
!:0
!:0
จะได้รับคำสั่งที่ถูกดำเนินการ!:1
จะได้รับการโต้แย้งครั้งแรก (และ!:2
ครั้งที่สอง ฯลฯ )!:2-3
จะได้รับอาร์กิวเมนต์ที่สองและสาม!:^
เป็นอีกวิธีในการรับอาร์กิวเมนต์แรก !:$
จะได้รับล่าสุด!:*
จะได้รับการขัดแย้งทั้งหมด (แต่ไม่ใช่คำสั่ง)โมดิฟายเออร์ยังสามารถผนวกเข้ากับ!
คำสั่งประวัติแต่ละคำนำหน้าโดยโคลอน หมายเลขใด ๆ สามารถวางซ้อนกันบน (เช่น!:t:r:p
)
h
- จัดเรียงชื่อไฟล์ฐานt
- ชื่อไฟล์ฐานเท่านั้นr
- เรียงแถวส่วนขยายชื่อไฟล์e
- เฉพาะนามสกุลไฟล์s/search/replacement
- แทนที่การเกิดขึ้นครั้งแรกของsearch
ด้วยreplacement
gs/search/replacement
- แทนที่เหตุการณ์ทั้งหมดsearch
ด้วยreplacement
!-#
อย่างใดอย่างหนึ่ง ฉันใช้!string
เพื่อเรียกใช้คำสั่งสุดท้ายที่เริ่มต้นด้วยสตริง แต่โดยทั่วไปแล้วแท็บกรอกให้ครบถ้วนก่อน (zsh) เพื่อให้แน่ใจว่าฉันกำลังรันสิ่งที่ถูกต้อง
!N
จะรันคำสั่ง ... " เป็นคำอธิบายที่แคบเกินไป จริง ๆ แล้ว!N
จะถูกแทนที่ด้วยคำสั่ง ... ; และคำอธิบายทั้งหมดในคำตอบ ถูกต้องมากขึ้นและเปิดโอกาสที่มีประโยชน์มากขึ้น! sudo !!
เช่นที่กล่าวมา
bash
; ใน Emacs เพื่อเรียกดูประวัติคำสั่งอินพุตและค่า (สำหรับ Mx หรือค่าการอ่านอื่น ๆ ) หนึ่งใช้ Meta-R แทน (Meta-R ยังใช้eshell
ใน Emacs) ดังนั้นฉันมักจะทำให้พวกเขาสับสน
bash - แทรกพารามิเตอร์สุดท้ายของบรรทัดก่อนหน้า
alt- . คีย์ผสมที่มีประโยชน์ที่สุดลองและดูด้วยเหตุผลบางอย่างที่ไม่มีใครรู้เกี่ยวกับอันนี้
กดอีกครั้งและอีกครั้งเพื่อเลือกพารามิเตอร์สุดท้ายที่เก่ากว่า
ยอดเยี่ยมเมื่อคุณต้องการทำอะไรเพิ่มเติมกับอาร์กิวเมนต์ / ไฟล์ที่คุณใช้เมื่อไม่นานมานี้
alt
- .
มันจะไปที่คำสั่งก่อนหน้าและดึงอาร์กิวเมนต์สุดท้ายออกมา ดังนั้นหากคุณต้องการอาร์กิวเมนต์สุดท้ายจากสามคำสั่งที่ผ่านมาเพียงแค่กดalt
- .
สามครั้ง
yank-last-arg
คำสั่ง readline ดังนั้นจึงควรทำงานกับโปรแกรมใด ๆ ที่เชื่อมโยงกับ readline ไม่ใช่เพียงแค่ BASH หรือ ZSH
สิ่งที่ฉันชอบคือ
man 7 ascii
ง่ายและมีประโยชน์มาก
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL '\0' (null character) 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
026 22 16 SYN (synchronous idle) 126 86 56 V
027 23 17 ETB (end of trans. blk) 127 87 57 W
030 24 18 CAN (cancel) 130 88 58 X
031 25 19 EM (end of medium) 131 89 59 Y
032 26 1A SUB (substitute) 132 90 5A Z
033 27 1B ESC (escape) 133 91 5B [
034 28 1C FS (file separator) 134 92 5C \ '\\'
035 29 1D GS (group separator) 135 93 5D ]
036 30 1E RS (record separator) 136 94 5E ^
037 31 1F US (unit separator) 137 95 5F _
040 32 20 SPACE 140 96 60 `
041 33 21 ! 141 97 61 a
042 34 22 " 142 98 62 b
043 35 23 # 143 99 63 c
044 36 24 $ 144 100 64 d
045 37 25 % 145 101 65 e
046 38 26 & 146 102 66 f
047 39 27 ' 147 103 67 g
050 40 28 ( 150 104 68 h
051 41 29 ) 151 105 69 i
052 42 2A * 152 106 6A j
053 43 2B + 153 107 6B k
054 44 2C , 154 108 6C l
055 45 2D - 155 109 6D m
056 46 2E . 156 110 6E n
057 47 2F / 157 111 6F o
060 48 30 0 160 112 70 p
061 49 31 1 161 113 71 q
062 50 32 2 162 114 72 r
063 51 33 3 163 115 73 s
064 52 34 4 164 116 74 t
065 53 35 5 165 117 75 u
066 54 36 6 166 118 76 v
067 55 37 7 167 119 77 w
070 56 38 8 170 120 78 x
071 57 39 9 171 121 79 y
072 58 3A : 172 122 7A z
073 59 3B ; 173 123 7B {
074 60 3C < 174 124 7C |
075 61 3D = 175 125 7D }
076 62 3E > 176 126 7E ~
077 63 3F ? 177 127 7F DEL
ดูที่commandlinefu.comเว็บไซต์นี้
คุณสามารถดูบทความทั้งสี่นี้โดย Peteris Krumins บนบล็อกของเขา
ascii
โปรแกรมแยกต่างหากก็มีประโยชน์เช่นกัน นอกเหนือจากการพิมพ์ตารางยังช่วยให้คุณสามารถค้นหาอักขระได้หนึ่งตัวหรือมากกว่า
ดำเนินการคำสั่งสุดท้ายเป็น root:
sudo !!
ไม่แน่ใจว่านี่เป็น "เคล็ดลับ" หรือไม่ แต่ผู้คนดูเหมือนจะไม่ทราบถึงคีย์ลัดของ readline มาตรฐานมาก ของใช้เฉพาะในเปลือกหอย:
Ctrl+L
สอดคล้องกับอักขระ FormFeed ascii โดยทั่วไปมันจะวาดหน้าจอใหม่ในแอปพลิเคชันข้อความที่มีหน้าต่างหน้าจอ (เช่นเสียงเรียกเข้า, น้อยกว่า, mc ฯลฯ ) ดีถ้าหน้าจอ "ปนเปื้อน" โดยผลลัพธ์บางอย่างจากโปรแกรมอื่น
CTRL+ Rใน BASH สำหรับการค้นหา / เปิดใช้งานคำสั่งที่เรียกใช้ก่อนหน้านี้ (เนื้อหาของ ~ / .bash_history)
ซึ่งมักเป็นประโยชน์อย่างมาก การเรียกใช้นามแฝงนี้จะให้บริการ PWD ผ่าน HTTP (จัดทำดัชนี) บนพอร์ต 8000:
alias webserver="python -m SimpleHTTPServer"
และเนื่องจากฉันทำงานให้ตลอดเวลาและทำให้สแตกและพิมพ์เร็วเกินไปนามแฝงเหล่านี้อาจเป็นของฉันที่ใช้บ่อยที่สุด (อย่างจริงจัง):
alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make
และอาจเป็นชิ้นส่วนที่ใช้บ่อยที่สุดของ BASH เป็นสคริปต์ง่ายๆที่ฉันเรียกว่าการอัปโหลด ฉันใช้มันเพื่อลบเนื้อหาประเภทใด ๆ ให้กับ Linode ของฉันและคัดลอก URL HTTP ที่ได้ไปยังคลิปบอร์ดของฉัน (คลิกกลาง) มีประโยชน์มากสำหรับการวางสิ่งของให้กับผู้คนใน IRC:
scp -r $* $user@$host:public_html && {
URL="http://$host/~$user/$(basename $1)"
echo "$URL"
xselection -replace PRIMARY "$URL"
}
แค่สองสาม ฉันสามารถโพสต์ได้มากขึ้นในภายหลังต้องกลับมาทำงาน!
alias mk=make
พิมพ์ได้เร็วขึ้นและผิดพลาดน้อยลง หรือคอมไพล์จากเครื่องมือแก้ไขของคุณโดยใช้ปุ่มลัด ...
alias m=make
หรือแม้กระทั่งm=make -j6
หรือคล้ายกัน - ยกเว้นฉันใช้alias m=mutt
☺
diff
เอาต์พุตของสองคำสั่งโดยไม่สร้างไฟล์ชั่วคราวด้วยตนเอง (bash):
diff <(ls dir1) <(ls dir2)
comm
เพราะใช้เฉพาะไฟล์เท่านั้น แต่ในหลายกรณีนั่นเป็นการสิ้นเปลืองไอโหนด
ค่อนข้างธรรมดา แต่ผู้คนไม่รู้จะกลับมาที่ dir ก่อนหน้า:
cd -
cd..
จาก DOS ถูกฝังอยู่ในความทรงจำของกล้ามเนื้อของฉัน ...
cd
(ไม่มีข้อโต้แย้ง) ซึ่งจะพาคุณไปยังไดเรกทอรีบ้านของคุณ
การขยายรั้งเป็นกลไกที่อาจสร้างสตริงโดยพลการ
อนุญาตให้คุณแทนที่บรรทัดที่น่าเบื่อเช่น:
mv loong/and/complex/file/name loong/and/complex/file/name.bacukup
ด้วยอินสแตนซ์ที่สั้นกว่า
mv loong/and/complex/file/name{,backup}
การใช้งานอื่น ๆ
# to display the diff between /etc/rc.conf and /etc/rc.conf.pacsave
diff /etc/rc.conf{,.pacsave}
# to list files in both /usr/share and /usr/local/share
ls /usr/{,local}/share
การขยายเลขคณิต :
การขยายเลขคณิตช่วยให้การประเมินผลของการแสดงออกทางคณิตศาสตร์และการทดแทนของผล รูปแบบสำหรับการขยายเลขคณิตคือ:
$((expression))
การแสดงออกจะได้รับการปฏิบัติราวกับว่ามันอยู่ในเครื่องหมายคำพูดคู่ แต่เครื่องหมายคำพูดคู่ภายในวงเล็บไม่ได้รับการปฏิบัติเป็นพิเศษ โทเค็นทั้งหมดในนิพจน์ได้รับการขยายพารามิเตอร์การขยายสตริงการทดแทนคำสั่งและการลบเครื่องหมายคำพูด การขยายเลขคณิตอาจซ้อนกัน
$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5
foo[123]
ที่จะขยายเข้าไปfoo1 foo2 foo3
แต่พวกเขาจำเป็นต้องมีชื่อไฟล์เพื่อทำงานในกรณีนั้น
นี้มักจะอยู่ในสคริปต์เริ่มต้นของฉัน (.bashrc, .profile อะไรก็ตาม)
shopt
ดีตรวจสอบความคิดเห็น:
shopt -s cdspell # try to correct typos in path
shopt -s dotglob # include dotfiles in path expansion
shopt -s hostcomplete # try to autocomplete hostnames
นามแฝงที่บันทึกการกดแป้นพิมพ์:
mkdir
และcd
เข้าไปยัง:
mkcd () { mkdir -p "$@" && cd "$@"; }
และสุดท้าย แต่ไม่ท้ายสุดฉันได้ยอมจำการท่องไวยากรณ์ tar ดังนั้น:
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
mkcd
ที่ฉันตั้งชื่อ id md
เท่านั้น อย่างไรก็ตามการใช้ "$ @" เป็นอาร์กิวเมนต์สำหรับ cd ไม่สมเหตุสมผลเนื่องจากคุณไม่สามารถทำ cd มากกว่าหนึ่งไดเรกทอรี "$ @" จะใช้งานได้สำหรับ mkdir แต่แล้วคุณจัดการข้อโต้แย้งที่แตกต่างกันสำหรับ mkdir และ cd ดังนั้นฉันอยากจะแนะนำmd () { mkdir -p "$1"; cd "$1" }
สองฟังก์ชั่นทุบตีซึ่งช่วยให้ฉันหลายจังหวะ
ทำ ls โดยอัตโนมัติทุก ๆ ครั้งหลังจากทำ cd สำเร็จ:
function cd {
builtin cd "$@" && ls
}
ขึ้นไปสู่ระดับ n:
# Usage .. [n]
function .. (){
local arg=${1:-1};
local dir=""
while [ $arg -gt 0 ]; do
dir="../$dir"
arg=$(($arg - 1));
done
cd $dir #>&/dev/null
}
builtin foo
เพื่อให้ได้รอบที่มีฟังก์ชั่นที่กำหนดไว้cd
; ฉันใช้chdir
ในการทำงานของฉัน Handy
cd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
เนื่องจากฉันมักจะอยู่กึ่งกลางในบรรทัดคำสั่งก่อนที่จะต้องการค้นหา (CTRL-R ใน bash) ฉันมีสิ่งต่อไปนี้ใน. bashrc ของฉัน
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
ซึ่งหมายความว่าถ้าฉันพิมพ์ cd จากนั้นกดขึ้น / ลงฉันจะเห็นตัวเลือกทั้งหมดที่ฉันมี cd'd โดยทั่วไปฉันใช้สิ่งนี้สำหรับ dirs ที่ใช้บ่อย เช่นเดียวกับ "cd w" และฉันก็จบลงด้วยการใช้พื้นที่ทำงานทั้งหมดที่ฉันใช้
สิ่งหนึ่งที่ช่วยฉันประหยัดเวลาได้มากคือคำสั่ง pushd / popd พวกเหล่านี้ช่วยให้คุณสร้างสแต็คของไดเรกทอรีและลดการพิมพ์จำนวนมาก:
/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
u
และo
ยืนอยู่ที่นี่?
setopt autopushd
และการเปลี่ยนแปลงไดเรกทอรีทั้งหมดจะผลักดันโดยอัตโนมัติ
คำสั่งscreen
โดยทั่วไปจะบันทึกเซสชันบรรทัดคำสั่งของคุณเมื่อคุณกลับมา มันเป็นตัวจัดการเทอร์มินัลเหมือนกับตัวจัดการหน้าต่าง ด้วยวิธีนี้ในเทอร์มินัลเซสชันเดียวคุณสามารถมีเทอร์มินัลเสมือนหลายตัวเกิดขึ้นได้ มันเย็นมาก.
หากมีการใช้screen
งานฟังก์ชั่นเปลือกนี้ (ใส่ไว้.bashrc
) มีประโยชน์อย่างยิ่ง:
function scr {
if screen -ls | grep -q Main; then
# reattach to Main:
screen -xr Main
else
# name session "Main":
screen -S Main
fi
}
เมื่อพิมพ์scr
จะตรวจสอบว่าเซสชันหลักของคุณมีอยู่และจะแนบไปหรือไม่ มิฉะนั้นจะสร้างมันขึ้นมา
หากคุณต้องการแก้ไขบรรทัดคำสั่งที่ยาวเป็นพิเศษใน bash
^X^E (Ctrl-X Ctrl-E)
จะเปิดในตัวแก้ไข ($ EDITOR)
ใน zsh คุณจะได้รับพฤติกรรมเดียวกันโดยเพิ่มสิ่งนี้ลงใน. zshrc:
autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line
หากคุณเป็นนักพิมพ์ดีดที่รวดเร็วสิ่งเหล่านี้มีประโยชน์:
alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'
แมโครนี้ช่วยให้คุณคำนวณผลรวมของคอลัมน์ของเอาต์พุต: ขนาดไฟล์, ไบต์, แพ็คเก็ตสิ่งที่คุณต้องทำคือระบุคอลัมน์ที่คุณต้องการเพิ่ม:
total ()
{
if [ x$1 = x ]; then set `echo 1`; fi
awk "{total += \$$1} END {print total}"
}
คุณใช้มันแบบนี้โดยไม่มีข้อโต้แย้งมันจะเพิ่มผลรวมของคอลัมน์แรก:
du | total
หากคุณระบุอาร์กิวเมนต์มันจะรวมคอลัมน์นั้นซึ่งจะให้จำนวนไบต์ทั้งหมดที่ใช้โดยไฟล์ C # ทั้งหมดใน / tmp:
ls -l /tmp/*cs | total 5
บางครั้งคอนโซลของคุณเกิดความสับสนเพราะคุณดูไฟล์ไบนารีโดยบังเอิญ (ตัวอย่างเช่น cat / bin / ls) คุณสามารถกู้คืนเทอร์มินัลด้วยฟังก์ชั่นเชลล์นี้:
restaura ()
{
perl -e 'print "\e)B";'
}
ฉันชอบ ls ของฉันเพื่อใช้อักขระเพื่อแยกความแตกต่างของคลาสของไฟล์และเพื่อซ่อนไฟล์สำรองที่สร้างโดยตัวแก้ไขของฉัน (ไฟล์สำรองลงท้ายด้วยอักขระ ~):
alias ls='ls -FB'
s/fast/sloppy/
reset
restaura
alias s='sudo'
alias r='rake' # i'm a ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.
หนึ่งในรายการโปรดของฉันเมื่อฉันลืมs
:
$ s !! # last command with super user priviledges
bindkey -s '\e[12~' "sudo !!\n"
ผูก (ในกรณีนี้) F2 เพื่อเรียกใช้คำสั่งนั้น ฉันมีข้อผูกพันนั้นดังนั้นเมื่อฉันเรียกใช้บางสิ่งบางอย่างและเห็นข้อความแสดงข้อผิดพลาด "คุณลืม 'sudo', คนโง่" ฉันสามารถแทงที่ F2 ด้วยความรำคาญ
หากคำสั่งรับอินพุต stdin คุณสามารถอ่านอินพุตจากไฟล์<filename
ได้ สิ่งนี้สามารถปรากฏที่ใดก็ได้ในคำสั่งดังนั้นเส้นเหล่านี้จะเท่ากัน:
cat filename
cat <filename
<filename cat
สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับ grep เนื่องจากช่วยให้คุณวางนิพจน์ที่ท้ายบรรทัดดังนั้นคุณสามารถแก้ไขคำสั่ง grep ได้อย่างรวดเร็วโดยกดปุ่มUpโดยไม่ต้องเลื่อนไปทางซ้ายเพื่อผ่านชื่อไฟล์:
<filename grep 'expression'
<input foo | bar | baz >output
แต่ก็ไม่ได้ผลถ้าคุณลองผสมในการวนรอบบางอย่างเช่นwhile
หรือfor
ตรงกลาง ดังนั้นฉันจึงเลิกและวางมันไว้ท้ายที่สุดตามแบบแผน
คุณสามารถใช้CDPATH
เพื่อตั้งค่าไดเรกทอรีเทียบเท่าPATH
; หากคุณพยายามที่จะcd foo
และไม่มีfoo
ในไดเรกทอรีปัจจุบันเปลือกจะตรวจสอบแต่ละไดเรกทอรีในการCDPATH
ค้นหาfoo
พวกเขาและสลับไปยังคนแรกที่พบ:
export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
vi `which scriptname`
เพราะเมื่อไหร่ที่คุณไม่รู้ว่ามีอะไรอยู่และคุณก็ไม่สนใจเช่นกัน
which
โดยอัตโนมัติดังนั้นvi =scriptname
$(scriptname)
เครื่องหมาย มันทำให้คำสั่งของคุณในพื้นหลังเพื่อให้คุณสามารถพิมพ์ต่อไป
$> sudo updatedb &
ทำงานตามและหลังจากนั้นครู่หนึ่งคุณจะเห็น:
[1] 17403
และกระบวนการของคุณเสร็จแล้ว! เหมาะอย่างยิ่งสำหรับสิ่งที่คุณไม่จำเป็นต้องรอให้ยุติ
&!
กับพื้นหลังของงานและไม่สนใจมันจากเปลือก!
bash
นั่นไม่ทำงานสำหรับฉันใน
nohup
ทำสิ่งนี้ให้สำเร็จ
เสร็จสิ้นแท็บ มันจะแย่แค่ไหนถ้าคุณต้องพิมพ์ตัวละครทุกตัวในทุกเส้นทาง?
rm -fr /
เช่นนั้น เพื่อใช่แท็บเสร็จสิ้นมีความสำคัญสวย ...
ls /usr/lib/game-d*/rott*
rm -rf /
ปิดการใช้งานในระบบ Linux ส่วนใหญ่ใช่ไหม
จำนวนอุปกรณ์ที่เมาท์ล่าสุด:
mount /media/whatever
...
u!mo
!mo
ขยายเป็นคำสั่งสุดท้ายที่เริ่มต้นด้วยmo
(อย่างน้อยใน bash) บางครั้งมีคนmv
อยู่ตรงกลางดังนั้นu!m
จะไม่ได้ผลบ่อย
ฉันมีสิ่งนี้ใน. bashrc ของฉัน
#shortcut for CTRL+C and CTRL+V
alias c-c='xclip -sel clip'
alias c-v='xclip -o -sel clip'
function find-all() {
python -c "import re
import sys
for i in re.findall('$1', sys.stdin.read()):
if type(i) == type(''):
print i
else:
print i[0]"
}
และเมื่อฉันมีซอร์สโค้ด HTML ในคลิปบอร์ดและต้องการค้นหาลิงก์ทั้งหมดที่ฉันใช้
c-v | find-all 'href="([^"]*)"' | c-c
และฉันมี URL ทั้งหมดในคลิปบอร์ด
ฉันยังมีฟังก์ชั่นนี้
function lsq(){
ls -lh $@ | tr -s ' ' | cut -d' ' -f5,8
}
ขนาดการแสดงผลใด (มนุษย์สามารถอ่านได้) และชื่อไฟล์
alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'
นามแฝงนี้มีไว้สำหรับแสดงอุณหภูมิ
function separate() {
python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}
ด้วยฟังก์ชั่นนี้ฉันสามารถคำนวณผลรวมสินค้าหรือผลรวมของข้อโต้แย้ง
alias sum='separate + | bc'
alias product='separate * | bc'
function split-join() {
python -c "import sys,re; print '$2'.join(re.split('$1', sys.stdin.read().strip()))";
}
นี่คือฟังก์ชั่นที่เป็นประโยชน์ซึ่งแยกอินพุตมาตรฐานคั่นด้วย regex แล้วเข้าร่วมผลลัพธ์
function factorial() {
seq -s* $1 | bc
}
ฟังก์ชันแฟกทอเรียล
function wiki() { dig +short txt $1.wp.dg.cx; }
ฟังก์ชั่นนี้แสดงข้อความ wiki ผ่าน DNS
ฉันมี funcions สามสีด้วย
function blue() {
echo -e "\x1b[34m\x1b[1m"$@"\x1b[0m";
}
function green() {
echo -e "\x1b[32m\x1b[1m"$@"\x1b[0m";
}
function red() {
echo -e "\x1b[31m\x1b[1m"$@"\x1b[0m";
}
function md5check() {
test `md5sum $2 | cut -d' ' -f1` = "$1" && green [OK] || red [FAIL]
}
ฟังก์ชันนี้ตรวจสอบความถูกต้องของไฟล์ md5 hash
นี่จะแสดงข้อความแสดงข้อผิดพลาดสำหรับรหัสที่ระบุ
function strerror() { python -c "import os; print os.strerror($1)"; }
คุณสามารถพิมพ์ข้อความทั้งหมดด้วย
alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'
เคล็ดลับ ZSH ที่มีประโยชน์อื่น:
ถือว่าเอาต์พุตของคำสั่งเป็นไฟล์:
emacs =(hg cat -r 100 somefile)
นี่เป็นการเปิดไฟล์ Mercurial-track ที่เป็นเวอร์ชั่นเก่าใน emacs เพื่อการดูที่เน้นทางไวยากรณ์ โดยไม่ว่าผมจะต้องยุ่ง ๆ กับhg revert
, hg archive
หรืออย่างชัดเจนส่งhg cat
ออกไปยังแฟ้มชั่วคราว
แน่นอนว่าทำงานได้กับโปรแกรมใด ๆ ที่เปิดไฟล์และโปรแกรมใด ๆ ที่พิมพ์ไปยังเอาต์พุตมาตรฐาน
คุณลักษณะ ZSH เฉพาะเป็นชื่อแทนคำต่อท้ายที่กำหนดโดยให้ธง:alias
-s
alias -s ext=program
หากส่วนขยายที่กำหนดมีนามแฝงต่อท้ายคุณสามารถเรียกใช้ไฟล์ที่มีส่วนขยายนั้นโดยตรงและ ZSH จะเปิดโปรแกรมที่กำหนดและส่งชื่อไฟล์เป็นอาร์กิวเมนต์ ดังนั้นหากนามแฝงข้างต้นมีผลบังคับใช้เส้นเหล่านี้จะเท่ากัน:
/path/to/foo.ext
program /path/to/foo.ext
หนึ่งในฟีเจอร์ ZSH ที่ฉันโปรดปรานตลอดเวลาคือชื่อไดเรกทอรี คุณสามารถส่งออกตัวแปรที่มีชื่อที่กำหนดพร้อมค่าที่ชี้ไปยังเส้นทางที่แน่นอน:
export foo=/usr/bin
ตอนนี้คุณสามารถใช้~foo
ในคำสั่งเพื่ออ้างถึง/usr/bin
:
cd ~foo
~foo/ls
cat ~foo/filename
ดูคำถามนี้
เมื่อคุณทำงานps ax | grep string
:
[steve@sage-arch ~]$ ps ax | grep 'openbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
5100 pts/0 S+ 0:00 grep openbox
บรรทัดสุดท้ายที่มีgrep
อยู่นั้นน่ารำคาญนิดหน่อย
คุณสามารถกำจัดสิ่งนี้ได้ด้วยการวิ่งps ax | grep '[s]tring'
:
[steve@sage-arch ~]$ ps ax | grep '[o]penbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
update : หรือเพียงแค่เรียกใช้pgrep string
'[o]penbox'
) วงเล็บจะทำงานเหมือนกลมดังนั้นถ้ามี openbox ในไดเรกทอรีของคุณ (บอกว่าคุณอยู่/usr/bin
) ทุบตีจะใช้ openbox ซึ่งจะป้องกันเคล็ดลับ grep
คำสั่ง do-nothing :
ดังใน
while :; do :; done
รั้งการขยายตัวร่วมกับลูป:
for c in {1..3}; do :; done
!
ตัวดำเนินการและตัวดำเนินการลัดวงจร||
และ&&
[ -d /tmp/dir ] || mkdir /tmp/dir
if ! ping 34.41.34.1; then :; fi
ใช้เชลล์ย่อยแทนป๊อป / พุช (มีประโยชน์ในสคริปต์)
~$ ( cd /tmp; echo $PWD )
/tmp
~$
ชนิดของคำสั่งwhat-istype
~$ type type
type is a shell builtin
~$ type ls
ls is aliased to `ls --color=auto'
~$ f(){ :; }
~$ type f
f is a function
f ()
{
:
}
ก็ดีมาก: here-strings
~$ cat <<<"here $PWD"
here /home/yourname
~$
และสิ่งที่ฉันชอบ: การเปลี่ยนเส้นทางในรายการคำสั่ง
{ w; ps; ls /tmp; } 2>/dev/null |less
ฉันชอบที่จะทอยให้มากที่สุดเท่าที่จะทำได้ใน PS1 ของฉัน สิ่งที่มีประโยชน์ที่ควรจำ:
\e[s
และ\e[u
บันทึกและไม่บันทึกตำแหน่งเคอร์เซอร์ตามลำดับ ฉันใช้สิ่งนี้เพื่อสร้าง 'แถบข้อมูล' ที่ด้านบนของหน้าจอยาวสองบรรทัดซึ่งสามารถเพิ่มเติมสิ่งต่าง ๆ ได้ ตัวอย่าง:
PS1='\[\e[s\e[7m\e[1;1H\]\w\n\t \j / \! / \#\[\e[u\e[0m\e[33;1m\][\u@\h \[\e[34m\]\W]\[\e[0m\]\$ '
alias clear='echo -e "\e[2J\n"'
รวมกับ ลอง!
นอกจากนี้PROMPT_COMMAND
ตัวแปรจะกำหนดคำสั่งให้เรียกใช้งานก่อนหน้า PS1 ทุกครั้ง
อีกอันหนึ่งคือbg
คำสั่ง หากคุณลืมใส่&
ท้ายคำสั่งให้กด^Zและพิมพ์bg
แล้วมันจะทำงานในพื้นหลัง
bg
เมื่อฉันมีโปรแกรมที่ทำงานในพื้นหลังและกดโดยไม่ตั้งใจfg
ฉันไม่รู้วิธีที่จะผลักดันมันกลับมา: D
PS1
ดังนั้นฉันใส่มากที่สุดของสิ่งที่ฉันต้องการลงในบรรทัดด้านล่างหน้าจอของฉัน ...