Bagaimana saya bisa mengeksekusi file tanpa memberi saya mengeksekusi izin (dengan chmod u+x
) untuk itu?
Jika saya mencoba dan mencentang tanda centang 'Izinkan menjalankan file sebagai program', tanda centang segera dihapus.
Bagaimana saya bisa mengeksekusi file tanpa memberi saya mengeksekusi izin (dengan chmod u+x
) untuk itu?
Jika saya mencoba dan mencentang tanda centang 'Izinkan menjalankan file sebagai program', tanda centang segera dihapus.
Jawaban:
Silakan lakukan ini sebelum hal lain (kecuali Anda yakin Anda memiliki file).
Periksa dan pastikan Anda memiliki file yang Anda coba jalankan dengan salah satu metode berikut.
Jalankan perintah ini di terminal
[ ! -O "/path/to/file" ] && echo "You don't own the file"
You don't own the file
", lihat "Ubah kepemilikan file" di bawah.Jalankan perintah ini di terminal
sudo chown $USER:$(id -gn $USER) "/path/to/file"
Sebuah jawaban yang saya temukan dari komentar oleh Lekensteyn pada jawaban untuk pertanyaan tentang chmod
partisi NTFS yang saya pikir pantas untuk pertanyaan dan jawaban sendiri, kredit penuh untuk Lekensteyn.
Gunakan perintah ini untuk file yang dapat dieksekusi (menggantikan /path/to/executable
dengan jalur yang benar):
File yang dapat dieksekusi 64 bit:
/lib64/ld-linux-x86-64.so.2 /path/to/executable
File yang dapat dieksekusi 32 bit:
/lib/ld-linux.so.2 /path/to/executable
Jika hal di atas tidak berhasil (atau menimbulkan file tidak ditemukan kesalahan), coba gunakan ini sebelum perintah di atas
cd "$(dirname /path/to/executable)"
Semua perintah di atas tidak akan berfungsi untuk skrip berbasis teks (Bash, Python, Perl, dll.), Lihat di bawah.
Gunakan perintah ini untuk mencari tahu apakah executable adalah 32 ( x86
) atau 64 ( x86-64
) bit
objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'
Jika dikatakan i386:x86-64
, maka itu 64 bit. Jika i386
hanya mengatakan , maka itu 32 bit.
Untuk skrip berbasis teks (Bash, Python, Perl, dll.), Anda harus menggunakan perintah yang ditentukan pada #!
baris pertama dalam file.
Misalnya, jika baris pertama file adalah
#!/usr/bin/env python3
kemudian jalankan perintah ini di terminal (mengganti /path/to/file
dengan jalur yang benar)
cd "$(dirname /path/to/file)" # Not strictly necessary, see section below
# Replace '/usr/bin/env python3' with the first line without the front #!
/usr/bin/env python3 /path/to/file # Use './file' if you want
.jar
File JavaUntuk jar Java yang dapat dieksekusi, Anda cukup menggunakan perintah ini (mengganti /path/to/jar
dengan jalur yang benar):
cd "$(dirname /path/to/jar)" # Not strictly necessary, see section below
java -jar /path/to/jar
cd "$(dirname /path/to/file)"
Ini adalah keadaan yang memungkinkan di mana Anda tidak perlu menggunakan cd "$(dirname /path/to/file)"
sebelum menjalankan program dengan metode apa pun: Jika setidaknya ada satu yang benar, Anda tidak perlu cd
terlebih dahulu.
apt-get
)cd
(atau setara) untuk mengubah ke jalur absolut sebelum melakukan operasi file apa pun (contoh cd "$(dirname "$0")"
:)./
atau dimulai tanpa garis miring)Jika tidak yakin, tambahkan cd "$(dirname "$0")"
(atau setara) ke bagian atas skrip (jika ada) atau gunakan cd "$(dirname /path/to/file)"
pula.
Jika skrip shell, Anda dapat "sumber" dari skrip shell lain, yaitu:
#!/bin/bash
# This script runs another script indirectly, by sucking in its contents and evaluating inline:
source /path/to/script/which/lost/its/exec/flag "$@"
"$ @" Menambahkan parameter baris perintah, jika perlu.
Karena itu, ini mungkin bukan solusi terbaik untuk masalah yang mendasarinya, tetapi kami tidak cukup tahu tentang masalah itu untuk menawarkan alternatif.
bash script $@