Di Arch Linux, jika saya lakukan ls -l
di /sbin
, saya dapat melihat bahwa reboot
, shutdown
dan poweroff
semua symlink untuk /usr/bin/systemctl
. Tetapi mengeluarkan reboot
, shutdown
dan systemctl
perintah jelas tidak semua memiliki perilaku yang sama.
Apakah ls -l
tidak menunjukkan saya informasi lengkap mengenai symlink? Bagaimana saya, misalnya, bisa tahu apa sebenarnya symlink reboot
itu?
Jawaban:
Banyak program memanfaatkan teknik ini di mana ada satu executable yang mengubah perilakunya berdasarkan bagaimana itu dieksekusi.
Biasanya ada struktur di dalam program yang disebut pernyataan case / switch yang menentukan nama yang dapat dieksekusi dipanggil dan kemudian akan memanggil fungsionalitas yang sesuai untuk nama yang dapat dieksekusi itu. Nama itu biasanya argumen pertama yang diterima program. Misalnya,
C
ketika Anda menulis:argv[0]
berisi nama yang dapat dieksekusi disebut. Setidaknya, ini adalah perilaku standar untuk semua shell, dan semua executable yang menggunakan argumen harus menyadarinya.Contoh dalam Perl
Berikut ini adalah contoh yang saya buat di Perl yang menunjukkan tekniknya juga.
Ini skrip yang sebenarnya, sebut saja
mycmd.pl
:Inilah pengaturan sistem file:
Sekarang ketika saya menjalankan perintah saya:
sumber
ssh-argv0
main
dibalik.argc
datang sebelumnyaargv
.