Apa perbedaan antara file biner dan perpustakaan?

11

Saya mencoba memahami Standar Sistem Hierarki Filesystem. Saya telah mencari biner dan perpustakaan, dan seperti yang saya pahami saat ini:

binari adalah file kode yang dapat dibaca komputer dalam format biner, yang mengontrol CPU dan prosesor secara langsung dengan bit.

perpustakaan adalah fungsi yang dapat digunakan oleh berbagai program, demi kenyamanan - seperti ketika Anda membutuhkan modul dalam Javascript dari PHP.

Apakah pemahaman ini benar? Jika ya, mengapa kita masih memisahkan perpustakaan dan binari? Beberapa perpustakaan adalah binari, bukan? Dan beberapa binari (cat, less, date, rm, cp, dll) digunakan dan digunakan kembali seolah-olah itu adalah perpustakaan ... Dapatkah seseorang membantu menjelaskan perbedaannya dan membantu saya menemukan definisi yang lebih baik untuk dua kata ini? Terima kasih.

houallet
sumber

Jawaban:

10

Pemahaman Anda sebagian besar benar, tetapi ada beberapa hal tambahan untuk dipertimbangkan:

  1. 'biner' mengacu pada sesuatu yang tidak dapat dibaca manusia. Ini biasanya mengacu pada kode mesin, tetapi banyak file lain juga file biner dalam pengertian ini, dengan sebagian besar format multimedia menjadi contoh yang baik. Namun FHS memiliki penggunaan yang lebih spesifik untuk istilah tersebut.
  2. Perpustakaan dapat berupa kode biner. Bahkan, sebagian besar barang di /libperpustakaan akan dikompilasi ke kode mesin.
  3. Sementara hal-hal seperti catdigunakan dalam skrip shell seperti panggilan ke kode di perpustakaan, mereka bukan perpustakaan dalam arti FHS karena mereka dapat dijalankan sendiri.

Sebagai hasil dari poin-poin ini, terminologi yang lebih umum di antara orang-orang yang tidak menulis dokumen standar adalah:

  • File objek: Ini adalah kode mesin yang dikompilasi secara asli, tetapi bahkan mungkin tidak dapat dijalankan atau dipanggil. Mereka biasanya memiliki .oekstensi kecuali mereka jatuh ke dalam salah satu kategori lain, dan hampir tidak pernah terlihat pada kebanyakan sistem kecuali ketika membangun perangkat lunak. Saya sudah mendaftarkannya di sini karena penting untuk memahami beberapa hal di bawah ini.

  • File yang dapat dieksekusi: Ini adalah file yang sebagian besar terdiri atas kode mandiri yang dapat dijalankan secara langsung. Mereka dapat berupa file objek yang diformat khusus yang dapat dimuat langsung oleh kernel (hal-hal seperti cat,, bashdan pythonsemua jenis ini dapat dieksekusi), atau ditafsirkan oleh beberapa program perantara yang sendiri merupakan executable (Minecraft pydoc,, dan cowsaysemua contoh) dari jenis ini yang dapat dieksekusi). Executables dari tipe pertama hampir tidak pernah memiliki ekstensi file pada sistem UNIX, sedangkan executable dari tipe kedua mungkin atau mungkin tidak. Inilah yang FHS sebut sebagai 'binari'. Mereka dapat dijalankan dari executable lain, tetapi membutuhkan memanggil fungsi khusus untuk memanggil mereka ( fork()dan exec()dalam C dan C ++, hal-hal darisubprocess modul dengan Python, dll) dan dijalankan sebagai proses terpisah.

  • Perpustakaan: Ini adalah file yang berisi kode yang dapat digunakan kembali yang dapat dipanggil oleh perpustakaan lain atau dieksekusi. Kode di perpustakaan dipanggil (sebagian besar) langsung oleh kode lain setelah perpustakaan dimuat (disebut sebagai 'tautan' ketika berbicara tentang kode yang dikompilasi), dan berjalan dalam proses yang sama dengan kode yang memanggilnya. Ada tiga jenis perpustakaan umum:

    1. Perpustakaan statis: Ini adalah variasi asli. Mereka terdiri dari file arsip (biasanya format AR) dengan sejumlah besar file objek di dalamnya, satu untuk setiap fungsi di perpustakaan. File objek bisa ditautkan ke executable yang menggunakannya, jadi executable yang hanya menggunakan pustaka statis pada dasarnya 100% independen dari kode lain. Pada sistem UNIX, mereka biasanya memiliki .aekstensi. Konsep perpustakaan statis tidak benar-benar ada di luar bahasa pemrograman yang dikompilasi.
    2. Perpustakaan dinamis: Ini adalah jenis perpustakaan yang paling umum digunakan saat ini. Pustaka dinamis adalah file objek khusus, biasanya dengan .soekstensi pada UNIX ( .dlladalah standar pada Windows), yang dimuat saat dijalankan oleh executable yang menggunakannya. Sebagian besar yang akan Anda temukan di /libsistem produksi adalah pustaka dinamis.
    3. Modul: Ini setara dengan perpustakaan dinamis untuk bahasa yang ditafsirkan. Penanganannya sedikit berbeda dari untuk bahasa yang dikompilasi, dan tidak seperti dengan bahasa yang dikompilasi, mungkin saja file menjadi modul dan dapat dieksekusi (lihat http.serverdi perpustakaan standar Python untuk contoh).
Austin Hemmelgarn
sumber
Jangan lupa file skrip, yang merupakan kasus khusus yang dapat dieksekusi, karena bergantung pada biner yang dapat dieksekusi ( bash, python) untuk dijalankan. Terlebih lagi, skrip dalam /libdapat dimaksudkan untuk digunakan oleh skrip lain; bandingkan modul Python.
Murphy
1
Itu termasuk 'ditafsirkan oleh beberapa . Tow of the examples I listed for that (pydoc` program perantara dan cowsay) adalah skrip.
Austin Hemmelgarn
Klarifikasi ke # 3 - modul adalah bit kode yang dapat dimuat yang digunakan untuk memperluas fungsionalitas. Modul-modul Apache / php adalah contoh yang baik untuk bagian skrip Anda yang ditafsirkan, tetapi modul-modul kernel juga menghitung ... Saya juga menambahkan satu titik untuk mencakup bahasa-bahasa yang kebanyakan dapat ditafsirkan yang dapat dibaca manusia seperti skrip untuk berbagai kerang, php, perl, dll. per FHS akan masuk dalam direktori / bin atau / sbin karena mereka adalah program yang dapat dieksekusi
ivanivan
Modul sebagai ekstensi lebih sering disebut plugin. Pilihan penamaan Apache didasarkan pada standar UNIX lama dalam memanggil modul driver kernel, dan yang sekarang telah menjadi terminologi umum dengan server web (karena pemasaran), tetapi itu merupakan kasus aneh dibandingkan dengan kebanyakan perangkat lunak lain, yang cukup universal menggunakan plugin 'kernel 'atau' ekstensi 'ketika merujuk itu.
Austin Hemmelgarn