Saya ingin membuka diskusi yang akan mengakumulasi praktik dan tip terbaik Linux command line (CLI) Anda.
Saya telah mencari diskusi semacam itu untuk membagikan komentar di bawah ini tetapi belum menemukan satu, karenanya posting ini.
Saya harap kita semua bisa belajar dari ini.
Anda dipersilakan untuk berbagi kiat Bash, grep, sed, AWK, / proc dan semua administrasi sistem Linux / Unix terkait lainnya, memprogram praktik terbaik pemrograman shell untuk kepentingan kita semua.
Jawaban:
Gunakan layar , multiplexer terminal gratis yang dikembangkan oleh Proyek GNU yang memungkinkan Anda memiliki beberapa terminal dalam satu terminal.
Anda dapat memulai sesi dan terminal Anda akan disimpan bahkan ketika koneksi Anda terputus, sehingga Anda dapat melanjutkan nanti atau dari rumah.
sumber
SSH!
SSH adalah perintah dewa - saya pikir itu perintah yang paling berharga untuk dipelajari. Opsi bisa sangat menakutkan, tetapi sepertinya saya terus-menerus belajar menggunakan opsi baris perintah baru untuk SSH yang tidak pernah saya pikir akan diperlukan. Saya mungkin telah menggunakan semuanya pada saat ini.
Semakin banyak Anda menggunakannya, semakin banyak Anda mempelajarinya. Anda dapat menggunakannya untuk melakukan beberapa hal yang LUAR BIASA.
Catatan: SEMUA hal ini dapat dilakukan dari jarak jauh tanpa pengaturan di server Anda kecuali menjalankan ssh server.
Pasang sistem file melalui internet
cari bersih untuk SSHFS
Teruskan perintah .
Protokol SVN + SSH adalah Subversi dari klien jarak jauh ke server tanpa NO DEAMON berjalan di atasnya! Perintah SVN memulai server melalui ssh shell dan meneruskan info bolak-balik melalui pipa yang ada. Program rsync melakukan hal yang sama, berjalan melawan server tanpa deamon rsync dengan memulai sendiri melalui SSH. Sangat mudah untuk menulis file bash Anda sendiri untuk melakukan trik serupa.
Rantai untuk melewati firewall
Saya menggunakan ini sepanjang waktu untuk melompat melalui server linux saya di rumah ke mac saya.
Port
penerusan : Tampaknya hanya cukup bermanfaat sampai Anda menyadari bahwa Anda dapat bangkit melalui firewall rumah Anda dan mengonfigurasi router di rumah dari kantor seolah-olah Anda melakukannya dari dalam jaringan rumah Anda).
Teruskan permintaan X:
Ini satu lagi yang menakjubkan. Dengan atau tanpa server X yang berjalan pada sistem jarak jauh Anda, Anda dapat menjalankan program x-windows dan jendela tersebut akan muncul di layar lokal Anda. Cukup gunakan saklar -X, itu saja!
Karena Anda tidak harus memiliki server X yang berjalan di server jarak jauh Anda, dampak CPU pada server Anda minimal, Anda dapat memiliki server TINY Linux yang menyajikan aplikasi besar ke PC game Anda yang kuat yang menjalankan Windows dan cygwin / X.
Tentu saja VI dan EMACS bekerja pada SSH, tetapi ketika saya berlari di rumah, terkadang saya menginginkan lebih. Saya menggunakan ssh -X untuk memulai salinan Eclipse! Jika server Anda lebih kuat dari laptop Anda, Anda punya GUI di sana di laptop Anda, tetapi kompilasi dilakukan di server Anda, jadi jangan khawatir tentang beban sistem.
Jalankan dalam file batch
(artinya jalankan file batch lokal yang "melakukan hal-hal" pada sistem lain):
Dua hal bergabung untuk menjadikan yang satu ini keren. Salah satunya adalah Anda dapat menghilangkan permintaan kata sandi dengan menggunakan kunci enkripsi (lebih aman). Yang kedua adalah Anda dapat menentukan perintah pada SSH CLI. Saya telah menggunakan ini dalam beberapa cara menarik - Seperti ketika kompilasi gagal pada server jauh, saya akan memasukkan SSH ke komputer saya dan memutar file suara).
Ingat Anda dapat mengarahkan output dari perintah jarak jauh dan menggunakannya dalam file batch lokal Anda, sehingga Anda juga bisa secara lokal mengikuti kompilasi yang berjalan di server Anda.
Dibangun untuk Mac
Baik server dan klien dibangun ke dalam mac dan linux. Dalam kasus Mac dan Ubuntu, mengaktifkan server semudah menemukan kotak centang yang tepat.
Pada PC, instal cygwin atau cygwin / X (cygwin / X akan memungkinkan Anda untuk meneruskan output x-window Anda dari mesin Linux ke PC Windows Anda - ia menginstal server X)
Tips Penting / file konfigurasi
Jangan pernah gunakan port 22 di firewall Anda. Anda akan mendapatkan banyak upaya peretasan, hanya saja tidak sepadan. Hanya perlu firewall Anda meneruskan port yang berbeda ke server Anda.
Ada opsi konfigurasi luas yang memungkinkan Anda untuk menyederhanakan perintah ssh Anda secara signifikan. Berikut ini contoh milik saya di tempat kerja:
Ketika saya mengetik "ssh home" (tidak ada yang lain), ini berfungsi seolah-olah saya telah mengetik:
dan kemudian meneruskan port lokal saya 1025 ke sistem "mac" di rumah. Alasan untuk ini adalah saya memiliki entri lain di file saya:
sehingga setelah saya melakukan "ssh home" dan masih membuka jendela, saya dapat mengetik "ssh mac" dan komputer yang bekerja di sini akan benar-benar mencoba untuk terhubung ke port 1025 sendiri yang telah diteruskan ke "mac: 22 "oleh perintah lain, sehingga akan terhubung ke Mac saya di rumah melalui firewall.
Edit - skrip keren!
Saya menggali skrip lama yang saya sukai - harus kembali dan mempostingnya untuk siapa saja di sini yang mungkin tertarik. Script ini disebut "authMe"
Jika Anda memiliki skrip ini di direktori home Anda dan ada host yang dapat Anda hubungi (melalui ssh), maka Anda dapat mengetikkan "./authMe hostName".
Jika perlu itu akan membuat keypair publik / pribadi untuk Anda, maka itu akan ssh ke mesin lain dan menyalin kunci publik Anda di atas (perintah ssh akan meminta Anda untuk kata sandi ...)
Setelah ini, perintah SSH tidak boleh meminta kata sandi Anda lagi ketika melampirkan ke sistem jarak jauh, itu akan menggunakan keypair publik / pribadi.
Jika komputer jarak jauh Anda tidak selalu aman, Anda harus mempertimbangkan pengaturan "frasa sandi" saat diminta.
Anda mungkin juga ingin mengkonfigurasi server ssh di ujung untuk tidak mengizinkan kata sandi teks (hanya kunci) untuk keamanan tambahan.
sumber
ssh-copy-id
, dan itu sesederhanassh-copy-id user@someserver
Saya suka menggunakan
untuk beralih ke direktori sebelumnya. Sangat berguna!
sumber
Saya baru-baru ini menemukan
pv
perintah (penampil pipa) yang seperti kucing tetapi dengan detail transfer.Jadi, bukannya
Anda dapat gunakan
Jadi, bukannya tidak tahu kapan operasi Anda akan selesai, sekarang Anda akan tahu!
Atas perkenan Peteris Krumins
sumber
tee(1)
.Jalankan kembali perintah sebelumnya sebagai root.
[Perintah teratas saat ini di situs http://www.commandlinefu.com , situs bertema di sepanjang baris pertanyaan ini.]
sumber
Tekan Ctrl-R dan mulai mengetik perintah (atau bagian dari itu) - itu mencari sejarah perintah. Menekan Ctrl-R lagi akan melompat ke pertandingan berikutnya, masukkan mengeksekusi perintah yang ditampilkan saat ini, dan panah kanan (setidaknya) akan membiarkan Anda mengeditnya terlebih dahulu.
Saya telah menggunakan Linux selama kira-kira 7 tahun sebagai OS utama saya sebelum mempelajari hal ini, tetapi sekarang setelah saya mengetahuinya, ini sangat berguna.
sumber
stty -ixon
terlebih dahulu untuk mematikan makna kontrol aliran XON / XOFF (ini juga membuat Ctrl-Q tersedia, secara default itu dipetakan sama dengan Ctrl-V yang dikutip-sisipkan, tetapi Anda dapat mengubahnya ke hal lain ). Lihatman stty
danman readline
untuk informasi lebih lanjut. Thestty
perintah dapat ditambahkan ke~/.bashrc
Baris perintah adalah hal yang lucu. Saya pikir Anda hanya bisa belajar begitu banyak pada Anda sendiri dan sisanya Anda pelajari secara tidak sengaja menonton orang lain menggunakan baris perintah.
Saya menggunakan shell selama bertahun-tahun dengan susah payah mengetikkan nama direktori dengan tangan. Suatu hari saya melihat seorang teman mengacaukan sebuah sistem dan dia terus menekan tombol tab. Saya bertanya "mengapa Anda memukul tab?". Jawab: ia mencoba untuk menyelesaikan direktori atau nama file. Siapa yang akan menebak - penyelesaian tab! Ketik sedikit file atau direktori, tekan tab, dan itu akan mencoba untuk menyelesaikan apa yang Anda ketik (perilaku tergantung pada shell yang mana).
Suatu hari, kata teman itu memperhatikan saya di baris perintah dan menonton saya mengetik sesuatu seperti:
Siapa yang akan menebak !? Dia tidak pernah tahu tentang
popd
/pushd
. Kira kita bahkan ...sumber
Pelajari Vim.
Ini (bisa dibilang) editor terbaik, tetapi pastinya editor terbaik yang tersedia di server Linux kosong.
sumber
Terkadang berguna untuk membiarkan program berjalan bahkan setelah Anda keluar. Saya telah melihat beberapa solusi yang menggunakan layar nohup atau bahkan untuk tujuan itu. Yang paling sederhana yang saya tahu adalah:
Anda juga dapat melepaskan program yang sedang berjalan:
sumber
Ketika saya ingin memastikan bahwa saya menggunakan perintah aktual dan bukan alias, saya menggunakan backslash terkemuka:
sumber
builtin
".Tip ini akan membuat CLI Anda lebih nyaman (setidaknya itu membuat saya):
buat file ~ / .inputrc dengan konten berikut:
Muat ulang bash (mis. Dengan mengetikkan "exec bash"). Saat Anda mengetikkan awalan suatu perintah dan menekan panah ke atas Anda akan menelusuri perintah yang dimulai dengan awalan Anda, misalnya jika Anda mengetik ssh itu akan menunjukkan koneksi lama Anda dengan shell jarak jauh. Jika prompt Anda kosong maka panah ke atas akan menelusuri sejarah dengan cara normal.
sumber
exec bash
man readline
dan menghafal shortcut standar itubind -f ~/.inputrc
untuk memuat ulang inputrc tanpa harus memulai bash baru dan menghapus lingkungan Anda saat ini.Gunakan
&&
alih-alih;
saat menjalankan beberapa perintah sekaligus. Itu berhenti ketika kesalahan terjadi dan tidak menjalankan perintah lain.Contoh klasik:
sumber
dosomething && echo "success" || echo "teh fail"
Saat menulis loop pada baris perintah di bash, saya sering awalan perintah berisiko dengan perintah 'echo'.
Dengan cara ini saya bisa melihat 'sesuatu yang beresiko' secara penuh sebelum berkomitmen untuk menjalankannya. Membantu ketika perintah berisiko Anda mencakup ekspansi variabel dan gumpalan. Dan 'set -x' sangat berguna saat menulis skrip bash.
'set -x' memungkinkan debugging. Lihat http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html untuk informasi tentang debugging bash.
sumber
Kebutuhan
Anda perlu menguji bandwidth maksimum antara 2 server.
Larutan
Pada SERVER1 lakukan:
Pada SERVER2 lakukan:
Anda akan melihat output seperti:
117 MB / s adalah faktor yang menarik di sini, yang menunjukkan bandwidth transfer jaringan yang sebenarnya.
Penjelasan :
Ketika paket akan mulai mengalir melalui jaringan Anda akan dapat melihat statistik bandwidth pada SERVER2, yang merupakan perkiraan yang cukup bagus dari bandwidth maksimum yang mungkin sebenarnya antara 2 server.
Menyalin dengan UDP (untuk mencegah TCP overhead).
Menyalin ke dari memori (/ dev / nol) pada SERVER1 ke memori (/ dev / null) pada SERVER2, sehingga mencegah disk I / O menjadi hambatan.
sumber
Melihat struktur direktori warna lebih mudah.
Sunting
sumber
Beberapa petunjuk kecil tentang melihat log:
sumber
tail -f
Anda dapat menonton banyak log sekaligus! Contoh:tail -f log1.txt -f log2.txt
Saya belajar trik dari seorang teman sejak lama untuk mengubah ekstensi file dengan mudah:
Ekspansi Shell akan memperluas ini ke:
Ini juga dapat digunakan untuk mengubah nama file dengan cara lain, seperti menambahkan sesuatu di:
sumber
ls -l /bin/c
lalu tekan Alt-Shift- {dan itu akan menyelesaikan ini untuk sesuatu sepertils -l /bin/c{at,h{grp,mod,own,vt},p{,io},sh}
untuk Anda.Gunakan "tar xf" untuk mengekstrak arsip terkompresi. J untuk bzip2 dan z untuk gzip tidak diperlukan, karena tar akan mendeteksi tipe file arsip Anda. Tidak ada tanda '-' sebelum argumen. Anda akan menghemat banyak waktu (lebih dari satu milenium ;-)).
Lebih baik lagi gunakan unfoo untuk mengekstrak arsip apa pun dengan satu perintah tanpa argumen yang tidak perlu.
sumber
alias ut="tar xf"
- membuat mengekstraksi arsip lebih mudah.Instal paket bash-completion. Ini berisi sejumlah aturan penyelesaian yang telah ditentukan untuk shell. Aktifkan dengan mengetikkan "source / etc / bash_completion" jika distro Anda tidak melakukannya untuk Anda. Kemudian, misalnya setiap kali Anda menyelesaikan setelah kpdf Anda hanya akan melihat daftar direktori dan file PDF. Ini sama pintarnya dengan menyelesaikan file jarak jauh setelah scp ssh: // server / XXX (jika Anda mengaktifkan login tanpa kata sandi).
sumber
Saya selalu menggunakan yang ini
ALT-. (ESC +. Di beberapa terminal) menyalin argumen yang terakhir digunakan (sangat berguna)
CTRL-W menghapus kata
Terminal jelas CTRL-L (seperti perintah yang jelas tetapi lebih cepat)
ALT-B (ESC + B di beberapa terminal) bergerak mundur satu kata
ALT-F (ESC + F di beberapa terminal) memajukan kata
CTRL-E melompat ke EOL
CTRL-A melompat ke BOL
Pencarian CTRL-R dalam sejarah
sumber
Dalam bash, saya menggunakan ! $ Banyak. Itu mengulangi argumen terakhir dari perintah terakhir:
Ini akan menjalankan ls, maka jika Anda ingin mengeditnya, Anda tidak perlu mengetik ulang, cukup gunakan! $. Ini sangat berguna untuk nama path / file yang panjang. Juga, * mengulangi semua argumen perintah sebelumnya. Saya tidak menggunakannya sebanyak itu, tapi itu terlihat berguna.
Saya tahu mereka telah disebutkan, tetapi saya menggunakan vim, layar, dan cd - banyak.
Saya lupa noclobber:
Dari man bash :
sumber
Alt-.
juga.Beralih dari bash ke zsh , dan lihat produktivitas Anda meningkat:
Google akan memberi tahu Anda lebih banyak manfaat.
sumber
Sekolah lama, memindahkan pohon direktori dari satu tempat ke tempat lain, melestarikan symlink, izin dan semua hal baik itu:
atau di seluruh jaringan
Sekolah baru:
atau di seluruh jaringan
sumber
tar xvBpf - -C /destination
==(cd /destination; tar xvBpf -)
Sedikit kurang mengetik, dan lebih mudah digunakan di atas ssh.rsync -avh
terbaik pada satu mesin -h
memastikan bahwa tautan keras ditransfer dengan benar tanpa mengubah setiap tautan menjadi file terpisah, meskipun jika Anda memiliki banyak file, itu dapat menggunakan banyak memori.rsync -avzh . foo.com/destination
adalah padanan untuk jaringan, dan biasanya Anda tidak memerlukannya-e ssh
karena rsync akan tahu untuk menggunakan ssh.rsync -aSHuvrx --delete / --link-dest=/backup/$PREV /backup/$HOUR
Persyaratan : Anda memiliki direktori yang berisi daftar besar file yang ingin Anda hapus. rm -r akan gagal!
contoh
Solusi :
Penjelasan :
Sunting: Memperbaiki penjelasan berikut komentar @ephemient.
find akan memberikan argumen kepada rm dengan argumen maksimum yang diizinkan. Ini akan memungkinkan rm untuk menghapus file dalam batch yang merupakan teknik tercepat yang saya tahu tanpa menggunakan operasi -delete dari find itu sendiri. Ini setara dengan
yang mungkin berguna bagi Anda jika Anda
find
tidak mendukung-exec ... +
.sumber
\;
dengan+
: makafind
akan melakukan apa yangxargs
dilakukan secara default, yaitu mengumpulkan argumen sebanyak mungkin (tanpa melewati batas daftar argumen). Atau cukup gunakan-delete
intead of-exec rm
(GNU Findutils diperlukan untuk keduanya)find ... -delete
, jika temuan Anda begitu diberkahi.Saya menggunakan dua tips ini begitu sering sehingga saya pikir itu ide yang baik untuk dibagikan:
Akan meluncurkan perintah terakhir dalam file histori yang dimulai dengan "foo" (saya sering menggunakannya saat kompilasi,
!gcc
misalnya.)Yang lainnya adalah pintasan keyboard (Ctrl + O alih-alih Kembali) ini akan menjalankan perintah DAN menampilkan perintah berikutnya dalam file riwayat. Sebagai contoh ketika saya mengkompilasi dan menguji file saya selalu melakukan 3 atau 4 perintah, buat, cd ke dir tes, jalankan tes, cd ke dir makefile. Menggunakan Ctrl + O ini membuat tugas ini jauh lebih mudah :)
Semoga bantuan ini!
sumber
Cara menggunakan subversi di Linux tanpa bantuan antarmuka grafis mewah yang mungkin tidak tersedia.
Ini menghambat banyak pengembang dari menggunakan Linux, anehnya.
sumber
Perintah old-school yang paling diabaikan:
find
Kemarin saya memperbaiki bug izin kotor:
sumber
chmod 644 $(find . -type f)
,chmod 755 $(find . -type d)
-perm
opsifind
untuk mencari file yang izinnya diatur dengan cara tertentu.Untuk kerang seperti
bash
danksh
, Anda dapat membuat baris perintah merespons perintah navigasi seperti editor teks Anda:atau
akan memungkinkan Anda untuk mencari riwayat Anda dan bergerak tentang baris perintah dengan cara yang biasa Anda lakukan dalam file teks (misalnya dalam mode vi, menekan
ESC
lalu mengetik/string
akan mencari perintah "string" sebelumnya - Anda dapat menggunakann
danN
memindahkan antara pertandingan)sumber
grep adalah temanku. Serius.
Daftar
.rb
file yang berisi teksclass foo
:Daftar
.rb
file yang tidak mengandung teksclass foo
:Daftar
.rb
file yang tidak mengandung foo atau bar (Anda dapat menggunakan regexp dengan -e, tetapi Anda harus melarikan diri dari operator):sumber
Substitusi Shell dilakukan dengan
^
:sumber