GNU/Linux >> Linux の 問題 >  >> Linux

/ usr / bin / ls:/ usr / bin / ls:バイナリファイルを実行できませんか?

git bashを使用しています Windowsの場合。 lsを実行したい bashを使用したコマンド 。 lsを実行できます 個別にこのように:

$ ls
f1  f2

ただし、bashを試してみると 、エラーが発生します:

$ bash ls
/usr/bin/ls: /usr/bin/ls: cannot execute binary file

ただし、スクリプトを作成すると正常に機能します:

$ echo "echo [email protected]" > my.sh && bash my.sh

何が問題になる可能性がありますか?

承認された回答:

bash(1)の詳細なマニュアルから :

引数
オプション処理後に引数が残り、-cオプションも
-sオプションも指定されていない場合、最初の引数は
ファイルの名前であると見なされます
シェルコマンドを含みます。

lsを実行しますか シェルコマンドが含まれていますか?いいえ、バイナリファイルです。 bash この事実について口論して失敗します。

strace 何が起こっているかを示すのに役立つかもしれません:

$ strace -o alog bash ls
/usr/bin/ls: /usr/bin/ls: cannot execute binary file

alog ファイルは少し乱雑になる可能性がありますが、bashが表示されます lsを探しています 現在の作業ディレクトリ内—誰かがいたずらなlsを配置した場合のセキュリティリスク どこかにファイルします!—そしてPATHを実行します 検索:

$ grep ls alog
execve("/usr/bin/bash", ["bash", "ls"], [/* 43 vars */]) = 0
open("ls", O_RDONLY)                    = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/ls", 0x7fff349810f0) = -1 ENOENT (No such file or directory)
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
access("/usr/bin/ls", X_OK)             = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
access("/usr/bin/ls", R_OK)             = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
access("/usr/bin/ls", X_OK)             = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
access("/usr/bin/ls", R_OK)             = 0
open("/usr/bin/ls", O_RDONLY)           = 3

bash somecmdを実行すると、これがセキュリティリスクになる理由について 誰かがlsを作成した間違ったディレクトリから (またはスクリプトのバグによるその他の既知のコマンド):

$ echo "echo rm -rf /" > ls
$ bash ls
rm -rf /
$ 

Linux
  1. 「/usr/ bin / dirmngr」を修正する方法:そのようなファイルやディレクトリはありません

  2. / usr/binと/usr/ local / bin Linuxの場合?

  3. Linux – / usr/binと/usr/sbinを/bin(gnu / linux)にマージしますか?

  1. /usr/bin/perl:インタープリターが正しくありません:テキスト ファイルがビジーです

  2. バイナリを /bin、/sbin、/usr/bin、および /usr/sbin にインストールし、 --prefix および DESTDIR と対話します

  3. ディレクトリの移動とファイルの実行を 1 つのコマンドで実行

  1. #!/usr/bin/env bash と #!/usr/bin/bash の違いは何ですか?

  2. cmake --version は /usr/bin/cmake を指し、どの cmake は /usr/local/bin を指しますか

  3. /usr/sbin、/usr/local/sbin、/usr/local/bin の意味は何ですか?