Memahami & Belajar Scripting Shell Dasar dan Pemecahan Masalah Sistem File Linux - Bagian 10

Memahami & Belajar Scripting Shell Dasar dan Pemecahan Masalah Sistem File Linux - Bagian 10

Linux Foundation meluncurkan LFCS Sertifikasi (Linux Foundation Certified Sysadmin), inisiatif baru yang tujuannya adalah untuk memungkinkan individu di mana-mana (dan di mana saja) untuk mendapatkan sertifikasi dalam dukungan operasional dasar hingga menengah untuk sistem Linux, yang mencakup mendukung sistem dan layanan yang sedang berjalan, bersama dengan pemantauan dan analisis secara keseluruhan, ditambah pengambilan keputusan yang cerdas dengan cerdas ketika datang untuk mengangkat masalah ke tim pendukung atas.

Linux Foundation Certified Sysadmin - Bagian 10

Lihat video berikut yang memandu Anda pengantar program sertifikasi Linux Foundation.

Ini adalah artikel terakhir (Bagian 10) dari seri 10-Tutorial Long saat ini. Dalam artikel ini kita akan fokus pada skrip shell dasar dan pemecahan masalah sistem file Linux. Kedua topik diperlukan untuk ujian sertifikasi LFCS.

Memahami Terminal dan Kerang

Mari kita klarifikasi beberapa konsep terlebih dahulu.

  1. Shell adalah program yang mengambil perintah dan memberikannya ke sistem operasi untuk dieksekusi.
  2. Terminal adalah program yang memungkinkan kami sebagai pengguna akhir untuk berinteraksi dengan shell. Salah satu contoh terminal adalah terminal gnome, seperti yang ditunjukkan pada gambar di bawah ini.
Terminal gnome

Ketika kami pertama kali memulai shell, ia menyajikan prompt perintah (juga dikenal sebagai baris perintah), yang memberi tahu kami bahwa shell siap untuk mulai menerima perintah dari perangkat input standarnya, yang biasanya merupakan keyboard.

Anda mungkin ingin merujuk ke artikel lain dalam seri ini (gunakan perintah untuk membuat, mengedit, dan memanipulasi file - bagian 1) untuk meninjau beberapa perintah yang berguna.

Linux menyediakan berbagai opsi untuk cangkang, berikut ini yang paling umum:

BASH SHell

Pesta berdiri untuk Bourne Again Shell dan adalah shell default proyek GNU. Ini menggabungkan fitur yang berguna dari korn shell (KSH) dan c shell (CSH), menawarkan beberapa peningkatan pada saat yang sama. Ini adalah shell default yang digunakan oleh distribusi yang tercakup dalam sertifikasi LFCS, dan itu adalah shell yang akan kami gunakan dalam tutorial ini.

sh shell

Itu Bourne Shell adalah shell tertua dan karenanya telah menjadi shell default dari banyak sistem operasi seperti Unix selama bertahun-tahun.

Ksh Shell

Itu Korn Shell adalah cangkang unix yang dikembangkan oleh David Korn di Bell Labs pada awal 1980 -an. Itu kompatibel ke belakang dengan shell bourne dan mencakup banyak fitur c shell.

Skrip shell tidak lebih dan tidak kurang dari file teks yang diubah menjadi program yang dapat dieksekusi yang menggabungkan perintah yang dieksekusi oleh shell satu demi satu.

Scripting shell dasar

Seperti disebutkan sebelumnya, skrip shell dilahirkan sebagai file teks biasa. Dengan demikian, dapat dibuat dan diedit menggunakan editor teks pilihan kami. Anda mungkin ingin mempertimbangkan untuk menggunakan VI/M (merujuk pada penggunaan editor VI - Bagian 2 dari seri ini), yang menampilkan penyorotan sintaks untuk kenyamanan Anda.

Ketik perintah berikut untuk membuat file bernama MyScript.sh dan tekan enter.

# vim myscript.SH 

Baris pertama skrip shell harus sebagai berikut (juga dikenal sebagai a peristiwa).

#!/bin/bash 

Dia "memberi tahuSistem Operasi Nama penerjemah yang harus digunakan untuk menjalankan teks yang mengikuti.

Sekarang saatnya menambahkan perintah kami. Kami dapat memperjelas tujuan setiap perintah, atau seluruh skrip, dengan menambahkan komentar juga. Perhatikan bahwa cangkang mengabaikan garis -garis yang dimulai dengan tanda pound # (Komentar Penjelasan).

#!/BIN/BASH ECHO Ini adalah bagian 10 dari seri 10-artikel tentang sertifikasi LFCS Echo hari ini adalah $ (tanggal +%y-%m-%d) 

Setelah skrip ditulis dan disimpan, kita perlu membuatnya dapat dieksekusi.

# chmod 755 myscript.SH 

Sebelum menjalankan skrip kami, kami perlu mengatakan beberapa kata tentang $ Path Variabel Lingkungan. Jika kita lari,

Echo $ Path 

Dari baris perintah, kita akan melihat isi $ Path: Daftar direktori yang dipisahkan oleh usus yang dicari saat kami memasukkan nama program yang dapat dieksekusi. Ini disebut variabel lingkungan karena merupakan bagian dari lingkungan shell - seperangkat informasi yang tersedia untuk shell dan proses anaknya ketika shell pertama kali dimulai.

Saat kami mengetik perintah dan tekan enter, shell mencari di semua direktori yang tercantum di $ Path variabel dan mengeksekusi instance pertama yang ditemukan. Mari kita lihat contohnya,

Variabel Lingkungan

Jika ada dua file yang dapat dieksekusi dengan nama yang sama, satu di /usr/lokal/bin dan yang lain masuk /usr/bin, yang satu di direktori pertama akan dieksekusi terlebih dahulu, sedangkan yang lain akan diabaikan.

Jika kami belum menyimpan skrip kami di dalam salah satu direktori yang tercantum di $ Path variabel, kita perlu menambahkan ./ ke nama file untuk menjalankannya. Kalau tidak, kita dapat menjalankannya seperti yang akan kita lakukan dengan perintah biasa.

# PWD # ./myscript.sh # cp myscript.sh… /bin # cd… /bin # pwd # myscript.SH 
Jalankan skrip

Persyaratan

Setiap kali Anda perlu menentukan berbagai tindakan yang harus diambil dalam skrip shell, sebagai hasil dari keberhasilan atau kegagalan perintah, Anda akan menggunakan jika konstruksi untuk mendefinisikan kondisi seperti itu. Sintaks dasarnya adalah:

jika kondisi; lalu perintah; lain-komandan lain fi 

Di mana KONDISI dapat menjadi salah satu dari yang berikut (hanya kondisi yang paling sering dikutip di sini) dan mengevaluasi benar ketika:

  1. [ -file ] → File ada.
  2. [-D file] → File ada dan merupakan direktori.
  3. [-F file] → File ada dan merupakan file biasa.
  4. [-U file] → File ada dan bit suid (set user id) diatur.
  5. [-g file] → File ada dan bit SGID -nya diatur.
  6. [-K file] → File ada dan bit lengket diatur.
  7. [-R file] → File ada dan dapat dibaca.
  8. [-S file]→ file ada dan tidak kosong.
  9. [-W file]→ file ada dan dapat ditulis.
  10. [-x file] benar jika ada file dan dapat dieksekusi.
  11. [string1 = string2] → String sama.
  12. [String1 != string2] → String tidak sama.

[int1 op int2] harus menjadi bagian dari daftar sebelumnya, sedangkan item berikut (misalnya, -EQ -> benar jika int1 adalah sama dengan int2.) harus menjadi "anak-anak" Daftar [ int1 op int2 ] di mana OP adalah salah satu operator perbandingan berikut.

  1. -EQ -> benar jika int1 sama dengan int2.
  2. -ne -> Benar jika int1 tidak sama dengan int2.
  3. -LT -> Benar jika int1 kurang dari int2.
  4. -le -> Benar jika int1 kurang dari atau sama dengan int2.
  5. -gt -> Benar jika int1 lebih besar dari int2.
  6. -ge -> Benar jika int1 lebih besar dari atau sama dengan int2.

Untuk loop

Loop ini memungkinkan untuk menjalankan satu atau lebih perintah untuk setiap nilai dalam daftar nilai. Sintaks dasarnya adalah:

untuk item secara berurutan; lakukan perintah; Selesai 

Di mana barang adalah variabel generik yang mewakili setiap nilai URUTAN Selama setiap iterasi.

Saat loop

Loop ini memungkinkan untuk menjalankan serangkaian perintah berulang selama perintah kontrol dijalankan dengan status keluar sama dengan nol (berhasil). Sintaks dasarnya adalah:

Sedangkan evaluasi_command; do execute_commands; Selesai 

Di mana Evaluasi_command dapat berupa perintah apa pun yang dapat keluar dengan kesuksesan (0) atau kegagalan (selain 0) Status, dan Execute_Commands dapat berupa program, skrip, atau konstruksi shell apa pun, termasuk loop bersarang lainnya.

Menyatukan semuanya

Kami akan menunjukkan penggunaan konstruk if dan loop untuk contoh berikut.

Menentukan apakah layanan berjalan dalam distro berbasis systemd

Mari kita buat file dengan daftar layanan yang ingin kami pantau sekejap.

# Cat MyServices.txt sshd mariadb httpd crond firewalld 
Skrip untuk memantau layanan Linux

Skrip shell kita seharusnya terlihat seperti.

#!/bin/bash # skrip ini berulang kali di atas daftar layanan dan # digunakan untuk menentukan apakah mereka berjalan atau tidak. untuk layanan dalam $ (Cat MyServices.txt); Do Systemctl Status $ Service | grep --quiet "running" jika [$? -eq 0]; Kemudian echo $ service "adalah [aktif]" lain Echo $ service "[tidak aktif atau tidak terpasang]" fi selesai 
Skrip pemantauan layanan linux
Mari kita jelaskan cara kerjanya.

1). Loop untuk membaca MyServices.txt Ajukan satu elemen daftar sekaligus. Elemen tunggal itu dilambangkan dengan variabel generik bernama layanan. Daftar ini dipenuhi dengan output,

# Cat MyServices.txt 

2). Perintah di atas dilampirkan dalam tanda kurung dan didahului dengan tanda dolar untuk menunjukkan bahwa itu harus dievaluasi untuk mengisi daftar yang akan kami berikan.

3). Untuk setiap elemen daftar (artinya setiap instance dari variabel layanan), perintah berikut akan dijalankan.

# Systemctl Status $ Service | grep --quiet "running" 

Kali ini kita perlu mendahului variabel generik kita (yang mewakili setiap elemen dalam DAFTAR) dengan tanda dolar untuk menunjukkan itu adalah variabel dan dengan demikian nilainya di setiap iterasinya harus digunakan. Output kemudian disalurkan ke grep.

Itu -diam Bendera digunakan untuk mencegah grep Dari menampilkan ke layar garis tempat kata berjalan muncul. Ketika itu terjadi, perintah di atas mengembalikan status keluar 0 (dipersembahkan oleh $? dalam konstruk if), dengan demikian memverifikasi bahwa layanan sedang berjalan.

Status keluar berbeda dari 0 (artinya kata berjalan tidak ditemukan di output Systemctl Status $ Service) menunjukkan bahwa layanan tidak berjalan.

Skrip Pemantauan Layanan

Kita bisa melangkah lebih jauh dan memeriksa keberadaan MyServices.txt bahkan sebelum mencoba memasuki loop untuk.

#!/bin/bash # skrip ini berulang kali di atas daftar layanan dan # digunakan untuk menentukan apakah mereka berjalan atau tidak. Jika [-f MyServices.txt ]; Kemudian untuk layanan di $ (Cat MyServices.txt); Do Systemctl Status $ Service | grep --quiet "running" jika [$? -eq 0]; Kemudian echo $ service "adalah [aktif]" lain Echo $ service "adalah [tidak aktif atau tidak diinstal]" fi dilakukan lagi "myservices myservices.txt hilang "fi 
Ping serangkaian host jaringan atau internet untuk statistik balasan

Anda mungkin ingin memelihara daftar host dalam file teks dan menggunakan skrip untuk menentukan setiap sekarang dan kemudian apakah mereka dapat dipenuhi atau tidak (jangan ragu untuk mengganti konten dari myhosts dan coba sendiri).

Perintah Baca Shell Built-in memberi tahu loop sementara untuk membaca myhosts baris demi baris dan menetapkan konten masing-masing baris ke host variabel, yang kemudian diteruskan ke ping memerintah.

#!/bin/bash # skrip ini digunakan untuk menunjukkan penggunaan loop sementara saat membaca host; do ping -c 2 $ host selesai < myhosts 
Skrip ke server ping

Baca juga:

  1. Pelajari Scripting Shell: Panduan dari Pemula hingga Administrator Sistem
  2. 5 skrip shell untuk mempelajari pemrograman shell

Pemecahan masalah sistem file

Meskipun Linux adalah sistem operasi yang sangat stabil, jika crash karena alasan tertentu (misalnya, karena pemadaman listrik), satu (atau lebih) sistem file Anda tidak akan tidak dipasang dengan benar dan dengan demikian akan secara otomatis diperiksa kesalahan ketika Linux dimulai kembali.

Selain itu, setiap kali sistem boot selama boot normal, ia selalu memeriksa integritas sistem file sebelum memasangnya. Dalam kedua kasus ini dilakukan dengan menggunakan alat bernama fsck (“Pemeriksaan Sistem File").

fsck tidak hanya akan memeriksa integritas sistem file, tetapi juga berusaha memperbaiki sistem file yang korup jika diinstruksikan untuk melakukannya. Tergantung pada tingkat keparahan kerusakan, FSCK mungkin berhasil atau tidak; Ketika itu terjadi, bagian file yang dipulihkan ditempatkan di hilang+ditemukan direktori, terletak di root setiap sistem file.

Terakhir namun tidak kalah pentingnya, kita harus mencatat bahwa ketidakkonsistenan juga dapat terjadi jika kita mencoba menghapus drive USB ketika sistem operasi masih menulis untuk itu, dan bahkan dapat mengakibatkan kerusakan perangkat keras.

Sintaks dasar FSCK adalah sebagai berikut:

# fsck [opsi] sistem file 
Memeriksa sistem file untuk kesalahan dan mencoba memperbaiki secara otomatis

Untuk memeriksa sistem file dengan FSCK, pertama -tama kita harus membatalkannya.

# mount | Grep SDG1 # UMOUNT /MNT # FSCK -Y /DEV /SDG1 
Periksa kesalahan sistem file

disamping -y bendera, kita bisa menggunakan -A opsi untuk secara otomatis memperbaiki sistem file tanpa mengajukan pertanyaan, dan memaksa cek bahkan saat sistem file terlihat bersih.

# fsck -af /dev /sdg1 

Jika kami hanya tertarik untuk mengetahui apa yang salah (tanpa mencoba memperbaiki apa pun untuk saat ini) kami dapat menjalankan FSCK dengan -N opsi, yang akan menghasilkan masalah sistem file ke output standar.

# fsck -n /dev /sdg1 

Bergantung pada pesan kesalahan dalam output FSCK, kami akan tahu apakah kami dapat mencoba menyelesaikan masalah sendiri atau meningkatkannya ke tim teknik untuk melakukan pemeriksaan lebih lanjut pada perangkat keras.

Ringkasan

Kami telah sampai di akhir ini 10-artikel seri di mana telah mencoba untuk menutupi kompetensi domain dasar yang diperlukan untuk lulus LFCS ujian.

Untuk alasan yang jelas, tidak mungkin untuk mencakup setiap aspek dari topik -topik ini dalam tutorial tunggal apa pun, dan itulah sebabnya kami berharap artikel -artikel ini menempatkan Anda di jalur yang benar untuk mencoba hal -hal baru sendiri dan terus belajar.

Jika Anda memiliki pertanyaan atau komentar, mereka selalu diterima - jadi jangan ragu untuk memberi kami baris melalui formulir di bawah ini!

Menjadi Administrator Sistem Bersertifikat Linux