Нет такого файла или каталога, не запускается скрипт.
Помощник Админа > Blog > Windows & Linux > Linux > Нет такого файла или каталога, не запускается скрипт.
Случилось, что при скрипта выводится сообщение: «: Нет такого файла или каталога».
[root@localhost Python_or_ Bush]# ./ithelp21.py
: Нет такого файла или каталога.
Варианты решения следующие:
1. Для начала, немного теории, которая возможно сразу же решит вопрос. Как мы запускаем файл?
— если вы находитесь в директории файла. (Часто новички просто вводят просто названия файла для запуска имя_файла.py)
— если вы находитесь в любой другой директории, указываем полный путь до файла.
Если вы находитесь в директории файла вводим команду ls -l и ищем в списке файл.
Если файл запускает указанием полного пути, тогда команда будет выглядеть: ls -l /var/share/.
Файла нет?! — проверяем путь до файла и запускаем с правильным указанием пути до него.
Файл на месте — переходим ко второму пункту.
2. Команда ls — l покажет нам какие права есть у файла.
Если у вашего пользователя недостаточно прав на запуск файла.
С правами все порядке? — переходим к третьему пункту.
3. В операционных системах есть свой формат символов, обозначающий перевод строк:
Windows - \r\n или CRLF (код 0D0A) Unix - \n или LF (код 0A)
Если вы откроете ваш файл с помощью Notepad ++ , то можете увидеть в нижней информационной панели значения:
Windows(CR LF) или UNIX (LF).
Если вы видите Windows (CR LF), значит вам нужно преобразовать файл в UNIX (LF).
Делается это в Notepad ++. Нажимаем правой кнопкой мыши на название «Windows (CR LF)» и в открывшемся списке выбираем «преобразовать в UNIX-формат (LF)».
Надеюсь вам помог один из данных вариантов. Пишите в комментариях, какой способ вам пригодился или вы узнали о другом варианте решения!
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Файла нет, хотя он есть. что это значит?
У тебя 64-битный дистрибутив? Установи тогда 32-битный glibc, это исправит ошибку.
Да, наверно в этом дело… Просто странно что он пишет «нет файла»
Неформатированые посты смотрю по диагонали, да.
Скорее всего нет этого файла. В коде ошибки (ENOENT видимо) просто не уточняется, к какому именно файлу она относится, ну а баш думает что ошибка может касаться только того файла который ты запускаешь, вот и пишет так. Как уже выше предположили, скорее всего этот файл есть в пакете с 32-битным glibc.
firkax ★★★★ ( 04.11.21 23:05:06 MSK )
Последнее исправление: firkax 04.11.21 23:05:59 MSK (всего исправлений: 1)
Всё верно, спасибо. Учту что баш может приврать иногда)
Просто странно что он пишет «нет файла»
Да, неожиданно пишет, когда первый раз сталкиваешься.
Так ругается на ld-linux.so обычно. Например, нет 32-битного на 64-битной системе. Или, например, в NixOS так же ругается на неродную ему 64-битную. Давеча игрался с binfmt_misc — там тоже можно получить такое сообщение, если неверно указать интерпретатор.
До меня с первого раза тоже не дошло, что речь не про тот файл, который запустить просишь.
/lib/ld-linux.so.2: cannot open `/lib/ld-linux.so.2’ (No such file or directory)
Да, что-то мне его совсем не хватает, к тому же оказывается я на дебиане ) . На рпм бы сам нашёл наверно, а тут что-то всё как-то не так. Подскажите apt-get install … как дальше?
libc6-i386. и установи себе apt-file
Говорит: Следующие НОВЫЕ пакеты будут установлены: libc6-amd64-cross libc6-i386-amd64-cross libc6-i386-cross libc6-i386-x32-cross libc6-x32-cross
и вроде как установил, а файла как не было так и нет $ file /lib/ld-linux.so.2 /lib/ld-linux.so.2: cannot open `/lib/ld-linux.so.2’ (No such file or directory)
Нужно установить libc6:i386 . Если не устанавливается, то нужно перед установкой выполнить от рут:
dpkg --add-architecture i386 apt-get update
А что это было когда я запустил apt-get install libc6-i386 ?
Интересный этот апт. Если напишешь что-то не то, Yum обыкновенно посылает лесом, а вот апт соглашается, начинает суетиться, очень многословно что-то делать. Только хрен его знает что..
Заметьте, выбирается «libc6-i386-ppc64-cross» для регулярного выражения «libc6-i386.» Заметьте, выбирается «libc6-i386-mipsn32-cross» для регулярного выражения «libc6-i386.» Заметьте, выбирается «libc6-i386-x32-cross» для регулярного выражения «libc6-i386.» Заметьте, выбирается «libc6-i386-amd64-dcv1» для регулярного выражения «libc6-i386.»
Это ты кросс-компилятор установил, он 64-битный. libc:i386 же – это именно что 32-битная версия библиотеки.
Вот поэтому Линус на «федоре», а Грег – на «арче».
Korchevatel ★★★★★ ( 15.01.22 04:01:55 MSK )
Последнее исправление: Korchevatel 15.01.22 04:02:34 MSK (всего исправлений: 1)
На самом деле создаётся новый процесс bash или чего-то ещё и этот процесс возвращает из exec определённый код (числовой) ошибки, вызвавший процесс интерпретирует этот код как «нет такого файла» Может ошибка в чём-то другом, надо, предположительно, запустить трассировку и посмотреть, какой код ошибки вернёт екзек и самому его интерпретировать, ну это так, мысли вслух
А, понял, это он ругался, что нет файла библиотеки, наверно, а не твоего файла, в любом случае, в трассировке ты бы увидел, какой файл именно нет возможности открыть
IvanR ★★★ ( 15.01.22 04:47:08 MSK )
Последнее исправление: IvanR 15.01.22 04:50:35 MSK (всего исправлений: 1)
Проникся мыслями.. А как запустить трассировку? Да, библиотеки не было для 32 битных эльфов.
Это ты кросс-компилятор установил А что им можно делать? ))
Исполняемый файл есть, но его нет
Скачал линуховый клиент для фотохостинга photofile. В архиве исполняемый файл. Пытаюсь запустить.
sunny@localhost:~/photofile$ ls -l итого 10634 drwxr-xr-x 2 sunny sunny 296 Дек 14 00:30 Frames -rwxr-xr-x 1 sunny sunny 106206 Авг 17 2007 maskphoto.jpg -rwxr-xr-x 1 sunny sunny 10771230 Май 19 2008 photofile sunny@localhost:~/photofile$ ./photofile bash: ./photofile: Нет такого файла или каталога sunny@localhost:~/photofile$ /home/sunny/photofile/photofile bash: /home/sunny/photofile/photofile: Нет такого файла или каталога
Как это понять, файл есть, но его вдруг нет? Или это какая-то защита, предотвращающая от запуска чего не попадя? Дистрибутив — Debian
ему там может чего надо еще? посмотри ldd photofile что говорит? есть ли у тебя все что нужно?
Похоже, ему твоя glibc не нравится
а что если это файл скормить gdb? может он чего больше скажет?
$ ldd ./photofile не является динамическим исполняемым файлом
Ну надо же, они что в Сети фуфло распространяют.
Хотя такая же штука была когда я пытался запустить скачанный с офиц. сайта firefox. Подозрительно всё это.
А ты с архитектурой не промахнулся?
ппц, линуксоиды скачивают и запускают бинарники. Куда катится мир?
А это не баш-скрипт ли часом? (:
Текстовым редактором откройте.
Так бывает, когда неправильно shabang указан.
а чмод + икс не нужно сделать?
>Так бывает, когда неправильно shabang указан.
тогда обычно bad interpreter говорят вроде перед No such file or directory
>а чмод + икс не нужно сделать?
>а чмод + икс не нужно сделать?
не читал первое сообщение? там же вывод ls -l есть.
-rwxr-xr-x 1 sunny sunny 10771230 Май 19 2008 photofile
думаешь noexec? там ошибка другая была бы емнип.
file photofile
head -n 1 photofile
>Ну надо же, они что в Сети фуфло распространяют.
Пока что видно только что ты «в Сети фуфло распространяешь»
Это плохой файл, не исполняемый. Удалите его.
лддэхни его и посмотри какой библиотеки нехватает.
>Как это понять, файл есть, но его вдруг нет? Или это какая-то защита, предотвращающая от запуска чего не попадя? Дистрибутив — Debian
Ну видимо файл запускается, shell читает sha-bang, там написано /bin/bash, запускается /bin/bash ./photfile, но вот эта команда почему-то не видит этого файла. Попробуйте напрямую:
Ну и сам файл поглядите. (xxd | head и file)
Покажи file photofile
А заодно uname -a
Не, лучше наверное не показывай.
Дай угадаю — у тебя amd64?
А ты запускаешь на ней 32-битный бинарник, отсюда проблемы.
Копай в эту сторону.
и оно покажет что к чему и почему.
/dev/md2 / reiserfs rw 0 0 tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0 proc /proc proc rw,noexec,nosuid,nodev 0 0 sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0 procbususb /proc/bus/usb usbfs rw 0 0 udev /dev tmpfs rw,mode=0755 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0 devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0 /dev/md0 /boot reiserfs rw 0 0 /dev/md3 /var/lib/samba/usershares reiserfs rw 0 0
$ /bin/bash ./photofile ./photofile: ./photofile: cannot execute binary file
Ygor писал
file photofile
и оно покажет что к чему и почему.
$ file ./photofile ./photofile: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped
HomeUser писал
Дай угадаю — у тебя amd64? А ты запускаешь на ней 32-битный бинарник, отсюда проблемы. Копай в эту сторону.
У меня на самом деле процессор AMD AM2+ 64 двухядерный. И система вся архитектуры amd64. Но вроде как бы 32-битные программы должны без проблем запускаться на 64-битной платформе, всегда так было. Вот 32-битный skype запускается.