Linux Sepatu bot

Ternyata, tidak banyak proses boot:

1. Sebuah boot loader menemukan gambar kernel pada disk, memuatnya ke dalam memori, dan memulainya.
2. Kernel menginisialisasi perangkat dan driver IMS.
3. Kernel me-mount file rootsystem.
4. Kernel mulai init Dipanggil untuk jadwal.
5. init menentukan sisa Proses dalam gerakan.
6. Proses terakhir Itu dimulai init sebagai bagian dari urutan boot memungkinkan Anda untuk log on.

Mengidentifikasi setiap tahap proses boot sangat berharga dalam memperbaiki masalah boot dan memahami file system secara keseluruhan. Untuk memulai, arahkan ke boot loader, yang merupakan layar awal atau prompt yang Anda dapatkan setelah komputer melakukan uji mandiri daya, menanyakan operasi yang mana system untuk berlari. Setelah Anda membuat pilihan, boot loader menjalankan Linux kernel, menyerahkan kendali atas system ke kernel.

Ada diskusi rinci dari kernel tempat lain dalam buku ini dari mana artikel ini dikutip. Artikel ini mencakup Tahap inisialisasi kernel, tahap ketika kernel mencetak banyak pesan tentang perangkat keras yang ada di file system. Kernel memulai init tepat setelah itu menampilkan pesan yang menyatakan bahwa kernel telah memasang file file rootsystem:

VFS: Mounted root (file ext2system) hanya baca.

Segera setelah itu, Anda akan melihat pesan tentang init dimulai, diikuti oleh system layanan pesan startup, dan akhirnya Anda mendapatkan semacam prompt login.

CATATAN : Pada Red Hat Linux, not init sangat jelas, karena “menyambut” Anda di Red Hat Linux. ” Semua pesan setelahnya menunjukkan keberhasilan atau kegagalan dalam tanda kurung di sisi kanan layar.

Sebagian besar bab ini berkaitan dengan init, Karena WHERE bagian dari urutan boot Anda memiliki kontrol yang paling.
init

Tidak ada yang spesial dari init. Ini adalah program yang sama seperti program lainnya di Linux system, dan Anda akan menemukannya di / sbin bersama dengan lainnya system biner. Tujuan utama dari init adalah untuk memulai dan menghentikan program lain dalam urutan tertentu. Yang harus Anda ketahui adalah bagaimana urutan ini bekerja.

Ada beberapa variasi yang berbeda, tetapi kebanyakan Linux distribusi menggunakan System Gaya V dibahas di sini. Beberapa distribusi menggunakan versi yang lebih sederhana yang menyerupai BSD init, tetapi Anda kemungkinan tidak akan menemukan ini.

Runlevel

Pada waktu tertentu pada Linux system, serangkaian proses dasar tertentu sedang berjalan. Keadaan ini machine disebut runlevel-nya, dan dilambangkan dengan angka dari 0 sampai 6. The system menghabiskan sebagian besar waktunya dalam satu runlevel. Namun, saat Anda menutup file machine down, init beralih ke runlevel yang berbeda untuk menghentikan system layanan secara teratur dan memberi tahu kernel untuk berhenti. Namun runlevel lain adalah untuk pengguna tunggal mode, dibahas nanti.

Cara termudah untuk menangani runlevel adalah dengan memeriksa file konfigurasi init, /etc/inittab. Cari garis seperti berikut:

id: 5: initdefault:

Baris ini berarti bahwa default runlevel di system adalah 5. Semua baris dalam file inittab mengambil bentuk ini, dengan empat bidang yang dipisahkan oleh titik dua dengan urutan sebagai berikut:
# Sebuah pengenal unik (string pendek, Seperti id pada contoh sebelumnya)
# Jumlah runlevel yang berlaku (s)
# Tindakan yang harus dilakukan init (dalam contoh sebelumnya, tindakan adalah menyetel default runlevel ke 5)
# Sebuah perintah untuk mengeksekusi (opsional)

Tidak ada perintah untuk dieksekusi di init sebelumnyadefault Misalnya karena perintah tidak masuk akal dalam konteks pengaturan default runlevel. Lihat lebih jauh ke bawah di inittab, sampai Anda melihat baris seperti ini:

l5: 5: wait :/ etc / rc.d / rc 5

Baris ini memicu sebagian besar system konfigurasi dan layanan melalui direktori rc * .d dan init.d. Anda dapat melihat bahwa init diset untuk mengeksekusi perintah yang disebut /etc/rc.d/rc 5 ketika di runlevel 5. Tindakan menunggu memberitahu kapan dan bagaimana init menjalankan perintah: jalankan rc 5 sekali ketika enterdi runlevel 5, dan kemudian tunggu perintah ini selesai sebelum melakukan hal lain.

Ada beberapa tindakan berbeda dalam addinisiasi ke initdefault dan tunggu, terutama yang berkaitan dengan manajemen daya, dan halaman manual inittab (5) memberitahu Anda semuanya. Yang paling mungkin Anda temui dijelaskan di bagian berikut.

respawn

Tindakan respawn menyebabkan init menjalankan perintah yang mengikuti, dan jika perintah selesai dijalankan, untuk menjalankannya lagi. Anda mungkin melihat sesuatu yang mirip dengan baris ini di file inittab Anda:

1: 2345: respawn :/ sbin / mingetty tty1

Program getty menyediakan login prompt. Pendahulunya line untuk konsol virtual pertama (/ dev / tty1), yang Anda lihat Ketika Anda menekan ALT atau CONTROL-ALT-F1 F1. Tindakan respawn membawa prompt login kembali setelah Anda log out.

ctrlaltdel.dll

Grafik ctrlaltdel mengontrol apa yang system lakukan saat Anda menekan CONTROL-ALT-DELETE di konsol virtual. Pada kebanyakan systems, ini adalah semacam perintah reboot menggunakan perintah shutdown.

sysinit

Tindakan sysinit adalah hal pertama yang harus dijalankan init ketika dijalankan, sebelumnya enterdi runlevel apa pun.

Bagaimana Proses dalam runlevel mulai

Sekarang Anda siap untuk mempelajari cara memulai system layanan, tepat sebelum memungkinkan Anda masuk. Ingat baris inittab ini dari sebelumnya:

l5: 5: wait :/ etc / rc.d / rc 5

Ini garis kecil memicu Banyak program lain. rc singkatan perintah dijalankan, dan Anda Akan Mendengar orang menyebut perintah sebagai script, program, atau layanan. Jadi, di mana perintah ini, sih?

Untuk runlevel 5, dalam contoh ini, perintah mungkin ada di /etc/rc.d/rc5.d atau /etc/rc5.d. Runlevel 1 menggunakan rc1.d, runlevel 2 menggunakan rc2.d, dan seterusnya. Anda mungkin menemukan yang berikut ini items di direktori rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

The rc Perintah 5 mulai program dalam direktori ini runlevel dengan menjalankan perintah GMT:

S10sysklogd rumah
S12kerneld rumah
S15netstd_init rumah
S18netbase rumah
...
S99sshd rumah

Perhatikan argumen mulai di setiap perintah. S dalam nama perintah berarti bahwa perintah harus dijalankan di awal mode, dan angka (00 hingga 99) menentukan di mana dalam urutan rc memulai perintah.

Perintah D rc *. Adalah skrip Itu Biasanya mulai program / sbin atau / usr / sbin. Biasanya, Anda BISA mencari tahu apa salah satu perintah sebenarnya tidak dengan melihat script yang kurang atau pager Program lain.

Anda dapat memulai salah satu layanan ini dengan tangan. Misalnya, jika Anda ingin menjalankan program server Web httpd secara manual, jalankan S99httpd start. Demikian pula, jika Anda harus mematikan salah satu layanan saat file machine aktif, Anda dapat menjalankan perintah di direktori rc * .d dengan argumen stop (misalnya, S99httpd stop).

Beberapa direktori rc*.d berisi perintah yang dimulai dengan K (untuk "membunuh", atau berhenti mode). Dalam hal ini, rc menjalankan perintah dengan argumen stop, bukan start. Anda kemungkinan besar akan menemukan perintah K di runlevel yang menutup system bawah.

Adding dan menghapus layanan

Jika Anda ingin add, hapus, atau ubah layanan di direktori rc*.d, Anda perlu melihat lebih dekat file di dalamnya. Daftar panjang mengungkapkan struktur seperti ini:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase
...

Perintah dalam direktori rc*.d sebenarnya adalah tautan simbolis ke berkas dalam direktori init.d, biasanya di /etc atau /etc/rc.d. Linux distribusi berisi tautan ini sehingga mereka dapat menggunakan skrip startup yang sama untuk semua runlevel. Konvensi ini sama sekali bukan persyaratan, tetapi sering kali membuat organisasi sedikit lebih mudah.

Untuk mencegah salah satu perintah di direktori init.d berjalan di runlevel tertentu, Anda mungkin berpikir untuk menghapus tautan simbolis di direktori rc * .d yang sesuai. Ini memang berhasil, tetapi jika Anda membuat kesalahan dan merasa perlu mengembalikan tautan ke tempatnya, Anda mungkin kesulitan mengingat nama pasti dari tautan tersebut. Oleh karena itu, Anda tidak boleh menghapus tautan di direktori rc * .d, melainkan, add garis bawah (_) di awal nama tautan seperti ini:

mv S99httpd _S99httpd

Pada saat boot, rc mengabaikan _S99httpd karena tidak dimulai dengan S atau K. Selanjutnya, nama aslinya masih jelas, dan Anda memiliki akses cepat ke perintah tersebut jika Anda dalam keadaan darurat dan perlu memulainya dengan tangan.

Untuk add layanan, Anda harus membuat skrip seperti yang lain di direktori init.d dan kemudian membuat tautan simbolis di direktori rc * .d yang benar. Cara termudah untuk menulis skrip adalah dengan memeriksa skrip yang sudah ada di init.d, membuat salinan dari skrip yang Anda pahami, dan memodifikasi salinannya.

Ketika adding layanan, pastikan bahwa Anda memilih tempat yang tepat dalam urutan boot untuk memulai layanan. Jika layanan dimulai terlalu cepat, mungkin tidak berfungsi, karena ketergantungan pada beberapa layanan lain. Untuk layanan yang tidak penting, sebagian besar systems administrators lebih suka angka di tahun 90-an, setelah sebagian besar layanan yang datang dengan system.

Linux distribusi biasanya datang dengan perintah untuk mengaktifkan dan menonaktifkan layanan di direktori rc * .d. Misalnya, di Debian, perintahnya adalah update-rc.d, dan di Red Hat Linux, perintahnya adalah chkconfig. Antarmuka pengguna grafis juga tersedia. Menggunakan program ini membantu menjaga direktori startup tetap konsisten dan membantu dengan peningkatan.

Petunjuk: Salah satu yang paling umum Linux installmasalah ation adalah server XFree86 yang tidak dikonfigurasi dengan benar yang menyala dan mati, membuat system tidak dapat digunakan di konsol. Untuk menghentikan perilaku ini, boot ke pengguna tunggal mode dan ubah layanan runlevel atau runlevel Anda. Cari sesuatu yang mengandung xdm, gdm, atau kdm di direktori rc*.d Anda, atau /etc/inittab Anda.

Mengontrol init

Kadang-kadang, Anda perlu memberikan init sedikit tendangan untuk menyuruhnya beralih runlevel, untuk membaca ulang file inittab, atau hanya untuk shut down itu system. Karena init selalu merupakan proses pertama pada a system, ID prosesnya selalu 1.

Anda BISA mengontrol init dengan telinit. Misalnya, jika Anda ingin beralih ke runlevel 3, gunakan perintah ini:

telinit 3

Saat mengganti runlevel, init mencoba mematikan semua proses yang tidak ada dalam file inittab untuk runlevel baru. Oleh karena itu, Anda harus berhati-hati dalam mengubah runlevel.

Saat Anda membutuhkannya add atau menghapus pekerjaan respawning atau membuat perubahan lain pada file inittab, Anda harus memberi tahu init tentang perubahan tersebut dan membuatnya membaca ulang file tersebut. Beberapa orang menggunakan kill -HUP 1 untuk memberitahu init untuk melakukan ini. Metode tradisional ini berfungsi di sebagian besar versi Unix, selama Anda mengetiknya dengan benar. Namun, Anda juga dapat menjalankan perintah telinit ini:

telinit q

Anda juga dapat menggunakan telinit s untuk beralih ke pengguna tunggal mode.

Mematikan

init juga mengontrol bagaimana file system dimatikan dan reboot. Cara yang tepat untuk shut down a Linux machine adalah dengan menggunakan perintah shutdown.

Ada dua cara dasar untuk menggunakan shutdown. Jika Anda menghentikan system, itu menutup macsembunyikan dan simpan. Untuk membuat machine segera berhenti, gunakan perintah ini:

shutdown-h now

Paling banyak modern machines dengan versi terbaru dari Linux, berhenti akan memutus aliran listrik ke machine. Anda juga dapat mem-boot ulang file machine. Untuk reboot, gunakan -r, bukan -h.

Proses mematikan membutuhkan waktu beberapa detik. Anda tidak boleh mengatur ulang atau mematikan a machine selama tahap ini.

Pada contoh sebelumnya, sekaranglah waktunya untuk shut down. Argumen ini wajib, tetapi ada banyak cara untuk menentukannya. Jika Anda menginginkan file machine untuk turun di masa depan, salah satu caranya adalah dengan menggunakan + n, di mana n adalah jumlah menit yang harus menunggu shutdown sebelum melakukan pekerjaannya. Untuk yang lain options, lihat halaman manual shutdown (8).

Untuk membuat system reboot dalam 10 menit, jalankan perintah ini:

shutdown-r + 10

On Linux, shutdown memberi tahu siapa pun yang masuk bahwa machine akan turun, tapi itu tidak banyak bekerja. Jika Anda menentukan waktu selain sekarang, shutdown membuat file bernama /etc/nologin. Ketika file ini ada, file system melarang login oleh siapa pun kecuali superuser.

Ketika system waktu shutdown akhirnya tiba, shutdown memberitahu init untuk beralih ke runlevel 0 untuk berhenti dan runlevel 6 untuk reboot. Saat init enters runlevel 0 atau 6, semua hal berikut terjadi, yang dapat Anda verifikasi dengan melihat skrip di dalam rc0.d dan rc6.d:

1. init membunuh setiap proses Bahwa BISA (seperti Akan Ketika beralih ke setiap runlevel lainnya).

# Perintah rc0.d / rc6.d awal dijalankan, mengunci system file ke tempatnya dan membuat persiapan lain untuk shutdown.
# Perintah rc0.d/rc6.d selanjutnya unmount semua filesystems selain root.
# Selanjutnya perintah rc0.d/rc6.d me-remount file rootsystem hanya baca.
# Masih banyak lagi perintah rc0.d/rc6.d yang menulis semua data buffer ke filesystem dengan program sinkronisasi.
# Perintah rc0.d / rc6.d akhir memberitahu kernel untuk reboot atau berhenti dengan reboot, berhenti, atau program poweroff.

Program reboot dan halt berperilaku berbeda untuk setiap runlevel, berpotensi menyebabkan kebingungan. Oleh default, program-program ini memanggil shutdown dengan -r atau -h options, tetapi jika file system sudah di runlevel halt atau reboot, program memberi tahu kernel untuk segera mati. Jika Anda benar-benar ingin menutup file macsegera turun (dengan mengabaikan kemungkinan kerusakan akibat pematian yang tidak teratur), gunakan opsi -f.

Sebagai pecinta teknologi, saya dengan senang hati menulis di StealthSettings.com sejak tahun 2006. Saya memiliki pengalaman yang kaya dalam sistem operasi: macOS, Windows, dan Linux, serta dalam bahasa pemrograman dan platform blogging (WordPress) dan toko online (WooCommerce, Magento, PrestaShop).

Tinggalkan Komentar