GNU/Linux >> Belajar Linux >  >> Ubuntu

Apakah Aplikasi Berbasis Gui Menjalankan Perintah Shell Di Latar Belakang?

Saya telah bermigrasi ke Ubuntu 16.04 hanya 2 hari yang lalu dari Windows. Saya suka cara kita menyesuaikan Desktop Unity. Saya hanya bermain-main dengan tampilan dan nuansa lingkungan Desktop. Sama seperti di Windows, saya ingin peluncur berada di bagian bawah layar. Di Googling, saya menemukan perintah yang berbunyi seperti:

gsettings set com.canonical.Unity.Launcher launcher-position Bottom

Juga, ada unity-Tweak-tool dan editor dconf untuk menyelesaikan pekerjaan. Tapi ini adalah pendekatan GUI untuk menyelesaikan sesuatu.

Pertanyaan saya adalah:

  • Apakah aplikasi berbasis GUI ini juga menjalankan perintah yang sama di latar belakang?
  • Bagaimana cara mengintip kerja internal aplikasi ini? Maksud saya, apakah ada cara untuk benar-benar melihat perintah yang dijalankan di setiap klik tombol?
  • Apakah aplikasi ini membuka terminal di latar belakang dan menjalankan perintah ini?

Jawabannya di sini memberi tahu cara mendapatkan deskriptor file standar proses. Tapi, saya tidak mendapatkan apa pun di output.

Selain itu, strace -p pid -o output.txt perintah melempar sejumlah besar teks ke dalam file.

Jadi, singkatnya, apakah melakukan sesuatu menggunakan aplikasi GUI sama dengan melakukan sesuatu dari baris perintah?

Jawaban yang Diterima:

Apakah aplikasi berbasis GUI ini juga menjalankan perintah yang sama di latar belakang?

Iya dan tidak. Mereka menulis ke dconf database pengaturan, tetapi mereka dapat menggunakan cara yang berbeda untuk melakukannya. Program yang ditulis dengan Python kemungkinan akan menggunakan gi.repository.Gio modul (saya tahu karena saya sering menggunakannya) atau mereka dapat menggunakan gsettings sebagai perintah eksternal dengan memanggil subprocess.Popen(['gsettings','org.some.schema','some-key','value']) , dan pada dasarnya akan berjalan sebagai perintah shell. Program C akan menggunakan sesuatu yang serupa, kemungkinan gio.h perpustakaan, atau bahkan bisa menggunakan exec() keluarga fungsi untuk melakukan hal yang sama seperti Popen lakukan dengan python. Jadi untuk menjawab pertanyaan judul Anda:"Apakah aplikasi berbasis GUI menjalankan perintah shell di latar belakang?" Mereka bisa, tetapi kemungkinan itu tidak perlu karena ada perpustakaan untuk bahasa apa pun yang digunakan aplikasi tersebut, dan kemungkinan akan sedikit lebih cepat untuk menggunakan fungsi perpustakaan, daripada memunculkan proses baru.

Untuk memberi Anda contoh bagaimana hal itu dilakukan dengan perpustakaan/modul, jangan ragu untuk melihat kode sumber indikator daftar peluncur saya. Di sana saya telah menulis sebuah fungsi untuk membuat sebuah instance dari Gio.Settings class dan kemudian menggunakannya untuk memodifikasi peluncur Unity tergantung pada jenis daftar yang ingin Anda miliki di sana.

Bagaimana cara mengintip kerja internal aplikasi ini? Maksud saya, apakah ada cara untuk benar-benar melihat perintah yang dijalankan di setiap klik tombol?

Tidak. Jika Anda ingin melihat perintah mana yang dikeluarkan dalam bahasa pemrograman aplikasi itu saat Anda menekan tombol atau mengklik elemen jendela, maka itu tidak mungkin. Baca kode sumber aplikasi, jika memungkinkan untuk mendapatkannya. Anda dapat menggunakan dconf watch / untuk melihat setelan apa yang diubah, tetapi bukan cara melakukannya.

Terkait:Windows 8 tidak mau boot melalui GRUB setelah menginstal Ubuntu dengan perbaikan boot?

Secara teknis, jika Anda mengetahui cara mengoperasikan debugger, membaca alamat memori, dan mengetahui beberapa bahasa rakitan, maka Anda dapat mengetahui apa yang dilakukan aplikasi pada tingkat CPU dan memori. Ini dikenal sebagai rekayasa balik perangkat lunak dan sering digunakan oleh profesional keamanan untuk menganalisis perangkat lunak berbahaya dan menemukan kerentanan dalam perangkat lunak yang sah.

Apakah aplikasi ini membuka terminal di latar belakang dan menjalankan perintah ini?

Tidak, tidak ada terminal yang terpasang. Banyak program tahu di mana dconf database untuk pengguna berada dan menulis di sana. Ada juga bus komunikasi antar-proses yang dikenal sebagai dbus , di mana program dapat mengirim sinyal, dan program akan seperti "Hei, itu pesan untuk saya!"

tambahan

  • Bisakah aplikasi menjalankan aplikasi lain? Ya, itu dilakukan melalui fork() standar dan execve() panggilan sistem. Inti dari pembuatan proses di Linux dan sistem *nix lainnya sebagian besar didasarkan pada keduanya. Mekanisme shell untuk menjalankan perintah non-builtin banyak menggunakan itu secara khusus. Saat Anda berlari secara interaktif

    $ ls 
    

    shell akan membuat proses baru melalui fork() , proses itu akan menjalankan execve() yang akan memulai ls . Karena bagaimana execve() proses bercabang baru itu akan menjadi ls . pipe() panggilan sistem adalah apa yang akan membantu membaca kembali output ls . Saya sangat menyarankan membaca jawaban saya untuk Apa perbedaan antara pipa dan pengalihan untuk memahami cara kerja mekanisme pipa – ini bukan hanya | operator, tetapi sebenarnya syscall.

  • Bisakah aplikasi menjalankan perintah shell? Tidak. Sintaks shell hanya dipahami oleh shell itu sendiri. Apa yang dapat Anda lakukan, bagaimanapun, adalah memulai shell dengan baris perintah -c beralih dan memberikan perintah yang sesuai. Ini sering digunakan untuk pintasan khusus yang diatur di GNOME atau lingkungan desktop lainnya, karena pintasan khusus beroperasi pada yang dapat dieksekusi dan tidak ada shell untuk memahami sintaksnya. Jadi sebagai contoh, Anda akan melakukan bash -c 'xdotool key Ctrl+Alt+T' untuk secara tidak langsung menjalankan xdotool perintah atau bash -c 'cd $HOME/Desktop; touch New_File' untuk membuat file baru di desktop melalui pintasan. Ini adalah contoh yang sangat menarik karena Anda dapat menggunakan variabel shell, karena Anda menggunakan shell secara eksplisit.


Ubuntu
  1. Bagaimana Memulai Banjir di Latar Belakang?

  2. Bagaimana Mengeksekusi Perintah Di Gnuplot Menggunakan Script Shell?

  3. File .desktop. Ada Kesalahan Meluncurkan Aplikasi?

  1. 5 Cara Mengeksekusi Perintah UNIX / Linux (dan Skrip Shell) di Latar Belakang

  2. Memahami perintah kontrol pekerjaan di Linux – bg, fg dan CTRL+Z

  3. Perintah shell asinkron

  1. Apa yang Terjadi Saat Saya Mengeksekusi File Di Shell?

  2. Batasi pengguna untuk menjalankan perintah selektif (Linux)

  3. Bagaimana saya bisa menyembunyikan output dari aplikasi shell di Linux?