実行権限なしでファイルを実行するにはどうすればよいですか?


11

自分に実行権限を(でchmod u+x)与えずにファイルを実行するにはどうすればよいですか?

[プログラムとして実行ファイルを許可する]チェックマークをオンにすると、チェックマークがすぐに削除されます。



1
これが起こらないように、ファイルのアクセス許可のすべてのポイントではありませんか?:D-
ガロア

回答:


14

ファイルの所有権を確認する

ファイルを所有していることが確かでない限り、これを先に実行してください。

次のいずれかの方法で実行しようとしているファイルを所有していることを確認してください。

グラフィカル

  1. ファイルを右クリックします。
  2. 「プロパティ」をクリックします。
  3. [権限]タブをクリックします。
  4. [所有者]フィールドにユーザー名が記載されていることを確認します。下に「ファイルの所有権の変更」が表示されない場合

コマンドライン

  1. ターミナルでこのコマンドを実行します

    [ ! -O "/path/to/file" ] && echo "You don't own the file"
    
  2. You don't own the file」が表示される場合は、以下の「ファイルの所有権を変更する」を参照してください。

ファイルの所有権を変更する

ターミナルでこのコマンドを実行します

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

実行可能ファイル

私が見つかり答えたコメントによってLekensteyn答えのための質問についてchmod、私はそれ自身の質問と回答、Lekensteynへの完全な信用に値すると思うNTFSパーティション上。

次のコマンドを実行可能ファイルに使用します(/path/to/executable正しいパスで置き換えます):

  • 64ビットの実行可能ファイル:

    /lib64/ld-linux-x86-64.so.2 /path/to/executable
    
  • 32ビットの実行可能ファイル:

    /lib/ld-linux.so.2 /path/to/executable
    

上記が機能しない(またはファイルが見つからないというエラーが発生する)場合は、上記のコマンドの前にこれを使用してみてください

cd "$(dirname /path/to/executable)"

上記のコマンドすべて、テキストベースのスクリプト(Bash、Python、Perlなど)では機能しません。以下を参照してください。

プログラムが64ビットか32ビットかを確認する

このコマンドを使用して、実行可能ファイルが32(x86)または64(x86-64)ビットかどうかを確認します

objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'

と表示されている場合、それはi386:x86-6464ビットです。i386ただ言うなら、それは32ビットです。


スクリプト

テキストベースのスクリプト(などバッシュやPython、Perlや)のために、あなたは最初に指定されたコマンドを使用する必要があり#!、ファイル内の行を。

たとえば、ファイルの最初の行が

#!/usr/bin/env python3

次に、ターミナルでこれらのコマンドを実行します(/path/to/file正しいパスで置き換えます)

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 .jarファイル

Java実行可能jarの場合、これらのコマンドを使用するだけです(/path/to/jar正しいパスで置き換えます)。

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

必要ないとき cd "$(dirname /path/to/file)"

これらはcd "$(dirname /path/to/file)"、何らかの方法でプログラムを実行する前に使用する必要のない可能性のある状況ですcd

  • プログラム自体はファイル操作を実行しません(例:のみを使用しますapt-get
  • プログラム使用cd任意のファイル操作(例:実行する前に絶対パスを変更する(または同等品)cd "$(dirname "$0")"
  • プログラムは、任意の相対パス(パスが始まる参照しない./、または全くスラッシュで始まります)

不明な場合cd "$(dirname "$0")"は、スクリプトの先頭に追加(または同等のもの)(該当する場合)するか、cd "$(dirname /path/to/file)"とにかく使用します。


1
これをスクリプト化して、すべての可能性をカバーするようにしたい(MSファイルシステムをたくさん使用している場合)誰でも大歓迎です。私はそれを自分でするかもしれませんが、それを当てにしないでください。(これが必要な場合は、このコメントに+1、十分なサポートがあれば私がやります)
kiri

0

シェルスクリプトの場合は、別のシェルスクリプトから「ソース」できます。

#!/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 "$@"

「$ @」は、必要に応じてコマンドラインパラメータを追加します。

そうは言っても、これはおそらく根本的な問題の最善の解決策ではありませんが、代替案を提供するためにその問題について十分に知りません。


これがどのように特に異なるかわかりませんbash script $@
キリ

動作は根本的に違いはありません。おそらく、あなたが解決しようとしている問題を理解していない可能性があります-ポイントアンドクリックで(何らかの理由で)実行可能でないスクリプトを実行する方法を望んでいたと思います。「実行可能な一方を作成し、他方をソースにする」ことが、この問題の解決策の1つです。それが間違った問題である場合...まあ:)
ステーブルドッグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.