GNU/Linux >> Belajar Linux >  >> Linux

Linux – Semuanya Adalah File?

Di Linux, setiap entitas dianggap sebagai FILE. Jika saya melakukan vim <cd-Name> lalu, vim akan membuka isi direktori ke dalam editornya, karena tidak membedakan antara file dan direktori.

Tapi hari ini saat bekerja, saya menemukan sesuatu yang ingin saya ketahui.

Saya berencana untuk membuka file dari direktori bersarang

vim a/b/c/d/file

Tapi bukannya vim , saya mengetik

 cd a/b/c/d/

dan tekan TAB dua kali, tetapi perintah hanya menampilkan direktori yang tersedia dari direktori “d”, bukan file.

Jangan cd perintah kehormatan “semuanya adalah file “? Atau apakah saya melewatkan sesuatu?

Jawaban yang Diterima:

Semuanya adalah file ” frase mendefinisikan arsitektur sistem operasi. Ini berarti bahwa segala sesuatu dalam sistem mulai dari proses, file, direktori, soket, pipa, ... diwakili oleh deskriptor file yang diabstraksikan di atas lapisan sistem file virtual di kernel. Sistem file virtual adalah antarmuka yang disediakan oleh kernel. Oleh karena itu frasa dikoreksi menjadi “Semuanya adalah deskriptor file “. Linus Torvalds sendiri mengoreksinya lagi dengan sedikit lebih tepat:“Semuanya adalah aliran byte “.

Namun, setiap "file" juga memiliki pemilik dan izin yang mungkin Anda ketahui dari file dan direktori biasa. Oleh karena itu, alat Unix klasik seperti cat, ls, ps, ... dapat meminta semua "file" itu dan tidak perlu menemukan mekanisme khusus lainnya, selain alat lama biasa, yang semuanya menggunakan read() panggilan sistem. Misalnya dalam keluarga OS Microsoft ada beberapa read() . yang berbeda panggilan sistem (saya mendengar sekitar 15) untuk semua jenis file dan masing-masing sedikit berbeda. Ketika semuanya adalah file, maka Anda tidak membutuhkannya.

Untuk pertanyaan Anda :Tentu saja ada jenis file yang berbeda . Di linux ada 7 jenis file. Direktori adalah salah satunya. Tapi, utilitas dapat membedakan mereka satu sama lain. Misalnya, fungsi lengkap cd perintah (ketika Anda menekan TAB ) hanya mencantumkan direktori, karena stat() panggilan sistem (lihat man 2 stat ) mengembalikan struct dengan bidang yang disebut st_mode . Standar POSIX mendefinisikan apa yang dapat berisi bidang itu:

       S_ISREG(m)  is it a regular file?
       S_ISDIR(m)  directory?
       S_ISCHR(m)  character device?
       S_ISBLK(m)  block device?
       S_ISFIFO(m) FIFO (named pipe)?
       S_ISLNK(m)  symbolic link? (Not in POSIX.1-1996.)
       S_ISSOCK(m) socket? (Not in POSIX.1-1996.)

cd fungsi penyelesaian perintah hanya menampilkan "file" di mana S_ISDIR bendera disetel.

Terkait:Linux – Menonaktifkan layanan vbox untuk mengurangi waktu boot?
Linux
  1. Cara memindahkan file di Linux

  2. Dasar-dasar Izin File Linux

  3. Bagaimana Mengganti Nama File di Linux?

  1. Memahami Izin File Linux

  2. Perintah Ekor Linux

  3. Perintah Sentuh Linux

  1. Perintah Cat di Linux

  2. Perintah Berkas Linux

  3. Cara Membuat File di Linux