Bash каже, що файлу не існує, але він є


11

Я намагаюся зібрати прошивку для моєї linkys WRVS4400N.

lsпоказує, що існує, але коли він намагається запустити його, скаже, що його не існує. Я також можу catце, і це виконуваний, а не сценарій оболонки.


що виводить ls -la для конкретного файлу?
користувач389238

@Ansis -rwxrwxrwx 1 1011 1011 31991 18 травня 2006 р. Mkdep
Avery3R

1
покажіть нам рядок із вашого сценарію та точне повідомлення про помилку. Який у вас поточний каталог, коли ви намагаєтеся викликати файл "відсутній"?
glenn jackman

@glenn Це не мій скрипт, який викликає його, це файли Cisco, я не можу отримати точне повідомлення про помилку, оскільки воно працює у vm, але, bash: / файл або папка / pathto / mkdep не знайдено
Avery3R

Тож там ховаються ці тролі ...
Прорив

Відповіді:


8

Ви згадали, що результат file mkdepє 32-bit elf. Ви працюєте з 64-розрядним VM.

Приклад:

$ uname -m
x86_64
$ ls -l ./example 
-rwxr-xr-x 1 root root 92312 2011-08-18 16:52 ./example
$ file ./example 
example: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ ./example 
-bash: ./example: No such file or directory

Просто створіть новий 32-розрядний VM і компілюйте його там.


1
Якщо ви встановите ia32-libs, він повинен працювати згодом. Не потрібно створювати 32-бітовий VM.
Філ

5

Чи встановлено це для виконання? Якщо ні, то chmod +x filename. Це у вашій ПАТІ? Якщо ні, то називайте це ./filenameшвидше, ніж просто filename.


Я встановив його на виконуваний файл, я зробив це ./mkdep, щоб викликати його, а також за допомогою повного шляху, без кісток.
Avery3R

Можливо, вам доведеться запустити файл як sudo.
D'Arvit

2

Коли ви намагаєтеся виконати файл і bash каже, що його не існує, іноді це означає, що bash вважає, що файл є сценарієм, і що інтерпретатор, зазначений у першому рядку (#!), Не існує.

Якщо файли названі, mkdepя б опублікував вихід

./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt

Команда strace дає інформацію про зроблені системні виклики, наприклад, strace ls 2>ls.tставить наступне в ls.t

execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0
brk (0) = 0x8061000
доступ ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (немає такого файлу чи каталогу)
mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000
доступ ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (немає такого файлу чи каталогу)
відкрити ("/ etc / ld.so.cache", O_RDONLY) = 3
fstat64 (3, {st_mode = S_IFREG | 0644, st_size = 32311, ...}) = 0
mmap2 (NULL, 32311, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f7a000
закрити (3) = 0
доступ ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (немає такого файлу чи каталогу)
відкрити ("/ lib / librt.so.1", O_RDONLY) = 3
прочитати (3, "\ 177ELF \ 1 \ 1 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 3 \ 0 \ 3 \ 0 \ 1 \ 0 \ 0 \ 0 \ 240 \ 30 \ 0 \ 0004 \ 0 \ 0 \ 0 "..., 512) = 512
fstat64 (3, {st_mode = S_IFREG | 0644, st_size = 30624, ...}) = 0

(працює на vm, занадто ліниво, щоб все набрати) ./mkdep повертає файл чи папку не знайдено. файл mkdep повертає 32-розрядний ельф exe, а head mkdep повертає двійкові дані
Avery3R

1
mkdep можливо генерує це повідомлення, оскільки він не може знайти потрібний файл ??
Linker3000

@ linker3000: Ні, там написано: Bash: / dirto / mkdep: файл або папка не знайдено
Avery3R

@MMavipc: спробуйте strace ./mkdep 2>mkdep.strace.txtце має дати вам деяке уявлення про те, що відбувається. Можливо, вам доведеться встановити страйк із сховищ.
RedGrittyBrick

1

Ви змінюєте IFS у своєму сценарії? Я теж зіткнувся з тією ж проблемою в одному зі своїх сценаріїв і подумав те саме (32-бітний файл читається скриптом оболонки на 64-бітній машині). Але це було не в моєму випадку. Натомість я змінив IFS на кома "," і повернувся до нового рядка, який якимось чином переплутав аналізатор і спричинив цю помилку.

Я просто видалив будь-які зміни в IFS, і це працює просто чудово зараз !!!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.