Yürütme izinleri olmadan bir dosyayı nasıl yürütebilirim?


Yanıtlar:


14

Dosya sahipliğini kontrol edin

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.

Grafiksel

  1. Dosyayı sağ tıklayın.
  2. 'Özellikler'i tıklayın.
  3. 'İzinler' sekmesini tıklayın.
  4. 'Sahip' alanının kullanıcı adınızı söylediğinden emin olun. Aşağıdaki "Dosya sahipliğini değiştir" i görmüyorsa

Komut satırı

  1. Bu komutu terminalde yürütün

    [ ! -O "/path/to/file" ] && echo "You don't own the file"
    
  2. " You don't own the file" Yazdırıyorsa , aşağıdaki "Dosya sahipliğini değiştirme" konusuna bakın.

Dosya sahipliğini değiştirme

Bu komutu terminalde yürütün

sudo chown $USER:$(id -gn $USER) "/path/to/file"

Yürütülebilir Dosyalar

Bir bulunamadı bir cevap comment tarafından Lekensteyn bir de cevap bir için soru hakkında chmodben 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/executabledoğ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.

Bir programın 64 veya 32 bit olup olmadığını kontrol edin

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. i386Sadece söylüyorsa , 32 bit.


Kodlar

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/filedoğ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

Java .jardosyaları

Java yürütülebilir jar'ları için, bu komutları kullanabilirsiniz ( /path/to/jardoğru yolla değiştirerek):

cd "$(dirname /path/to/jar)"   # Not strictly necessary, see section below
java -jar /path/to/jar

İhtiyacınız olmadığında 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.

  • Program hiçbir dosya işlemini gerçekleştirmez (örnek: yalnızca kullanır apt-get)
  • Programın kullandığı cd(veya eşdeğeri) herhangi bir dosya İşlemleri yapmadan önce mutlak bir yol değiştirmek için (örnek: cd "$(dirname "$0")")
  • Program göreli yollara başvurmaz ( ./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 .


1
Bunu senaryolamak ve tüm olasılıkları kapsamak isteyen herkes (MS dosya sistemlerini çok kullanıyorsanız ) hoş geldiniz. Kendim yapabilirim, ama güvenme. (İsterseniz bu yorumu +
1'leyin

0

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.


Bunun özellikle nasıl farklı olduğunu görmüyorumbash script $@
kiri

Operasyonda temelde farklı değil. Büyük olasılıkla hangi sorunu çözmeye çalıştığınızı anlamıyorum - çalıştırılabilir olmayan (ne nedenle olursa olsun) bir komut dosyasını yürütmek için bir tıkla ve tıklatmak istediğinizi düşündüm. "Yürütülebilir olanı yapın ve diğerini kaynak haline getirin" bu sorunun çözümlerinden biridir. Bu yanlış bir sorunsa ... iyi :)
Stabledog
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.