Bagikan fitur dan trik baris perintah Anda untuk Unix / Linux. Cobalah untuk menyimpannya shell / distro agnostik jika memungkinkan. Tertarik melihat alias, one-liner, pintasan keyboard, skrip shell kecil, dll.
sumber
Bagikan fitur dan trik baris perintah Anda untuk Unix / Linux. Cobalah untuk menyimpannya shell / distro agnostik jika memungkinkan. Tertarik melihat alias, one-liner, pintasan keyboard, skrip shell kecil, dll.
Ini agak memperluas !!
trik yang disebutkan dalam jawaban ini . Sebenarnya ada banyak perintah terkait sejarah yang cenderung dilupakan (orang cenderung menusuk Up100 kali alih-alih mencari perintah yang mereka tahu mereka ketikkan).
history
perintah akan menampilkan daftar baru menjalankan perintah dengan acara penanda ke kiri!N
akan mengganti perintah yang terkait dengan penunjuk acara N
!-N
akan menggantikan perintah terbaru N
th ; mis. !-1
akan menggantikan perintah terbaru, !-2
yang kedua terbaru, dll.!!
adalah singkatan untuk !-1
, dengan cepat mengganti perintah terakhir!string
akan mengganti perintah terbaru yang dimulai dengan string
!?string?
akan menggantikan perintah terbaru yang berisi string
Penunjuk kata dapat ditambahkan ke !
perintah sejarah untuk mengubah hasilnya. Tanda titik dua memisahkan penunjuk acara dan kata, mis !!:0
. Penunjuk acara !!
dapat disingkat menjadi hanya !
ketika menggunakan penunjuk kata, sehingga !!:0
setara dengan !:0
.
!:0
akan mendapatkan perintah yang dieksekusi!:1
akan mendapatkan argumen pertama (dan !:2
yang kedua, dll.)!:2-3
akan mendapatkan argumen kedua dan ketiga!:^
adalah cara lain untuk mendapatkan argumen pertama. !:$
akan mendapatkan yang terakhir!:*
akan mendapatkan semua argumen (tetapi bukan perintah)Pengubah juga dapat ditambahkan ke !
perintah sejarah, masing-masing diawali oleh tanda titik dua. Nomor berapa pun dapat ditumpuk (misalnya !:t:r:p
).
h
- Berbaris ke nama file dasart
- Hanya nama file dasarnyar
- Berbaris ke ekstensi nama filee
- Hanya ekstensi nama files/search/replacement
- Ganti kemunculan pertama search
denganreplacement
gs/search/replacement
- Ganti semua kemunculan search
denganreplacement
!-#
yang baik. Saya memang menggunakan!string
untuk menjalankan perintah terakhir yang dimulai dengan string, tetapi saya biasanya tab-lengkapi dulu (zsh) untuk memastikan saya menjalankan hal yang benar!N
akan menjalankan perintah ..." adalah deskripsi yang terlalu sempit; sebenarnya,!N
akan diganti oleh perintah ...; dan seterusnya untuk semua deskripsi dalam jawaban. Lebih tepat dan membuka kemungkinan lebih bermanfaat! Misalnya, yang disebutkansudo !!
.bash
; di Emacs, untuk menelusuri sejarah perintah dan nilai input (untuk Mx atau nilai baca lainnya) seseorang menggunakan Meta-R sebagai gantinya (Meta-R juga digunakan dieshell
dalam Emacs). Jadi saya sering mengacaukannya.bash - masukkan parameter akhir baris sebelumnya
alt- . kombinasi tombol paling berguna yang pernah ada, coba dan lihat, untuk beberapa alasan tidak ada yang tahu tentang yang ini.
tekan lagi dan lagi untuk memilih parameter terakhir yang lebih lama.
hebat ketika Anda ingin melakukan sesuatu yang lebih pada argumen / file yang Anda gunakan beberapa saat yang lalu.
sumber
alt
-.
itu akan pergi ke perintah sebelumnya dan menarik argumen terakhir dari itu. Jadi jika Anda ingin argumen terakhir dari tiga perintah yang lalu, tekan sajaalt
-.
tiga kali.yank-last-arg
perintah readline, jadi itu harus bekerja dengan program apa pun yang terhubung dengan readline, bukan hanya BASH atau ZSH.Favorit saya adalah
Sederhana dan sangat bermanfaat.
Lihatlah situs web ini commandlinefu.com .
Anda juga dapat melihat empat artikel ini oleh Peteris Krumins di blog-nya
sumber
ascii
Program ini juga berguna. Selain mencetak tabel, ini memungkinkan Anda meminta satu atau lebih karakter individual.Jalankan perintah terakhir sebagai root:
sumber
Tidak yakin apakah ini dianggap sebagai "trik", tetapi orang-orang tampaknya tidak menyadari hotkey readline standar. Penggunaan khusus dalam kerang:
sumber
Ctrl+L
sesuai dengan karakter ascii FormFeed. Biasanya akan menggambar ulang layar dalam aplikasi teks dengan jendela layar (mis. Vim, less, mc, dll). Bagus jika layar telah "tercemar" oleh beberapa output dari program lain.Ctrl+W
untuk memotong satu kata ke belakang,Alt+F
untuk maju satu kata,Alt+B
untuk pergi satu kata ke belakang dalam satu baris. Saya sukaCtrl+Y
danShift+Insert
karena Anda dapat memiliki dua baris yang disalin. Satu denganCtrl+U
(tempel denganCtrl+Y
) dan pada saat yang sama Anda dapat menyalin kata lain (pilih baris) tempel dengan (Shift+Insert
).CTRL+ Rdi BASH untuk mencari / mengaktifkan perintah yang sebelumnya dieksekusi (isi ~ / .bash_history).
Ini seringkali sangat membantu. Menjalankan alias ini akan melayani PWD di atas HTTP (diindeks) pada port 8000:
Dan karena saya menjalankan make sepanjang waktu, dan mengetik dan mengetik terlalu cepat, alias ini mungkin yang paling sering saya gunakan (serius):
Dan mungkin BASH saya yang paling sering digunakan adalah script sederhana yang saya sebut unggah. Saya menggunakannya untuk mencampur segala jenis konten ke Linode saya, dan menyalin URL HTTP yang dihasilkan ke clipboard saya (klik tengah). Sangat berguna untuk menempelkan hal-hal kepada orang-orang di IRC:
Hanya pasangan. Saya dapat memposting lebih banyak lagi nanti, harus kembali bekerja!
sumber
alias mk=make
Lebih cepat mengetik dan kecil kemungkinannya salah. Atau kompilasi dari editor Anda menggunakan hotkey ...alias m=make
, atau bahkanm=make -j6
atau serupa - kecuali saya sudah menggunakanalias m=mutt
☺diff
output dari dua perintah tanpa membuat file sementara secara manual (bash):sumber
comm
hanya mengambil file, tetapi dalam banyak kasus itu membuang-buang inode.Cukup mendasar, tetapi orang-orang sepertinya tidak tahu, mengembalikan Anda ke dir sebelumnya:
sumber
cd..
dari DOS sudah tertanam dalam memori otot saya ...cd
(tanpa argumen) yang akan membawa Anda ke direktori home Anda.Ekspansi Brace :
Ini memungkinkan Anda untuk mengganti garis yang membosankan seperti:
dengan contoh yang lebih pendek
beberapa kegunaan lain
Ekspansi Aritmatika :
sumber
foo[123]
yang akan diperluas kefoo1 foo2 foo3
, tetapi mereka harus nama file untuk bekerja dalam kasus ituIni biasanya dalam skrip startup saya (.bashrc, .profile, apa pun)
shopt
Astaga, periksa komentarnya:Alias yang menyimpan penekanan tombol:
mkdir
dancd
ke dalamnya:Dan last but not least, saya sudah menyerah pada menghafal sintaks tar, jadi:
sumber
mkcd
yang saya beri nama idmd
. Namun menggunakan "$ @" sebagai argumen untuk cd tidak masuk akal karena Anda tidak dapat melakukan cd ke lebih dari satu direktori. "$ @" akan bekerja untuk mkdir, tetapi kemudian Anda menangani argumen secara berbeda untuk mkdir dan cd, jadi saya lebih suka menyarankanmd () { mkdir -p "$1"; cd "$1" }
Dua fungsi bash yang menyelamatkan saya dari banyak goresan kunci.
Lakukan secara otomatis setelah setiap cd yang berhasil:
Naik n level:
sumber
builtin foo
untuk mendapatkan fungsi yang didefinisikancd
; Saya telah menggunakanchdir
fungsi saya. Handycd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
Karena saya biasanya setengah jalan ke baris perintah sebelum ingin mencari (CTRL-R di bash) saya punya yang berikut di .bashrc saya
Ini berarti bahwa jika saya mengetik cd maka tekan atas / bawah saya dapat melihat semua opsi yang saya punya cd. Pada dasarnya saya menggunakan ini untuk dirs yang sering digunakan. Seperti "cd w" dan saya akhirnya melalui semua ruang kerja yang saya gunakan banyak.
sumber
Satu hal yang menghemat banyak waktu adalah perintah pushd / popd. Orang-orang ini memungkinkan Anda membuat tumpukan direktori dan mengurangi banyak mengetik:
sumber
u
dano
berdiri di sini?setopt autopushd
dan semua perubahan direktori akan mendorong secara otomatisThe
screen
perintah . Ini pada dasarnya menyimpan sesi baris perintah Anda ketika Anda kembali. Ini semacam manajer terminal, seperti manajer jendela. Dengan begitu, dalam satu sesi terminal, Anda dapat memiliki beberapa terminal virtual. Keren sekali.Jika digunakan
screen
, fungsi shell ini (.bashrc
sangat bermanfaat):saat mengetik
scr
, itu akan memeriksa apakah sesi utama Anda ada dan akan melampirkannya. Kalau tidak, itu akan membuatnya.sumber
Jika Anda perlu mengedit baris perintah yang sangat panjang di bash
akan membukanya di editor ($ EDITOR).
Di zsh Anda bisa mendapatkan perilaku yang sama dengan menambahkan ini ke .zshrc:
sumber
Jika Anda seorang pengetik cepat, ini berguna:
Makro ini membantu Anda menghitung total kolom output: ukuran file, byte, paket, yang harus Anda lakukan adalah menentukan kolom yang ingin Anda tambahkan:
Anda menggunakannya seperti ini misalnya, tanpa argumen, itu menambah total kolom pertama:
Jika Anda memberikan argumen, itu akan menjumlahkan kolom itu, misalnya, ini memberi Anda jumlah total byte yang digunakan oleh semua file C # di / tmp:
Kadang-kadang konsol Anda menjadi kacau karena Anda secara tidak sengaja melihat file biner (cat / bin / ls misalnya), Anda dapat memulihkan terminal dengan fungsi shell ini:
Saya suka ls saya menggunakan karakter untuk membedakan kelas file, dan juga untuk menyembunyikan file cadangan yang dihasilkan oleh editor saya (file cadangan diakhiri dengan ~ karakter):
sumber
s/fast/sloppy/
reset
tempat Anda gunakanrestaura
.Salah satu favorit saya ketika saya lupa
s
:sumber
bindkey -s '\e[12~' "sudo !!\n"
mengikat (dalam hal ini) F2 untuk menjalankan perintah itu. Saya memiliki ikatan itu, jadi ketika saya menjalankan sesuatu dan melihat pesan kesalahan "Anda lupa 'sudo', bodoh", saya bisa menusuk F2 dengan kesalJika suatu perintah mengambil input stdin, Anda dapat membaca input dari file dengan
<filename
. Ini bisa muncul di mana saja di perintah, jadi baris ini setara:Ini sangat berguna untuk grep, karena memungkinkan Anda untuk menempatkan ekspresi di akhir baris, sehingga Anda dapat dengan cepat memodifikasi perintah grep dengan memukul Up, tanpa perlu menggulir ke kiri untuk melewati nama file:
sumber
<input foo | bar | baz >output
, itu tidak berfungsi jika Anda mencoba mencampur beberapa primitif perulangan shell sepertiwhile
ataufor
di tengah. Jadi saya menyerah dan hanya meletakkannya di akhir sesuai konvensi.Anda dapat menggunakan
CDPATH
untuk mengatur direktori yang setara denganPATH
; jika Anda mencobacd foo
dan tidak adafoo
dalam direktori saat ini, shell akan memeriksa setiap direktori yangCDPATH
dicarifoo
di dalamnya, dan beralih ke yang pertama ditemukan:sumber
Karena ketika Anda tidak tahu di mana sesuatu tinggal, dan Anda juga tidak peduli.
sumber
which
secara otomatis, jadivi =scriptname
$(scriptname)
The ampersand . Ini menempatkan perintah Anda di latar belakang, sehingga Anda dapat melanjutkan mengetik.
Bekerja bersama, dan setelah beberapa saat Anda melihat:
Dan proses Anda selesai! Sangat bagus untuk hal-hal di mana Anda tidak perlu menunggu mereka berakhir.
sumber
&!
ke latar belakang pekerjaan dan singkirkan dari shell!bash
.nohup
menyelesaikan ini.Tab selesai . Seberapa burukkah itu jika Anda harus mengetikkan semua karakter dari setiap jalur?
sumber
rm -fr /
. Jadi ya, penyelesaian Tab sangat penting ...ls /usr/lib/game-d*/rott*
rm -rf /
dinonaktifkan di sebagian besar sistem Linux?Umount perangkat yang terakhir dipasang:
!mo
memperluas ke perintah terakhir yang dimulai denganmo
(setidaknya dalam bash). Terkadang seseorang melakukannyamv
di tengah, jadiu!m
tidak akan bekerja sesering mungkin.sumber
Saya memiliki ini di .bashrc saya
Dan ketika saya memiliki kode sumber html di clipboard dan ingin menemukan semua tautan yang saya gunakan
Dan saya memiliki semua url di clipboard
Saya juga punya fungsi ini
yang ukuran tampilan (dapat dibaca manusia) dan nama file.
alias ini untuk acara temerature
dengan fungsi ini saya dapat menghitung produk atau jumlah argumen.
Ini adalah fungsi yang berguna yang membagi input standar dipisahkan oleh regex dan kemudian bergabung dengan hasilnya.
fungsi faktorial
Fungsi ini menampilkan teks wiki melalui DNS
Saya juga memiliki tiga fungsi warna
Fungsi ini memvalidasi hash file md5.
ini akan menampilkan pesan kesalahan untuk kode yang diberikan
Anda dapat mencetak semua pesan dengan
sumber
Trik ZSH lain yang bermanfaat:
Perlakukan output dari perintah sebagai file:
Ini membuka versi lama file Mercurial-dilacak di emacs untuk melihat sintaks yang disorot. Tanpa itu, saya harus dipusingkan dengan
hg revert
,hg archive
atau secara eksplisit mengirimhg cat
output ke file sementara.Tentu saja, ini berfungsi dengan program apa pun yang membuka file, dan program apa pun yang mencetak ke output standar.
sumber
Sebuah fitur zsh-spesifik alias akhiran, ditetapkan dengan memberikan
alias
para-s
bendera:Jika ekstensi yang diberikan memiliki alias suffix, Anda dapat menjalankan file dengan ekstensi itu secara langsung, dan ZSH akan meluncurkan program yang diberikan dan meneruskan nama file sebagai argumen. Jadi, jika alias di atas berlaku, garis-garis ini setara:
sumber
Salah satu fitur ZSH favorit saya sepanjang masa adalah bernama direktori. Anda bisa mengekspor variabel dengan nama yang diberikan, dengan nilai yang menunjuk ke jalur tertentu:
Sekarang Anda dapat menggunakan
~foo
perintah untuk merujuk ke/usr/bin
:sumber
Lihat pertanyaan ini .
Ketika Anda menjalankan
ps ax | grep string
:baris terakhir berisi
grep
sesuatu yang agak menggangguAnda dapat membebaskan diri dari hal ini dengan menjalankan
ps ax | grep '[s]tring'
:perbarui : atau jalankan saja
pgrep string
sumber
'[o]penbox'
). Tanda kurung akan berfungsi sebagai semacam bola, jadi jika ada openbox di direktori Anda (misalkan Anda berada/usr/bin
) bash hanya akan menggunakan openbox, yang akan mencegah trik grep.Perintah do-nothing
:
seperti padaPerluasan brace dalam kombinasi dengan untuk loop:
!
operator dan operator hubungan arus pendek||
dan&&
menggunakan sub shell bukannya pop / push (berguna dalam skrip)
jenis- apa-apa perintah
type
juga sangat bagus: di sini-string
dan favorit saya: pengalihan pada daftar perintah
sumber
Saya suka membuang barang sebanyak yang saya bisa ke PS1 saya. Beberapa hal berguna untuk diingat:
\e[s
dan\e[u
simpan dan hapuskan posisi kursor masing-masing. Saya menggunakan ini untuk membuat 'info-bar' di bagian atas layar, panjang beberapa baris, yang dapat memuat lebih banyak barang. Contoh:Kombinasikan dengan
alias clear='echo -e "\e[2J\n"'
. Cobalah!Juga,
PROMPT_COMMAND
variabel mendefinisikan perintah untuk dieksekusi sebelum PS1 setiap kali.Satu lagi adalah
bg
perintah. Jika Anda lupa untuk meletakkan&
di akhir perintah, cukup tekan ^Zdan ketikbg
, dan itu berjalan di latar belakang.sumber
bg
, ketika saya memiliki program yang berjalan di latar belakang dan secara tidak sengaja menekanfg
saya tidak tahu bagaimana mendorongnya kembali: DPS1
jadi saya memasukkan sebagian besar barang yang saya inginkan ke dalam layar saya ...