Admin Linux - Skrip Shell
Pengantar Bash Shell
Seperti GNU Linux, shell tersedia dalam banyak variasi dan kompatibilitas yang bervariasi. Shell default di CentOS dikenal sebagai Bash atau Bourne Again Shell. Bash shell adalah versi modifikasi dari Bourne Shell yang dikembangkan oleh Stephen Bourne. Bash adalah pengganti langsung dari Thompson Shell asli pada sistem operasi Unix yang dikembangkan di Bell Labs oleh Ken Thompson dan Dennis Ritchie (Stephen Bourne juga dipekerjakan oleh Bell Labs)
Setiap orang memiliki cangkang favorit dan masing-masing memiliki kekuatan dan kesulitan. Tetapi untuk sebagian besar, Bash akan menjadi shell default di semua distribusi Linux dan paling umum tersedia. Dengan pengalaman, semua orang pasti ingin menjelajahi dan menggunakan shell yang terbaik untuk mereka. Namun pada saat yang sama, semua orang juga ingin menguasai shell Bash.
Kerang Linux lainnya termasuk: Tcsh, Csh, Ksh, Zsh, dan Fish.
Mengembangkan keterampilan untuk menggunakan shell Linux pada tingkat ahli sangat penting bagi administrator CentOS. Seperti yang kami sebutkan sebelumnya, tidak seperti Windows, Linux pada intinya adalah sistem operasi baris perintah. Shell hanyalah antarmuka pengguna yang memungkinkan administrator (atau pengguna) untuk mengeluarkan perintah ke sistem operasi. Jika administrator sistem Linux adalah pilot maskapai penerbangan, menggunakan cangkang akan mirip dengan melepas pesawat dari pilot otomatis dan mengambil kontrol manual untuk penerbangan yang lebih bermanuver.
Shell Linux, seperti Bash, dikenal dalam istilah Ilmu Komputer sebagai a Command Line Interpreter. Microsoft Windows juga memiliki dua penerjemah baris perintah yang disebut DOS (jangan disamakan dengan sistem operasi DOS asli) dan PowerShell.
Kebanyakan cangkang modern seperti yang disediakan Bash constructsmemungkinkan skrip shell yang lebih kompleks untuk mengotomatiskan tugas umum dan tugas kompleks.
Konstruksi meliputi -
- Kontrol aliran skrip (ifthen dan lainnya)
- Operasi perbandingan logis (lebih besar dari, kurang dari, persamaan)
- Loops
- Variables
- Operasi yang menentukan parameter (mirip dengan sakelar dengan perintah)
Menggunakan Shell Script versus Scripting Language
Seringkali ketika berpikir tentang melakukan tugas administrator bertanya pada diri sendiri: Haruskah saya menggunakan skrip shell atau bahasa skrip seperti Perl, Ruby atau Python?
Tidak ada aturan pasti di sini. Hanya ada perbedaan umum antara shell versus bahasa skrip.
Kulit
Shell mengizinkan penggunaan perintah Linux seperti sed , grep , tee , cat , dan semua utilitas berbasis baris perintah lainnya di sistem operasi Linux. Faktanya, hampir semua utilitas baris perintah Linux dapat dibuat skrip di shell Anda.
Contoh bagus penggunaan shell adalah skrip cepat untuk memeriksa daftar host untuk resolusi DNS.
Bash Script sederhana kami untuk memeriksa nama DNS -
#!/bin/bash
for name in $(cat $1);
do
host $name.$2 | grep "has address"
done
exit
daftar kata kecil untuk menguji resolusi DNS pada -
dns
www
test
dev
mail
rdp
remote
Keluaran terhadap domain google.com -
[rdc@centos ~]$ ./dns-check.sh dns-names.txt google.com
-doing dns
dns.google.com has address 172.217.6.46
-doing www
www.google.com has address 172.217.6.36
-doing test
-doing dev
-doing mail
googlemail.l.google.com has address 172.217.6.37
-doing rdp
-doing remote
[rdc@centos ~]$
Memanfaatkan perintah Linux sederhana di shell kami, kami dapat membuat skrip 5 baris sederhana untuk mengaudit nama DNS dari daftar kata. Ini akan memakan waktu cukup lama di Perl, Python, atau Ruby bahkan ketika menggunakan Perpustakaan DNS yang diimplementasikan dengan baik.
Bahasa Skrip
Bahasa scripting akan memberikan lebih banyak kendali di luar shell. Skrip Bash di atas menggunakan pembungkus di sekitar perintah host Linux . Bagaimana jika kita ingin berbuat lebih banyak dan membuat aplikasi kita sendiri seperti host untuk berinteraksi di luar shell? Di sinilah kami akan menggunakan bahasa scripting.
Selain itu, dengan bahasa skrip yang sangat terjaga, kami tahu tindakan kami akan berfungsi di sebagian besar sistem yang berbeda. Python 3.5, misalnya, akan bekerja pada sistem lain yang menjalankan Python 3.5 dengan pustaka yang sama terpasang. Tidak demikian, jika kita ingin menjalankan skrip BASH di Linux dan HP-UX.
Terkadang garis antara bahasa skrip dan shell yang kuat bisa diburamkan. Tugas administrasi CentOS Linux dapat dilakukan dengan Python, Perl atau Ruby. Melakukannya sangat lumrah. Selain itu, pengembang skrip-shell yang kaya telah membuat daemon server web yang sederhana, tetapi berfungsi, di Bash.
Dengan pengalaman dalam bahasa skrip dan tugas otomatis di shell, administrator CentOS akan dapat dengan cepat menentukan dari mana harus memulai ketika perlu menyelesaikan masalah. Sangat umum untuk memulai proyek dengan skrip shell. Kemudian maju ke bahasa scripting (atau dikompilasi) sebagai proyek menjadi lebih kompleks.
Selain itu, tidak masalah menggunakan bahasa skrip dan skrip shell untuk berbagai bagian proyek. Contohnya dapat berupa skrip Perl untuk mengikis situs web. Kemudian, gunakan skrip shell untuk mengurai dan memformat dengan sed , awk , dan egrep . Terakhir, gunakan skrip PHP untuk memasukkan data yang diformat ke dalam database MySQL menggunakan GUI web.
Dengan beberapa teori di balik shell, mari kita mulai dengan blok penyusun dasar untuk mengotomatiskan tugas dari shell Bash di CentOS.
Output Input dan Redirection
Memproses stdout ke perintah lain -
[rdc@centos ~]$ cat ~/output.txt | wc -l
6039
[rdc@centos ~]$
Di atas, kami telah mengirimkan cat'sstoud ke wc untuk diproses dengan karakter pipa . wc kemudian memproses output dari cat , mencetak jumlah baris output.txt ke terminal. Pikirkan karakter pipa sebagai "pipa" yang meneruskan output dari satu perintah, untuk diproses oleh perintah berikutnya.
Berikut adalah konsep utama yang harus diingat saat menangani pengalihan perintah -
Jumlah | Deskriptor file | Karakter |
---|---|---|
0 | masukan standar | < |
1 | keluaran standar | > |
2 | kesalahan standar | |
tambahkan stdout | >> | |
menetapkan pengalihan | & | |
pipa stdout ke stdin | | |
Kami memperkenalkan ini di bab satu tanpa banyak membicarakan tentang pengalihan atau menetapkan pengalihan. Saat membuka terminal di Linux, shell Anda dilihat sebagai target default untuk -
- masukan standar <0
- keluaran standar> 1
- kesalahan standar 2
Mari kita lihat cara kerjanya -
[rdc@centos ~]$ lsof -ap $BASHPID -d 0,1,2
COMMAND PID USER **FD** TYPE DEVICE SIZE/OFF NODE NAME
bash 13684 rdc **0u** CHR 136,0 0t0 3 /dev/pts/0
bash 13684 rdc **1u** CHR 136,0 0t0 3 /dev/pts/0
bash 13684 rdc **2u** CHR 136,0 0t0 3 /dev/pts/0
[rdc@centos ~]$
/ dev / pts / 0 adalah terminal semu kami. CentOS Linux melihat ini dan menganggap aplikasi terminal terbuka kami seperti terminal nyata dengan keyboard dan layar yang dicolokkan melalui antarmuka serial. Namun, seperti hypervisor mengabstraksi perangkat keras ke sistem operasi / dev / pts mengabstraksi terminal kami ke aplikasi.
Dari perintah lsof di atas , kita dapat melihat di bawahFDkolom yang ketiga deskriptor file diatur ke terminal virtual kami (0,1,2). Sekarang kita dapat mengirim perintah, melihat keluaran perintah, serta kesalahan apa pun yang terkait dengan perintah tersebut.
Berikut adalah contoh untuk STDIN dan STDOUT -
STDOUT
[root@centosLocal centos]# echo "I am coming from Standard output or STDOUT." >
output.txt && cat output.txt
I am coming from Standard output or STDOUT.
[root@centosLocal centos]#
Juga dimungkinkan untuk mengirim stdout dan stderr ke file terpisah -
bash-3.2# find / -name passwd 1> good.txt 2> err.txt
bash-3.2# cat good.txt
/etc/pam.d/passwd
/etc/passwd
bash-3.2# cat err.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
bash-3.2#
Saat mencari seluruh sistem file, dua kesalahan ditemukan. Masing-masing dikirim ke file terpisah untuk dibaca nanti, sementara hasil yang dikembalikan ditempatkan ke file teks terpisah.
Mengirim stderr ke file teks dapat berguna saat melakukan hal-hal yang menghasilkan banyak data ke terminal seperti menyusun aplikasi. Ini akan memungkinkan untuk teliti kesalahan yang bisa hilang dari sejarah scrollback terminal.
Satu catatan saat meneruskan STDOUT ke file teks adalah perbedaan antara >> dan >. Tanda ganda ">>" akan ditambahkan ke file, sedangkan bentuk tunggal akan mem-clobber file dan menulis konten baru (jadi semua data sebelumnya akan hilang).
STDIN
[root@centosLocal centos]# cat < stdin.txt
Hello,
I am being read form Standard input, STDIN.
[root@centosLocal centos]#
Pada perintah di atas, file teks stdin.txt dialihkan ke perintah cat yang menggemakan isinya ke STDOUT .
Karakter pipa "|"
Karakter pipa akan mengambil keluaran dari perintah pertama, meneruskannya sebagai masukan ke perintah berikutnya, memungkinkan perintah sekunder untuk melakukan operasi pada keluaran.
Sekarang, mari "menyalurkan" stdout dari cat ke perintah lain -
[root@centosLocal centos]# cat output.txt | wc -l
2
[root@centosLocal centos]#
Di atas, wc melakukan kalkulasi pada keluaran dari cat yang dilewatkan dari pipa. Perintah pipa sangat berguna saat memfilter keluaran dari grep atau egrep -
[root@centosLocal centos]# egrep "^[0-9]{4}$" /usr/dicts/nums | wc -l
9000
[root@centosLocal centos]#
Pada perintah di atas, kami meneruskan setiap 4 digit angka ke wc dari file teks yang berisi semua angka dari 65535 melewati filter egrep .
Mengalihkan Output dengan &
Output dapat dialihkan menggunakan &karakter. Jika kita ingin mengarahkan output STDOUT dan STDERR, ke dalam file yang sama, dapat dilakukan sebagai berikut -
[root@centosLocal centos]# find / -name passwd > out.txt 2>&1
[root@centosLocal centos]# cat out.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/etc/passwd
[root@centosLocal centos]#
Mengalihkan menggunakan &karakter berfungsi seperti ini: pertama, output dialihkan ke out.txt . Kedua, STDERR atau deskriptor file 2 dipindahkan ke lokasi yang sama dengan STDOUT, dalam hal ini out.txt .
Redirection sangat berguna dan berguna saat memecahkan masalah yang terjadi saat memanipulasi file teks besar, mengkompilasi kode sumber, mengarahkan output dalam skrip shell, dan mengeluarkan perintah Linux yang kompleks.
Meskipun kuat, pengalihan bisa menjadi rumit untuk Administrator CentOS yang lebih baru. Latihan, penelitian, dan pertanyaan sesekali ke forum Linux (seperti Stack Overflow Linux) akan membantu memecahkan solusi lanjutan.
Konstruksi Bash Shell
Sekarang setelah kita memiliki ide bagus tentang cara kerja Bash shell , mari kita pelajari beberapa konstruksi dasar, yang umum digunakan, untuk menulis skrip. Di bagian ini kita akan menjelajahi -
- Variables
- Loops
- Conditionals
- Kontrol loop
- Membaca dan menulis ke file
- Operasi matematika dasar
Petunjuk Pemecahan Masalah BASH
BASH bisa sedikit rumit dibandingkan dengan bahasa skrip khusus. Beberapa hang-up terbesar dalam skrip BASH berasal dari pelolosan yang salah atau tidak lolos dari operasi skrip yang diteruskan ke shell. Jika Anda telah memeriksa skrip beberapa kali dan tidak berfungsi seperti yang diharapkan, jangan khawatir. Ini biasa terjadi bahkan dengan mereka yang menggunakan BASH untuk membuat skrip kompleks setiap hari.
Pencarian cepat di Google atau mendaftar di forum ahli Linux untuk mengajukan pertanyaan akan menghasilkan resolusi yang cepat. Ada kemungkinan besar seseorang telah menemukan masalah yang sebenarnya dan masalah tersebut telah diselesaikan.
Pembuatan skrip BASH adalah metode hebat untuk membuat skrip canggih dengan cepat untuk segala hal mulai dari mengotomatiskan tugas administrasi hingga membuat alat yang berguna. Untuk menjadi pengembang skrip BASH tingkat ahli membutuhkan waktu dan latihan. Oleh karena itu, gunakan skrip BASH bila memungkinkan, ini adalah alat yang hebat untuk dimiliki di kotak alat Administrasi CentOS Anda.