Добрый день.
Зарегистрировался специально, чтобы задать вопрос, который уже второй раз встречаю в совсем разных дистрибутивах Linux в абсолютно разное время и уже голову сломал, куда копать.
Вопрос очень простой - имею исполняемый бинарный файл, работоспособность стопроцентная. Могу без проблем изменять в файле атрибуты, хозяина, редактировать и т.д. Однако при попытке запуска получаю банальный бред: Нет такого файла или каталога.
Не помогает копирование файла в разные папки, флаг +x стоит, даже 777 ставил, работаю через консоль, хоть из-под рута, хоть как, но файл просто при попытке запуска, оказывается, "не существует" - причём пробовал и через MC, и через консоль, и полный путь, и вначале "cd", потом запустить, переименовывал, копировал в разные папки - ничего не меняется, я просто в тупике. Система полностью обновлена до последней версии, даже скажу больше, в этот раз она чистая, кроме ssh ничего не установил и все бинарные файлы системы (допустим, в папке /bin) запускаются.
Исполняемый файл не существует?!
покажите:
[console]ls -l <файл>
ls -ld <каталог, содержащий файл>
file <файл>
id
<как запускаете>[/console]
[added]
и ещё: mount
Попробуй из под консоли так: "путь к файлу"./"имя файла"
Если файл не в системных папках bin, то запускать его надо указывая полный путь. Если запуск производится из текущей папки, то указывать так ./имя_файла
source@ubuntu:/home/CS/srcds_1$ ls -l hldsupdatetool.bin
-rwxr-xr-x 1 source source 3513408 2005-09-02 03:27 hldsupdatetool.bin
source@ubuntu:/home/CS$ ls -ld srcds_1
drwxr-xr-x 2 source source 4096 2012-01-09 21:14 srcds_1
source@ubuntu:/home/CS/srcds_1$ file hldsupdatetool.bin
hldsupdatetool.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
source@ubuntu:/home/CS/srcds_1$ id
uid=1000(source) gid=1000(source) группы=4(adm),20(dialout),24(cdrom),46(plugdev),109(lpadmin),110(sambashare),111(admin),1000(source)
source@ubuntu:/home/CS/srcds_1$ mount
/dev/sdb1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
/home/source/.Private on /home/source type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_sig=0450cfe10f845870,ecryptfs_fnek_sig=43908dcd5ba2feb8,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)
source@ubuntu:/home/CS/srcds_1$ ./hldsupdatetool.bin
-bash: ./hldsupdatetool.bin: Нет такого файла или каталога
source@ubuntu:/home/CS/srcds_1$ /home/CS/srcds_1/hldsupdatetool.bin
-bash: /home/CS/srcds_1/hldsupdatetool.bin: Нет такого файла или каталога
hldsupdatetool.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
А операционная система какой архитектуры?
P.S. Это только предположение.
В порядке паранойи: убедительная просьба не просить и не предлагать этот файл для тестирования!
[console]source@ubuntu:/home/CS/srcds_1$ uname -a
Linux ubuntu 2.6.32-24-server #43-Ubuntu SMP Thu Sep 16 16:05:42 UTC 2010 x86_64 GNU/Linux[/console]
Сам файл-то официальный для любых сборок Linux'a, чтобы не вызывать паранойю с прямым линком, можете удостовериться здесь:
http://store.steampowered.com/search/?snr=1_4_4__12&term=hldsupdatetool - снизу "инструменты", Linux HLDS Update Tool
hldsupdatetool.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
Linux ubuntu 2.6.32-24-server #43-Ubuntu SMP Thu Sep 16 16:05:42 UTC 2010 x86_64 GNU/Linux
Я не спец, поэтому у самого вопрос: будет ли динамически слинкованный файл для 32-битной архитектуры выглядеть, как неисполняемый, на компьютере x86_64?
УМВР... из проблем единственное, что вижу - это 32-х битность...
точно не знаю, но в бубунте с поддержкой 32-х битных бинарников всё должно быть в порядке... или у них есть какие-нить no-multilib версии? на всяк пожарный, /lib32 существует и не пуста?
ТС, стоило бы начать с вывода консоли при попытке запуска. причем перед не помешало бы export LANG=en_US (нормализация данных :D )
ТС, стоило бы начать с вывода консоли при попытке запуска. причем перед не помешало бы export LANG=en_US (нормализация данных :D )
Я, вообще-то, уже сделал вывод, если внимательно читать. И то, что прикрутил русский язык на UTF-8, это абсолютно никак не влияет, но специально для Вас, уважаемый:
[console]
source@ubuntu:/home/CS/srcds_1$ export LC_ALL=C
source@ubuntu:/home/CS/srcds_1$ ./hldsupdatetool.bin
-bash: ./hldsupdatetool.bin: No such file or directory
[/console]
Именно так не существует. Я вижу в корне непустую /lib и ~lib64 , причём, похоже, последняя указывает на первую:точно не знаю, но в бубунте с поддержкой 32-х битных бинарников всё должно быть в порядке... или у них есть какие-нить no-multilib версии? на всяк пожарный, /lib32 существует и не пуста?
[console]
drwxr-xr-x 14 root root 12288 2012-01-09 17:40 lib
lrwxrwxrwx 1 root root 4 2012-01-09 14:59 lib64 -> /lib
[/console]
Такая же ситуация и с папкой /usr/lib (там тоже содержится символическая ~lib64)
точно про бубунту сказать ничего не могу, т.к. ей не пользуюсь...
если пробовать в лоб, то можно поставить какой-нить проприетарный 32-х битный хлам(напрмер adobe-flash-10), который по зависимостям подтянет 32-х битные либы (и[возможно] части ядра).
Я не спец, поэтому у самого вопрос: будет ли динамически слинкованный файл для 32-битной архитектуры выглядеть, как неисполняемый, на компьютере x86_64?
При отсутствии multilib именно так и будет выглядеть "bash: filename: No such file or directory".
Всем камрадам огромное спасибо!
Не смог найти флешплеер, проблему решил так:
[console]
sudo apt-get install gcc-4.4-multilib
[/console]
Вуаля! Файл запустился :)
p.s. Чтобы узнать текущую версию gcc, вначале сделайте "sudo apt-get install gcc", потом уже добавляем к этому Multilib