? Čeština ∙ Deutsch ∙ ελληνικά ∙ bahasa Inggris ∙ español ∙ français ∙ indonesia ∙ Italiano ∙ 日本語 ∙ 한국어 ∙ ∙ ∙ 繁體中文 ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї ї
Catatan: Saya berencana untuk merevisi ini dan mencari rekan penulis baru untuk membantu memperluas ini menjadi panduan yang lebih komprehensif. Meskipun sangat populer, itu bisa lebih luas dan sedikit lebih dalam. Jika Anda suka menulis dan hampir menjadi ahli dalam materi ini dan bersedia mempertimbangkan untuk membantu, tolong beri saya catatan di Josh (0x40) Holloway.com. –Jlevy, Holloway. Terima kasih!

Kelancaran pada baris perintah adalah keterampilan yang sering diabaikan atau dianggap misterius, tetapi meningkatkan fleksibilitas dan produktivitas Anda sebagai insinyur dengan cara yang jelas dan halus. Ini adalah pilihan catatan dan tips tentang menggunakan baris perintah yang kami temukan berguna saat mengerjakan Linux. Beberapa tips adalah dasar, dan beberapa cukup spesifik, canggih, atau tidak jelas. Halaman ini tidak lama, tetapi jika Anda dapat menggunakan dan mengingat semua item di sini, Anda tahu banyak.
Karya ini adalah hasil dari banyak penulis dan penerjemah. Beberapa dari ini awalnya muncul di Quora, tetapi sejak itu pindah ke GitHub, di mana orang yang lebih berbakat daripada penulis asli telah membuat banyak perbaikan. Harap kirimkan pertanyaan jika Anda memiliki pertanyaan yang terkait dengan baris perintah. Harap berkontribusi jika Anda melihat kesalahan atau sesuatu yang bisa lebih baik!
Cakupan:
Catatan:
apt , yum , dnf , pacman , pip atau brew (jika sesuai) untuk menginstal program baru. Pelajari bash dasar. Sebenarnya, tipe man bash dan setidaknya membaca semuanya; Cukup mudah untuk diikuti dan tidak selama itu. Cangkang alternatif bisa menyenangkan, tetapi bash sangat kuat dan selalu tersedia ( hanya belajar zsh, ikan, dll., Sambil menggoda laptop Anda sendiri, membatasi Anda dalam banyak situasi, seperti menggunakan server yang ada).
Pelajari setidaknya satu editor berbasis teks dengan baik. Editor nano adalah salah satu yang paling sederhana untuk pengeditan dasar (membuka, mengedit, menyimpan, mencari). Namun, untuk pengguna daya di terminal teks, tidak ada pengganti untuk VIM ( vi ), editor yang sulit dipelajari tetapi terhormat, cepat, dan berfitur lengkap. Banyak orang juga menggunakan Emacs klasik, terutama untuk tugas pengeditan yang lebih besar. (Tentu saja, setiap pengembang perangkat lunak modern yang bekerja pada proyek yang luas tidak mungkin hanya menggunakan editor berbasis teks murni dan juga harus terbiasa dengan IDE dan alat grafis modern.)
Menemukan Dokumentasi:
man (untuk orang -orang yang ingin tahu, man man mencantumkan nomor bagian, misalnya 1 adalah perintah "reguler", 5 adalah file/konvensi, dan 8 adalah untuk administrasi). Temukan halaman pria dengan apropos .help dan help -d . Anda dapat mengetahui apakah suatu perintah yang dapat dieksekusi, shell builtin atau alias dengan menggunakan type command .curl cheat.sh/command akan memberikan "cheat sheet" singkat dengan contoh umum tentang cara menggunakan perintah shell. Pelajari tentang pengalihan output dan input menggunakan > dan < dan pipa menggunakan | . Ketahui > Menimpa file output dan >> Tambahkan. Pelajari tentang Stdout dan Stderr.
Pelajari tentang Ekspansi File Glob dengan * (dan mungkin ? Dan [ ... ] ) dan mengutip dan perbedaan antara ganda " dan ' kutipan. (Lihat lebih lanjut tentang ekspansi variabel di bawah ini.)
Jadilah akrab dengan manajemen pekerjaan bash: & , ctrl-z , ctrl-c , jobs , fg , bg , kill , dll.
Ketahui ssh , dan Dasar-dasar Otentikasi Tanpa Kata Sandi, melalui ssh-agent , ssh-add , dll.
Manajemen File Dasar: ls dan ls -l (khususnya, pelajari apa artinya setiap kolom dalam ls -l ), less , head , tail dan tail -f (atau bahkan lebih baik, less +F ), ln dan ln -s (pelajari perbedaan dan keuntungan dari tautan keras versus soft), chown , chmod , du (untuk ringkasan cepat penggunaan DISK: du -hs * ). Untuk Manajemen Sistem File, df , mount , fdisk , mkfs , lsblk . Pelajari apa itu inode ( ls -i atau df -i ).
Manajemen Jaringan Dasar: ip atau ifconfig , dig , traceroute , route .
Pelajari dan gunakan sistem manajemen kontrol versi, seperti git .
Ketahui ekspresi reguler dengan baik, dan berbagai bendera untuk grep / egrep . Opsi -i , -o , -v , -A , -B , dan -C patut diketahui.
Belajar menggunakan apt-get , yum , dnf atau pacman (tergantung pada distro) untuk menemukan dan menginstal paket. Dan pastikan Anda memiliki pip untuk menginstal alat baris perintah berbasis Python (beberapa di bawah ini paling mudah dipasang melalui pip ).
Di Bash, gunakan tab untuk menyelesaikan argumen atau daftar semua perintah yang tersedia dan CTRL-R untuk mencari melalui riwayat perintah (setelah menekan, ketik untuk mencari, tekan CTRL-R berulang kali untuk bersepeda melalui lebih banyak kecocokan, tekan ENTER untuk mengeksekusi perintah yang ditemukan, atau tekan panah kanan untuk menempatkan hasil pada baris saat ini untuk memungkinkan pengeditan).
Dalam Bash, gunakan Ctrl-W untuk menghapus kata terakhir, dan Ctrl-U untuk menghapus konten dari kursor saat ini kembali ke awal garis. Gunakan Alt-B dan Alt-F untuk bergerak demi kata, Ctrl-A untuk memindahkan kursor ke awal garis, Ctrl-E untuk memindahkan kursor ke ujung garis, Ctrl-K untuk membunuh ke ujung garis, Ctrl-L untuk menghapus layar. Lihat man readline untuk semua bintas keybinding default di bash. Ada banyak. Misalnya alt-. Siklus melalui argumen sebelumnya, dan Alt- * memperluas glob.
Atau, jika Anda menyukai ikatan kunci gaya VI, gunakan set -o vi (dan set -o emacs untuk mengembalikannya).
Untuk mengedit perintah panjang, setelah mengatur editor Anda (misalnya export EDITOR=vim ), ctrl-x ctrl-e akan membuka perintah saat ini dalam editor untuk pengeditan multi-line. Atau dalam gaya VI, Escape-V .
Untuk melihat perintah terbaru, gunakan history . Ikuti dengan !n (di mana n adalah nomor perintah) untuk dieksekusi lagi. Ada juga banyak singkatan yang dapat Anda gunakan, yang paling berguna mungkin !$ Untuk argumen terakhir dan !! Untuk perintah terakhir (lihat "Ekspansi Sejarah" di halaman Manusia). Namun, ini sering mudah diganti dengan Ctrl-R dan Alt-. .
Pergi ke direktori rumah Anda dengan cd . Akses file relatif ke direktori home Anda dengan ~ awalan (misalnya ~/.bashrc ). Dalam skrip sh merujuk ke direktori home sebagai $HOME .
Untuk kembali ke direktori kerja sebelumnya: cd - .
Jika Anda setengah jalan mengetik perintah tetapi ubah pikiran Anda, tekan alt- # untuk menambahkan # di awal dan masukkan sebagai komentar (atau gunakan CTRL-A , # , masukkan ). Anda kemudian dapat kembali nanti melalui riwayat perintah.
Gunakan xargs (atau parallel ). Ini sangat kuat. Catatan Anda dapat mengontrol berapa banyak item yang dijalankan per baris ( -L ) serta paralelisme ( -P ). Jika Anda tidak yakin apakah itu akan melakukan hal yang benar, gunakan xargs echo terlebih dahulu. Juga, -I{} berguna. Contoh:
find . -name ' *.py ' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname pstree -p adalah tampilan yang bermanfaat dari pohon proses.
Gunakan pgrep dan pkill untuk menemukan atau proses sinyal dengan nama ( -f sangat membantu).
Ketahui berbagai sinyal yang dapat Anda kirim proses. Misalnya, untuk menangguhkan suatu proses, gunakan kill -STOP [pid] . Untuk daftar lengkapnya, lihat man 7 signal
Gunakan nohup atau disown jika Anda ingin proses latar belakang terus berjalan selamanya.
Periksa proses apa yang mendengarkan melalui netstat -lntp atau ss -plat (untuk tcp; add -u untuk udp) atau lsof -iTCP -sTCP:LISTEN -P -n (yang juga berfungsi pada macOS).
Lihat juga lsof dan fuser untuk soket dan file terbuka.
Lihat uptime atau w untuk mengetahui berapa lama sistem telah berjalan.
Gunakan alias untuk membuat pintasan untuk perintah yang umum digunakan. Misalnya, alias ll='ls -latr' menciptakan alias baru ll
Simpan alias, pengaturan shell, dan fungsi yang biasa Anda gunakan di ~/.bashrc , dan atur agar cangkang login untuk sumbernya. Ini akan membuat pengaturan Anda tersedia di semua sesi shell Anda.
Letakkan pengaturan variabel lingkungan serta perintah yang harus dieksekusi saat Anda masuk ~/.bash_profile . Konfigurasi terpisah akan diperlukan untuk shell yang Anda luncurkan dari login lingkungan grafis dan pekerjaan cron .
Menyinkronkan file konfigurasi Anda (misalnya .bashrc dan .bash_profile ) di antara berbagai komputer dengan git.
Pahami bahwa perawatan diperlukan ketika variabel dan nama file termasuk whitespace. Kelilingi variabel bash Anda dengan kutipan, misalnya "$FOO" . Lebih suka opsi -0 atau -print0 untuk mengaktifkan karakter nol untuk membatasi nama file, misalnya locate -0 pattern | xargs -0 ls -al atau find / -print0 -type d | xargs -0 ls -al . Untuk mengulangi nama file yang berisi whitespace dalam loop untuk loop, atur IFS Anda untuk menjadi garis baru hanya menggunakan IFS=$'n' .
Dalam skrip bash, gunakan set -x (atau varian set -v , yang log input mentah, termasuk variabel dan komentar yang tidak diperluas) untuk output debugging. Gunakan mode ketat kecuali Anda memiliki alasan yang baik untuk tidak: Gunakan set -e untuk membatalkan kesalahan (kode keluar nol). Gunakan set -u untuk mendeteksi penggunaan variabel yang tidak disetel. Pertimbangkan set -o pipefail juga, untuk membatalkan kesalahan dalam pipa (meskipun lebih banyak membacanya jika Anda melakukannya, karena topik ini agak halus). Untuk skrip yang lebih terlibat, juga gunakan trap di Exit atau ERR. Kebiasaan yang bermanfaat adalah memulai skrip seperti ini, yang akan membuatnya mendeteksi dan membatalkan kesalahan umum dan mencetak pesan:
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 Dalam bash, perhatikan ada banyak jenis ekspansi variabel. Memeriksa variabel ada: ${name:?error message} . Misalnya, jika skrip bash membutuhkan argumen tunggal, cukup tulis input_file=${1:?usage: $0 input_file} . Menggunakan nilai default jika suatu variabel kosong: ${name:-default} . Jika Anda ingin memiliki parameter tambahan (opsional) yang ditambahkan ke contoh sebelumnya, Anda dapat menggunakan sesuatu seperti output_file=${2:-logfile} . Jika $2 dihilangkan dan dengan demikian kosong, output_file akan diatur ke logfile . Ekspansi aritmatika: i=$(( (i + 1) % 5 )) . Urutan: {1..10} . Pemangkasan string: ${var%suffix} dan ${var#prefix} . Misalnya jika var=foo.pdf , lalu echo ${var%.pdf}.txt mencetak foo.txt .
Ekspansi brace menggunakan { ... } dapat mengurangi harus mengetik ulang teks serupa dan mengotomatiskan kombinasi item. Ini sangat membantu dalam contoh-contoh seperti mv foo.{txt,pdf} some-dir (yang menggerakkan kedua file), cp somefile{,.bak} (yang mengembang ke cp somefile somefile.bak ) atau mkdir -p test-{a,b,c}/subtest-{1,2,3} . Perluasan brace dilakukan sebelum ekspansi lainnya.
Urutan ekspansi adalah: Ekspansi Brace; Ekspansi Tilde, Parameter dan Ekspansi Variabel, Ekspansi Aritmatika, dan Substitusi Perintah (dilakukan dengan cara kiri-ke-kanan); pemisahan kata; dan ekspansi nama file. (Misalnya, rentang seperti {1..20} tidak dapat diekspresikan dengan variabel menggunakan {$a..$b} . Gunakan seq atau for loop sebagai gantinya, misalnya, seq $a $b atau for((i=a; i<=b; i++)); do ... ; done .)
Output dari suatu perintah dapat diperlakukan seperti file melalui <(some command) (dikenal sebagai substitusi proses). Misalnya, bandingkan lokal /etc/hosts dengan yang jauh:
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
Dalam Bash, redirect baik output standar dan kesalahan standar melalui: some-command >logfile 2>&1 atau some-command &>logfile . Seringkali, untuk memastikan suatu perintah tidak meninggalkan pegangan file terbuka ke input standar, mengikatnya ke terminal tempat Anda berada, itu juga praktik yang baik untuk menambahkan </dev/null .
Gunakan man ascii untuk tabel ASCII yang baik, dengan hex dan nilai desimal. Untuk info pengkodean umum, man unicode , man utf-8 , dan man latin1 sangat membantu.
Gunakan screen atau tmux untuk multipleks layar, terutama berguna pada sesi SSH jarak jauh dan untuk melepaskan dan melatih kembali ke sesi. byobu dapat meningkatkan layar atau TMUX dengan memberikan lebih banyak informasi dan manajemen yang lebih mudah. Alternatif yang lebih minim hanya untuk kegigihan sesi adalah dtach .
Di SSH, mengetahui cara port terowongan dengan -L atau -D (dan kadang -kadang -R ) berguna, misalnya untuk mengakses situs web dari server jarak jauh.
Dapat bermanfaat untuk membuat beberapa optimasi ke konfigurasi SSH Anda; Misalnya, ~/.ssh/config ini berisi pengaturan untuk menghindari koneksi yang dijatuhkan di lingkungan jaringan tertentu, menggunakan kompresi (yang bermanfaat dengan SCP melalui koneksi bandwidth rendah), dan saluran multipleks ke server yang sama dengan file kontrol lokal:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
Beberapa opsi lain yang relevan dengan SSH adalah sensitif keamanan dan harus diaktifkan dengan hati -hati, misalnya per subnet atau host atau dalam jaringan tepercaya: StrictHostKeyChecking=no , ForwardAgent=yes
Pertimbangkan mosh sebagai alternatif untuk SSH yang menggunakan UDP, menghindari koneksi yang jatuh dan menambahkan kenyamanan di jalan (membutuhkan pengaturan sisi server).
Untuk mendapatkan izin pada file dalam bentuk oktal, yang berguna untuk konfigurasi sistem tetapi tidak tersedia di ls dan mudah untuk bersungut, gunakan sesuatu seperti
stat -c ' %A %a %n ' /etc/timezone Untuk pemilihan nilai interaktif dari output perintah lain, gunakan percol atau fzf .
Untuk interaksi dengan file berdasarkan output dari perintah lain (seperti git ), gunakan fpp (Pathpicker).
Untuk server web sederhana untuk semua file di direktori saat ini (dan subdirs), tersedia untuk siapa saja di jaringan Anda, gunakan: python -m SimpleHTTPServer 7777 (untuk port 7777 dan python 2) dan python -m http.server 7777 (untuk port 7777 dan python 3).
Untuk menjalankan perintah sebagai pengguna lain, gunakan sudo . Default untuk berjalan sebagai root; Gunakan -u untuk menentukan pengguna lain. Gunakan -i untuk masuk sebagai pengguna itu (Anda akan diminta kata sandi Anda ).
Untuk beralih shell ke pengguna lain, gunakan su username atau su - username . Yang terakhir dengan "-" mendapatkan lingkungan seolah-olah pengguna lain baru saja masuk. Menghilangkan nama pengguna default untuk root. Anda akan diminta kata sandi pengguna yang Anda ganti .
Ketahui tentang batas 128K pada baris perintah. Kesalahan "Daftar Terlalu Panjang" ini adalah umum ketika wildcard mencocokkan sejumlah besar file. (Ketika ini terjadi alternatif seperti find dan xargs dapat membantu.)
Untuk kalkulator dasar (dan tentu saja akses ke Python secara umum), gunakan juru bahasa python . Misalnya,
>>> 2+3
5
Untuk menemukan file berdasarkan nama di direktori saat ini, find . -iname '*something*' (atau serupa). Untuk menemukan file di mana saja dengan nama, gunakan locate something (tetapi perlu updatedb mungkin tidak telah mengindeks file yang baru -baru ini dibuat).
Untuk pencarian umum melalui file sumber atau data, ada beberapa opsi yang lebih canggih atau lebih cepat dari grep -r , termasuk (dalam urutan kasar dari yang lebih tua ke yang lebih baru) ack , ag ("The Silver Searcher"), dan rg (RIPGREP).
Untuk mengonversi html menjadi teks: lynx -dump -stdin
Untuk Markdown, HTML, dan semua jenis konversi dokumen, coba pandoc . Misalnya, untuk mengonversi dokumen markdown ke format kata: pandoc README.md --from markdown --to docx -o temp.docx
Jika Anda harus menangani XML, xmlstarlet sudah tua tapi bagus.
Untuk JSON, gunakan jq . Untuk penggunaan interaktif, lihat juga jid dan jiq .
Untuk YAML, gunakan shyaml .
Untuk file Excel atau CSV, CSVKIT menyediakan in2csv , csvcut , csvjoin , csvgrep , dll.
Untuk Amazon S3, s3cmd nyaman dan s4cmd lebih cepat. aws Amazon dan saws yang ditingkatkan sangat penting untuk tugas-tugas terkait AWS lainnya.
Ketahui tentang sort dan uniq , termasuk opsi uniq -u dan -d -lihat satu kalimat di bawah ini. Lihat juga comm .
Ketahui tentang cut , paste , dan join untuk memanipulasi file teks. Banyak orang menggunakan cut tetapi lupa tentang join .
Ketahui tentang wc untuk menghitung newline ( -l ), karakter ( -m ), kata -kata ( -w ) dan byte ( -c ).
Tahu tentang tee untuk menyalin dari stdin ke file dan juga ke stdout, seperti di ls -al | tee file.txt .
Untuk perhitungan yang lebih kompleks, termasuk pengelompokan, membalikkan bidang, dan perhitungan statistik, pertimbangkan datamash .
Ketahuilah bahwa lokal mempengaruhi banyak alat baris perintah dengan cara yang halus, termasuk urutan penyortiran (kolasi) dan kinerja. Sebagian besar instalasi Linux akan mengatur LANG atau variabel lokal lainnya ke pengaturan lokal seperti US English. Tetapi ketahuilah penyortiran akan berubah jika Anda mengubah lokal. Dan tahu rutinitas I18N dapat membuat pengurut atau perintah lain berjalan berkali -kali lebih lambat. Dalam beberapa situasi (seperti operasi yang ditetapkan atau operasi keunikan di bawah ini) Anda dapat dengan aman mengabaikan rutinitas I18N yang lambat dan menggunakan urutan pengurutan berbasis byte tradisional, menggunakan export LC_ALL=C
Anda dapat mengatur lingkungan perintah tertentu dengan mengawali doa dengan pengaturan variabel lingkungan, seperti pada TZ=Pacific/Fiji date .
Ketahui awk Dasar dan sed untuk Munging Data Sederhana. Lihat satu kalimat untuk contoh.
Untuk mengganti semua kemunculan string di tempat, dalam satu atau lebih file:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren . (Dalam beberapa kasus perintah rename juga memungkinkan ganti nama beberapa, tetapi berhati -hatilah karena fungsinya tidak sama pada semua distribusi 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 benar -benar merupakan alat penyalinan file yang cepat dan luar biasa. Dikenal untuk sinkronisasi antar mesin tetapi sama -sama berguna secara lokal. Ketika pembatasan keamanan memungkinkan, menggunakan rsync alih -alih scp memungkinkan pemulihan transfer tanpa memulai kembali dari awal. Ini juga merupakan salah satu cara tercepat untuk menghapus sejumlah besar file: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir Untuk memantau kemajuan saat memproses file, gunakan pv , pycp , pmonitor , progress , rsync --progress , atau, untuk penyalinan level blok, dd status=progress .
Gunakan shuf untuk mengocok atau memilih baris acak dari file.
Tahu opsi sort . Untuk angka, gunakan -n , atau -h untuk menangani angka yang dapat dibaca manusia (misalnya dari du -h ). Ketahui cara kerja kunci ( -t dan -k ). Secara khusus, waspadalah bahwa Anda perlu menulis -k1,1 untuk mengurutkan hanya bidang pertama; -k1 berarti mengurutkan sesuai dengan seluruh baris. Sortir stabil ( sort -s ) dapat bermanfaat. Misalnya, untuk mengurutkan lebih dulu berdasarkan bidang 2, lalu secara kedua berdasarkan bidang 1, Anda dapat menggunakan sort -k1,1 | sort -s -k2,2 .
Jika Anda perlu menulis tab literal dalam baris perintah di bash (misalnya untuk argumen -t untuk mengurutkan), tekan Ctrl -V [tab] atau tulis $'t' (yang terakhir lebih baik karena Anda dapat menyalin/menempelnya).
Alat standar untuk menambal kode sumber adalah diff dan patch . Lihat juga diffstat untuk ringkasan statistik diff dan sdiff untuk diff berdampingan. Catatan diff -r berfungsi untuk seluruh direktori. Gunakan diff -r tree1 tree2 | diffstat untuk ringkasan perubahan. Gunakan vimdiff untuk membandingkan dan mengedit file.
Untuk file biner, gunakan hd , hexdump atau xxd untuk dump hex sederhana dan bvi , hexedit atau biew untuk pengeditan biner.
Juga untuk file biner, strings (ditambah grep , dll.) Memungkinkan Anda menemukan bit teks.
Untuk binary diffs (kompresi delta), gunakan xdelta3 .
Untuk mengonversi pengkodean teks, coba iconv . Atau uconv untuk penggunaan yang lebih maju; Ini mendukung beberapa hal unicode canggih. Misalnya:
# 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 Untuk membagi file menjadi potongan -potongan, lihat split (untuk dibagi berdasarkan ukuran) dan csplit (untuk dibagi berdasarkan pola).
Tanggal dan Waktu: Untuk mendapatkan tanggal dan waktu saat ini dalam format ISO 8601 yang bermanfaat, Gunakan date -u +"%Y-%m-%dT%H:%M:%SZ" (Opsi lain bermasalah). Untuk memanipulasi ekspresi tanggal dan waktu, gunakan dateadd , datediff , strptime dll dari dateutils .
Gunakan zless , zmore , zcat , dan zgrep untuk beroperasi pada file terkompresi.
Atribut file disetel melalui chattr dan menawarkan alternatif tingkat rendah untuk izin file. Misalnya, untuk melindungi dari penghapusan file yang tidak disengaja, bendera yang tidak dapat diubah: sudo chattr +i /critical/directory/or/file
Gunakan getfacl dan setfacl untuk menyimpan dan mengembalikan izin file. Misalnya:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (membuat file yang jarang), fallocate (Ext4, XFS, BTRFS dan OCFS2 Filesystems), xfs_mkfile (hampir semua sistem file, hadir dalam paket XFSPROGS), mkfile (untuk sistem seperti Unix seperti Solaris, Mac OS). Untuk debugging web, curl dan curl -I berguna, atau setara wget mereka, atau httpie yang lebih modern.
Untuk mengetahui status CPU/Disk saat ini, alat klasik adalah top (atau htop yang lebih baik), iostat , dan iotop . Gunakan iostat -mxz 15 untuk CPU dasar dan statistik disk per -partisi terperinci dan wawasan kinerja.
Untuk detail koneksi jaringan, gunakan netstat dan ss .
Untuk ikhtisar cepat tentang apa yang terjadi pada suatu sistem, dstat sangat berguna. Untuk tinjauan luas dengan detail, gunakan glances .
Untuk mengetahui status memori, jalankan dan pahami output free dan vmstat . Secara khusus, ketahuilah nilai "di -cache" adalah memori yang dipegang oleh kernel Linux sebagai cache file, secara efektif diperhitungkan terhadap nilai "bebas".
Java System Debugging adalah ketel ikan yang berbeda, tetapi trik sederhana pada Oracle dan beberapa JVM lainnya adalah Anda dapat menjalankan kill -3 <pid> dan jejak tumpukan penuh dan ringkasan tumpukan (termasuk detail pengumpulan sampah generasi, yang dapat sangat informatif) akan dibuang ke stderr/log. JDK jps , jstat , jstack , jmap bermanfaat. Alat SJK lebih maju.
Gunakan mtr sebagai Traceroute yang lebih baik, untuk mengidentifikasi masalah jaringan.
Untuk melihat mengapa disk penuh, ncdu menghemat waktu atas perintah yang biasa seperti du -sh * .
Untuk menemukan soket atau proses mana yang menggunakan bandwidth, coba iftop atau nethogs .
Alat ab (dilengkapi dengan Apache) sangat membantu untuk memeriksa kinerja server web yang cepat. Untuk pengujian beban yang lebih kompleks, coba siege .
Untuk Debugging Jaringan yang Lebih Serius, wireshark , tshark , atau ngrep .
Tahu tentang strace dan ltrace . Ini dapat membantu jika suatu program gagal, digantung, atau mogok, dan Anda tidak tahu mengapa, atau jika Anda ingin mendapatkan ide umum tentang kinerja. Perhatikan opsi profil ( -c ), dan kemampuan untuk melampirkan proses berjalan ( -p ). Gunakan Opsi Lacak Anak ( -f ) untuk menghindari hilangnya panggilan penting.
Ketahui tentang ldd untuk memeriksa perpustakaan bersama dll - tetapi tidak pernah menjalankannya pada file yang tidak dipercaya.
Ketahui cara terhubung ke proses berjalan dengan gdb dan dapatkan jejak tumpukannya.
Gunakan /proc . Terkadang sangat membantu saat men -debug masalah langsung. Contoh: /proc/cpuinfo , /proc/meminfo , /proc/cmdline , /proc/xxx/cwd , /proc/xxx/exe , /proc/xxx/fd/ , /proc/xxx/smaps (di mana xxx adalah ID proses atau PID).
Ketika men -debug mengapa ada yang salah di masa lalu, sar bisa sangat membantu. Ini menunjukkan statistik historis tentang CPU, memori, jaringan, dll.
Untuk sistem yang lebih dalam dan analisis kinerja, lihat stap (SystemTap), perf , dan sysdig .
Periksa OS apa yang Anda ikuti dengan uname atau uname -a (Umum UNIX/Kernel Info) atau lsb_release -a (Linux Distro Info).
Gunakan dmesg setiap kali ada yang bertindak sangat lucu (bisa jadi masalah perangkat keras atau driver).
Jika Anda menghapus file dan tidak membebaskan ruang disk yang diharapkan seperti yang dilaporkan oleh du , periksa apakah file tersebut digunakan oleh suatu proses: lsof | grep deleted | grep "filename-of-my-big-file"
Beberapa contoh perintah bersama -sama:
sort / uniq . Misalkan a dan b adalah file teks yang sudah unik. Ini cepat, dan berfungsi pada file dengan ukuran sewenang -wenang, hingga banyak gigabyte. (Sortir tidak dibatasi berdasarkan memori, meskipun Anda mungkin perlu menggunakan opsi -T jika /tmp ada di partisi root kecil.) Lihat juga catatan tentang LC_ALL di atas dan sort opsi -u (ditinggalkan untuk kejelasan di bawah). 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
Gunakan grep . * Untuk dengan cepat memeriksa konten semua file dalam direktori (jadi setiap baris dipasangkan dengan nama file), atau head -100 * (jadi setiap file memiliki judul). Ini dapat berguna untuk direktori yang diisi dengan pengaturan konfigurasi seperti yang ada di /sys , /proc , /etc .
Menyimpulkan semua angka di kolom ketiga file teks (ini mungkin 3x lebih cepat dan 3x lebih sedikit kode dari python yang setara):
awk ' { x += $3 } END { print x } ' myfilels -l rekursif tetapi lebih mudah dibaca daripada ls -lR : find . -type f -lsacct_id yang ada dalam URL. Jika Anda menginginkan penghitungan berapa banyak permintaan untuk setiap acct_id : egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn Untuk terus memantau perubahan, gunakan watch , misalnya memeriksa perubahan pada file dalam direktori dengan watch -d -n 2 'ls -rtlh | tail' atau ke pengaturan jaringan sambil memecahkan masalah pengaturan wifi Anda dengan watch -d -n 2 ifconfig .
Jalankan fungsi ini untuk mendapatkan tip acak dari dokumen ini (parses markdown dan mengekstrak item):
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 : Lakukan operasi aritmatika atau boolean atau evaluasi ekspresi reguler
m4 : Prosesor makro sederhana
yes : banyak mencetak string
cal : Kalender yang bagus
env : Jalankan perintah (berguna dalam skrip)
printenv : Cetak Variabel Lingkungan (Berguna dalam Debugging dan Script)
look : Temukan kata -kata bahasa Inggris (atau baris dalam file) dimulai dengan string
cut , paste dan join : Manipulasi Data
fmt : format paragraf teks
pr : Format teks ke halaman/kolom
fold : Bungkus garis teks
column : Format bidang teks ke dalam kolom atau tabel yang selaras dan tetap
expand dan unexpand : Konversi Antara Tab dan Spaces
nl : Tambahkan nomor baris
seq : Nomor cetak
bc : Kalkulator
factor : Faktor bilangan bulat
gpg : Enkripsi dan menandatangani file
toe : tabel entri terminfo
nc : Debugging Jaringan dan Transfer Data
socat : Socket Relay dan TCP Port Forwarder (Mirip dengan netcat )
slurm : Visualisasi Lalu Lintas Jaringan
dd : Memindahkan data antara file atau perangkat
file : Identifikasi jenis file
tree : Tampilan direktori dan subdirektori sebagai pohon bersarang; seperti ls tetapi rekursif
stat : Info File
time : Eksekusi dan Waktu Perintah
timeout : Jalankan perintah untuk jumlah waktu yang ditentukan dan hentikan proses ketika jumlah waktu yang ditentukan selesai.
lockfile : Buat file semaphore yang hanya dapat dihapus oleh rm -f
logrotate : Putar, kompres, dan log surat.
watch : Jalankan perintah berulang kali, menunjukkan hasil dan/atau menyoroti perubahan
when-changed : menjalankan perintah apa pun yang Anda tentukan kapan pun ia melihat file diubah. Lihat inotifywait dan entr juga.
tac : Cetak file secara terbalik
comm : Bandingkan file yang disortir baris dengan baris
strings : Ekstrak teks dari file biner
tr : Terjemahan atau manipulasi karakter
iconv atau uconv : Konversi untuk Pengkodean Teks
split dan csplit : file pemisahan
sponge : Baca semua input sebelum menulisnya, berguna untuk dibaca sejak saat itu menulis ke file yang sama, misalnya, grep -v something some-file | sponge some-file
units : konversi unit dan perhitungan; Konversi furlong per dua minggu menjadi twips per blink (lihat juga /usr/share/units/definitions.units )
apg : menghasilkan kata sandi acak
xz : Kompresi file rasio tinggi
ldd : Info Perpustakaan Dinamis
nm : Simbol dari file objek
ab atau wrk : Benchmarking Web Server
strace : Debugging Panggilan Sistem
mtr : Traceroute yang lebih baik untuk debugging jaringan
cssh : shell bersamaan visual
rsync : Sinkronisasi file dan folder di atas SSH atau di sistem file lokal
wireshark dan tshark : Penangkapan Paket dan Debugging Jaringan
ngrep : GREP untuk lapisan jaringan
host dan dig : pencarian DNS
lsof : Proses deskriptor file dan info soket
dstat : Statistik Sistem yang Berguna
glances : Tinjauan tingkat tinggi, multi-subsistem
iostat : Statistik Penggunaan Disk
mpstat : Statistik Penggunaan CPU
vmstat : statistik penggunaan memori
htop : Versi Top yang lebih baik
last : Sejarah Login
w : Siapa yang masuk
id : Info Identitas Pengguna/Grup
sar : Statistik Sistem Bersejarah
iftop atau nethogs : Pemanfaatan jaringan berdasarkan soket atau proses
ss : Soket Statistik
dmesg : Pesan Boot dan Sistem Kesalahan
sysctl : Lihat dan Konfigurasikan Parameter Kernel Linux pada Waktu Jalankan
hdparm : manipulasi/kinerja disk SATA/ATA
lsblk : Daftar Blok Perangkat: Tampilan Pohon Disk dan Partisi Disk Anda
lshw , lscpu , lspci , lsusb , dmidecode : Informasi perangkat keras, termasuk CPU, BIOS, RAID, grafik, perangkat, dll.
lsmod dan modinfo : Daftar dan tampilkan detail modul kernel.
fortune , ddate , dan sl : Um, yah, itu tergantung pada apakah Anda mempertimbangkan lokomotif uap dan kutipan zippy "berguna"
Ini adalah item yang relevan hanya pada macOS.
Manajemen paket dengan brew (homebrew) dan/atau port (macports). Ini dapat digunakan untuk menginstal pada macO banyak perintah di atas.
Salin output dari perintah apa pun ke aplikasi desktop dengan pbcopy dan tempel input dari satu dengan pbpaste .
Untuk mengaktifkan kunci opsi di terminal macOS sebagai tombol alt (seperti yang digunakan dalam perintah di atas seperti alt -b , alt -f , dll.), Buka preferensi -> profil -> keyboard dan pilih opsi "Gunakan sebagai tombol meta".
Untuk membuka file dengan aplikasi desktop, gunakan open atau open -a /Applications/Whatever.app .
Spotlight: Cari file dengan mdfind dan daftar metadata (seperti info foto exif) dengan mdls .
Waspadai macOS didasarkan pada BSD UNIX, dan banyak perintah (misalnya ps , ls , tail , awk , sed ) memiliki banyak variasi halus dari Linux, yang sebagian besar dipengaruhi oleh alat V-style Unix dan GNU gaya V. Anda sering dapat membedakannya dengan mencatat halaman manusia memiliki judul "BSD General Command Manual." Dalam beberapa kasus, versi GNU juga dapat dipasang (seperti gawk dan gsed untuk GNU AWK dan SED). Jika menulis skrip bash lintas platform, hindari perintah tersebut (misalnya, pertimbangkan Python atau perl ) atau tes dengan cermat.
Untuk mendapatkan informasi rilis macOS, gunakan sw_vers .
Item -item ini hanya relevan di Windows.
Akses kekuatan shell UNIX di bawah Microsoft Windows dengan menginstal Cygwin. Sebagian besar hal yang dijelaskan dalam dokumen ini akan bekerja di luar kotak.
Pada Windows 10, Anda dapat menggunakan Subsistem Windows untuk Linux (WSL), yang menyediakan lingkungan bash yang akrab dengan utilitas baris perintah UNIX.
Jika Anda terutama ingin menggunakan alat pengembang GNU (seperti GCC) di Windows, pertimbangkan MINGW dan paket MSYS -nya, yang menyediakan utilitas seperti Bash, Gawk, Make dan Grep. MSYS tidak memiliki semua fitur dibandingkan dengan Cygwin. MINGW sangat berguna untuk membuat port Windows asli alat UNIX.
Opsi lain untuk mendapatkan tampilan dan rasakan UNIX di bawah Windows adalah uang tunai. Perhatikan bahwa hanya sedikit perintah UNIX dan opsi baris perintah yang tersedia di lingkungan ini.
Anda dapat melakukan dan membuat skrip sebagian besar tugas administrasi sistem Windows dari baris perintah dengan belajar dan menggunakan wmic .
Alat jaringan windows baris perintah asli Anda mungkin berguna termasuk ping , ipconfig , tracert , dan netstat .
Anda dapat melakukan banyak tugas windows yang berguna dengan memanggil perintah Rundll32 .
Instal program UNIX tambahan dengan manajer paket Cygwin.
Gunakan mintty sebagai jendela garis perintah Anda.
Akses windows clipboard melalui /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.