GNU/Linux >> Belajar Linux >  >> Linux

/usr/bin/ls:/usr/bin/ls:Tidak Dapat Mengeksekusi File Biner?

Saya menggunakan git bash pada Windows. Saya ingin menjalankan ls perintah dengan bash . Saya dapat menjalankan ls terpisah seperti ini:

$ ls
f1  f2

Namun, ketika saya mencoba dengan bash , saya mendapatkan kesalahan:

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

Tetapi jika saya membuat skrip saya, itu berfungsi dengan baik:

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

Apa yang bisa menjadi masalah?

Jawaban yang Diterima:

Dari manual yang bagus untuk bash(1) :

ARGUMEN
Jika argumen tetap ada setelah pemrosesan opsi, dan opsi -c maupun
-s tidak diberikan, argumen pertama diasumsikan sebagai
nama file berisi perintah shell.

Apakah ls berisi perintah shell? Tidak, ini adalah file biner. bash mengoceh tentang fakta ini dan gagal.

Sebuah strace dapat membantu menunjukkan apa yang sedang terjadi:

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

alog file bisa menjadi sedikit berantakan, tetapi menampilkan bash mencari ls di direktori kerja saat ini—risiko keamanan jika seseorang telah menempatkan ls . yang nakal file di suatu tempat!—dan kemudian melakukan PATH cari:

$ 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

Mengapa ini bisa menjadi risiko keamanan, jika Anda menjalankan bash somecmd dari direktori yang salah di mana seseorang telah membuat ls (atau perintah lain yang diketahui karena bug dalam skrip):

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

Linux
  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Linux – Menggabungkan /usr/bin Dan /usr/sbin Ke /bin (gnu/linux)?

  3. /usr/bin/ld:tidak dapat menemukan -lpython2.7

  1. Cara Memperbaiki '/ usr/bin/dirmngr':Tidak ada file atau direktori seperti itu

  2. cmake --version menunjuk ke /usr/bin/cmake sementara cmake menunjuk ke /usr/local/bin

  3. Memindahkan /bin konten ke /usr/bin, mungkin untuk membatalkan?

  1. /usr/bin Vs /usr/local/bin Di Linux?

  2. Mengapa /bin/sh Menunjuk Ke /bin/dash Dan Bukan /bin/bash??

  3. Tidak Sengaja Dihapus /usr/bin/python3.5, Tidak Dapat Menginstal Ulang?