Dari mana uname -i
menarik informasi itu?
Apakah ada rincian /etc/
?
Apakah ada rincian /proc/
?
Jika demikian, file mana yang dirujuk untuk menampilkan detail tersebut?
command-line
kernel
Roy Hernandez
sumber
sumber
Jawaban:
uname
menggunakan panggilan sistemuname(2)
untuk mendapatkan informasi terkait kernel yang ditampilkan.Sinopsisnya adalah:
di mana
uname(2)
mengembalikan informasi dalam struktur yang ditunjukkan olehbuf
. Anda juga dapat membaca file headerutsname.h
dari/usr/include/"$(arch)"-linux-gnu/sys/utsname.h
untuk menggali lebih dalam.Lihatlah
man 2 uname
untuk mendapatkan lebih banyak ide tentang ini.sumber
locate --regex '^/usr/include/.*/sys/utsname.h$'
?uname -i
outputx86_64
. Ketika saya menjalankanlocate --regex '^/usr/include/.*/sys/utsname.h$'
pengembalian output/usr/include/x86_64-linux-gnu/sys/utsname.h
Program ini
strace
memungkinkan kita untuk melihat panggilan sistem yang mungkin dibuat oleh aplikasi. Denganuname -a
jelas bahwa satu-satunyaopen
panggilan masuk ke pustaka sistem, jadi secara teknis tidak ada file pada sistem file yanguname
terbuka untuk dibaca. Alih-alih itu membuat panggilan sistem menggunakan perpustakaan C.Seperti yang ditunjukkan oleh heemayl dengan benar, ada panggilan sistem untuk mengambil informasi yang disimpan dalam
uname
struktur. Ini halaman manual, menyarankan yang berikut:/proc
filesystem adalah virtual, artinya hanya ada saat OS berjalan. Jadi untuk beberapa perluasan diatur dalam kernel atau sistem perpustakaan.Akhirnya, membaca kode sumber
uname.c
yang dapat diperoleh denganapt-get source coreutils
, kita dapat melihat bahwa itu memang menggunakanutsname.h
perpustakaan (dicetak dengan nomor baris):strace
keluaran:sumber
uname.c
tidak perlu menggunakan perpustakaan untuk itu - kita bisa melihat kode sumber, tentu saja, untuk memastikan.machine.h
machine.h
tampaknya dibumbui di seluruh sistem.machine.h
File mana yang diandalkannya?machine.h
di sistem saya tampaknya berada di/usr/src/linux-headers-3.19.0-33
direktori. Sangat mungkin bahwa ia menggunakan perpustakaan yang disediakan oleh kernel yang sedang berjalanTentu saja jawaban heemayl benar.
Hanya untuk bersenang-senang, ini cuplikan C yang berfungsi untuk menampilkan data yang dikembalikan oleh
uname()
(semacam buatan rumahuname
jika Anda mau): kompilasi dengangcc uname.c -o uname
dan jalankan dengan./uname
:sumber
printf("%\n", utsname.machine);
menarik informasi itu?utsname
, yang diisi selama panggilan keuname()
. Contohnya mungkin itu tidak terlalu mudah untuk seseorang tanpa dasar-dasar C, tapi inilah yang kira-kira terjadi: astruct
(tipe data C) dari jenis yangutsname
dinamaiutsname
(tipe didefinisikan dalam<sys/utsname.h>
) dideklarasikan; kemudian sebuah pointer ke namanya disebutkanutsname_ptr
(karenauname()
menerima pointer kestruct
tipeutsname
sebagai argumen, meskipun ini bisa dihindari dalam kasus ini, tapi itu cerita lain).uname()
memiliki efek mengisi structutsname
, yang pada saatprintf()
panggilan berisi berbagai nilai di dalam berbagai bidang. Sayangnya jika Anda tidak terbiasa dengan C, ini mungkin tidak akan mudah untuk dipahami secara detail, tetapi intinya adalah bahwauname()
mengisi struktur data yang dibangun dengan sengaja, yang bidangnya nanti dicetak melaluiprintf()
.Sebagai tambahan untuk jawaban heemayl, Anda dapat memperoleh beberapa informasi seperti pada
uname
perintah dari/proc/version
.sumber