Kendim için dosya yürütme izinleri vermeden bir dosyayı nasıl yürütebilirim chmod u+x
?
'Dosyayı program olarak yürütülmesine izin ver' onay işaretini işaretlersem onay işareti hemen kaldırılır.
Kendim için dosya yürütme izinleri vermeden bir dosyayı nasıl yürütebilirim chmod u+x
?
'Dosyayı program olarak yürütülmesine izin ver' onay işaretini işaretlersem onay işareti hemen kaldırılır.
Yanıtlar:
Lütfen bunu daha önce yapın (dosyanın sahibi olduğunuzdan emin değilseniz).
Aşağıdaki yöntemlerden biriyle yürütmeye çalıştığınız dosyanın sahibi olup olmadığını denetleyin ve kontrol edin.
Bu komutu terminalde yürütün
[ ! -O "/path/to/file" ] && echo "You don't own the file"
You don't own the file
" Yazdırıyorsa , aşağıdaki "Dosya sahipliğini değiştirme" konusuna bakın.Bu komutu terminalde yürütün
sudo chown $USER:$(id -gn $USER) "/path/to/file"
Bir bulunamadı bir cevap comment tarafından Lekensteyn bir de cevap bir için soru hakkında chmod
ben o kendi soru-cevap, Lekensteyn için tam kredi hak ediyor NTFS bölümlerinde.
Yürütülebilir dosyalar için bu komutu kullanın ( /path/to/executable
doğru yolla değiştirme):
64 bit yürütülebilir dosyalar:
/lib64/ld-linux-x86-64.so.2 /path/to/executable
32 bit yürütülebilir dosyalar:
/lib/ld-linux.so.2 /path/to/executable
Yukarıdakiler işe yaramazsa (veya dosya bulunamadı hatalarını yükseltirse), yukarıdaki komuttan önce bunu kullanmayı deneyin
cd "$(dirname /path/to/executable)"
Yukarıdaki tüm komutlar vermez metin tabanlı komut (Bash, Python, Perl, vb) için çalışması, aşağıya bakın.
Yürütülebilir dosyanın 32 ( x86
) veya 64 ( x86-64
) bit olup olmadığını öğrenmek için bu komutu kullanın
objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'
Diyorsa i386:x86-64
, o zaman 64 bit. i386
Sadece söylüyorsa , 32 bit.
Metin tabanlı komut dosyaları için (Bash, Python, Perl vb.), #!
Dosyanın ilk satırında belirtilen komutu kullanmalısınız .
Örneğin, dosyanın ilk satırı
#!/usr/bin/env python3
daha sonra bu komutları bir terminalde çalıştırın ( /path/to/file
doğru yolla değiştirerek)
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
dosyalarıJava yürütülebilir jar'ları için, bu komutları kullanabilirsiniz ( /path/to/jar
doğru yolla değiştirerek):
cd "$(dirname /path/to/jar)" # Not strictly necessary, see section below
java -jar /path/to/jar
cd "$(dirname /path/to/file)"
Bunlar, cd "$(dirname /path/to/file)"
herhangi bir yöntemle programı çalıştırmadan önce kullanmanız gerekmeyen olası durumlardır : En az biri doğruysa, önce ihtiyacınız olmayacaktır cd
.
apt-get
)cd
(veya eşdeğeri) herhangi bir dosya İşlemleri yapmadan önce mutlak bir yol değiştirmek için (örnek: cd "$(dirname "$0")"
)./
eğik çizgi ile başlayan veya eğik çizgi olmadan başlayan yollar )Emin cd "$(dirname "$0")"
değilseniz, komut dosyasının üstüne ekleyin (veya varsa) veya cd "$(dirname /path/to/file)"
yine de kullanın .
Bir kabuk komut dosyasıysa, başka bir kabuk komut dosyasından "kaynak" yapabilirsiniz, yani:
#!/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 "$@"
"$ @" Gerekirse komut satırı parametrelerini ekler.
Bunu söyledikten sonra, bu muhtemelen altta yatan problem için en iyi çözüm değildir, ancak alternatifler sunmak için bu sorun hakkında yeterince bilgimiz yok.
bash script $@