GNU/Linux >> Linux Esercitazione >  >> Linux

/usr/bin/ls:/usr/bin/ls:Impossibile eseguire il file binario?

Sto usando git bash Su Windows. Voglio eseguire ls comando con bash . Posso eseguire ls separatamente in questo modo:

$ ls
f1  f2

Tuttavia, quando provo con bash , ottengo l'errore:

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

Ma se creo il mio script funziona bene:

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

Quale può essere il problema?

Risposta accettata:

Dal bel manuale per bash(1) :

ARGOMENTI
Se gli argomenti rimangono dopo l'elaborazione dell'opzione e non è stata fornita né l'opzione -c né
-s, si presume che il primo argomento sia il
nome di un file contenente i comandi della shell.

Non ls contengono comandi di shell? No, è un file binario. bash gracchia su questo fatto e fallisce.

Una strace può aiutare a mostrare cosa sta succedendo:

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

Il alog il file può diventare un po' disordinato, ma mostra bash cercando ls nella directory di lavoro corrente:un rischio per la sicurezza se qualcuno ha inserito un ls cattivo file da qualche parte! — e poi fa un PATH cerca:

$ 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

Quanto al motivo per cui questo potrebbe essere un rischio per la sicurezza, se esegui bash somecmd dalla directory sbagliata in cui qualcuno ha creato un ls (o qualche altro comando noto a causa di un bug in uno script):

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

Linux
  1. Come risolvere '/usr/bin/dirmngr':nessun file o directory di questo tipo

  2. /usr/bin Vs /usr/local/bin Su Linux?

  3. Perché /bin/sh punta a /bin/dash e non a /bin/bash??

  4. /usr/bin/perl:cattivo interprete:file di testo occupato

  5. /usr/bin/ld:impossibile trovare -lpython2.7

Installa i binari in /bin, /sbin, /usr/bin e /usr/sbin, interazioni con --prefix e DESTDIR

Cambia directory ed esegui il file in un comando

autorizzazione negata per il compositore in /usr/local/bin/

cmake --version punta a /usr/bin/cmake mentre which cmake punta a /usr/local/bin

Spostato il contenuto di /bin in /usr/bin, è possibile annullare?

I siti web dovrebbero vivere in /var/ o /usr/ in base all'utilizzo consigliato?