- Файла нет, хотя он есть. что это значит?
- Как проверить, существует ли файл или каталог в Bash
- Проверьте, существует ли файл
- Проверить, существует ли каталог
- Проверьте, не существует ли файла
- Проверьте, существует ли несколько файлов
- Операторы проверки файлов
- Выводы
- unixforum.org
- Решено: [important] Не найден файл или директория
- Решено: [important] Не найден файл или директория
- Re: Решено: [important] Не найден файл или директория
- Re: Решено: [important] Не найден файл или директория
- Re: Решено: [important] Не найден файл или директория
- Re: Решено: [important] Не найден файл или директория
- Re: Решено: [important] Не найден файл или директория
- Re: Решено: [important] Не найден файл или директория
Файла нет, хотя он есть. что это значит?
У тебя 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 битных эльфов.
Это ты кросс-компилятор установил А что им можно делать? ))
Как проверить, существует ли файл или каталог в Bash
Часто при написании сценариев оболочки вы можете оказаться в ситуации, когда вам нужно выполнить действие в зависимости от того, существует файл или нет.
В Bash вы можете использовать команду test, чтобы проверить, существует ли файл, и определить тип файла.
Команда test принимает одну из следующих синтаксических форм:
test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]]
Если вы хотите, чтобы ваш сценарий был переносимым, вам следует предпочесть старую команду test [ , которая доступна во всех оболочках POSIX. Новая обновленная версия тестовой команды [[ (двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.
Проверьте, существует ли файл
При проверке существования файла наиболее часто используются операторы FILE -e и -f . Первый проверит, существует ли файл независимо от типа, а второй вернет истину, только если ФАЙЛ является обычным файлом (а не каталогом или устройством).
Наиболее удобочитаемый вариант при проверке существования файла — использование команды test в сочетании с оператором if . Любой из приведенных ниже фрагментов проверит, существует ли файл /etc/resolv.conf :
FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exists." fi
FILE=/etc/resolv.conf if [ -f "$FILE" ]; then echo "$FILE exists." fi
FILE=/etc/resolv.conf if [[ -f "$FILE" ]]; then echo "$FILE exists." fi
Если вы хотите выполнить другое действие в зависимости от того, существует файл или нет, просто используйте конструкцию if / then:
FILE=/etc/resolv.conf if [ -f "$FILE" ]; then echo "$FILE exists." else echo "$FILE does not exist." fi
Всегда используйте двойные кавычки, чтобы избежать проблем при работе с файлами, в именах которых есть пробелы.
Вы также можете использовать команду test без оператора if. Команда после оператора && будет выполнена только в том случае, если статус выхода тестовой команды — истина,
test -f /etc/resolv.conf && echo "$FILE exists."
[ -f /etc/resolv.conf ] && echo "$FILE exists."
[[ -f /etc/resolv.conf ]] && echo "$FILE exists."
Если вы хотите запустить серию команд после оператора && просто заключите команды в фигурные скобки, разделенные ; или && :
[ -f /etc/resolv.conf ] && echo "$FILE exist."; cp "$FILE" /tmp/; >
Напротив && , оператор после || Оператор будет выполняться только в том случае, если статус выхода тестовой команды false .
[ -f /etc/resolv.conf ] && echo "$FILE exist." || echo "$FILE does not exist."
Проверить, существует ли каталог
Операторы -d позволяют вам проверить, является ли файл каталогом или нет.
Например, чтобы проверить, существует ли каталог /etc/docker вы должны использовать:
FILE=/etc/docker if [ -d "$FILE" ]; then echo "$FILE is a directory." fi
[ -d /etc/docker ] && echo "$FILE is a directory."
Вы также можете использовать двойные скобки [[ вместо одинарной [ .
Проверьте, не существует ли файла
Как и во многих других языках, тестовое выражение может быть отменено с помощью ! (восклицательный знак) оператор логического НЕ:
FILE=/etc/docker if [ ! -f "$FILE" ]; then echo "$FILE does not exist." fi
[ ! -f /etc/docker ] && echo "$FILE does not exist."
Проверьте, существует ли несколько файлов
Вместо использования сложных вложенных конструкций if / else вы можете использовать -a (или && с [[ ), чтобы проверить, существует ли несколько файлов:
if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then echo "Both files exist." fi
if [[ -f /etc/resolv.conf && -f /etc/hosts ]]; then echo "Both files exist." fi
Эквивалентные варианты без использования оператора IF:
[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "Both files exist."
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "Both files exist."
Операторы проверки файлов
Команда test включает в себя следующие операторы FILE, которые позволяют проверять файлы определенных типов:
- -b FILE — Истина, если ФАЙЛ существует и является специальным блочным файлом.
- -c FILE — Истина, если ФАЙЛ существует и является файлом специальных символов.
- -d FILE — Истина, если ФАЙЛ существует и является каталогом.
- -e FILE — Истина, если ФАЙЛ существует и является файлом, независимо от типа (узел, каталог, сокет и т. д.).
- -f FILE — Истина, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством).
- -G FILE — Истина, если ФАЙЛ существует и имеет ту же группу, что и пользователь, выполняющий команду.
- -h FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
- -g FILE — Истина, если ФАЙЛ существует и для него установлен флаг set-group-id ( sgid ).
- -k FILE — Истина, если ФАЙЛ существует и для него установлен флаг липкого бита.
- -L FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
- -O FILE — Истина, если ФАЙЛ существует и принадлежит пользователю, выполняющему команду.
- -p FILE — Истина, если ФАЙЛ существует и является каналом.
- -r FILE — Истинно, если ФАЙЛ существует и доступен для чтения.
- -S FILE — Истина, если ФАЙЛ существует и является сокетом.
- -s FILE — Истина, если ФАЙЛ существует и имеет ненулевой размер.
- -u FILE — Истинно, если ФАЙЛ существует и установлен флаг set-user-id ( suid ).
- -w FILE — Истина, если ФАЙЛ существует и доступен для записи.
- -x FILE — Истина, если ФАЙЛ существует и является исполняемым.
Выводы
В этом руководстве мы показали вам, как проверить, существует ли файл или каталог в Bash.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
unixforum.org
Решено: [important] Не найден файл или директория
Решено: [important] Не найден файл или директория
Сообщение shadow999 » 16.11.2009 18:41
Знаю. Я тут на форуме уже как легенда-неудачник. Уже мой третий топик)))
У меня дебиан не воспринимает файлы.
Re: Решено: [important] Не найден файл или директория
Сообщение mailman137 » 16.11.2009 19:07
Re: Решено: [important] Не найден файл или директория
Сообщение shadow999 » 16.11.2009 19:13
cd /home/logservice
./logservice
-bash: ./logservice: No such file or directory
Файл есть 10000%.. всё прописано верно. Не знаю в чем дело
Файл без разрешения. То что он должен нормально запускаться я точно знаю. У меня раньше стоял сервер на Ubuntu 9.04 там таких проблем в помине не было!
Re: Решено: [important] Не найден файл или директория
Сообщение mailman137 » 16.11.2009 19:21
Re: Решено: [important] Не найден файл или директория
Сообщение shadow999 » 16.11.2009 19:30
drwxr-xr-x 17 root root 4096 2009-11-16 10:04 . drwxr-xr-x 22 root root 4096 2009-11-16 06:45 .. -rw-r--r-- 1 root root 184 2009-11-16 05:50 authd.sh -rw-r--r-- 1 root root 719 2009-11-15 08:26 .bash_profile drwxrwxrwx 2 root root 4096 2009-11-15 08:26 gacd drwxrwxrwx 3 root root 4096 2009-11-16 05:21 gamed drwxrwxrwx 4 root root 4096 2009-11-15 10:34 gamedbd drwxrwxrwx 2 root root 4096 2009-11-15 10:34 gdeliveryd drwxrwxrwx 2 root root 4096 2009-11-15 10:34 gfactiond drwxrwxrwx 2 root root 4096 2009-11-16 05:15 glinkd drwxrwxrwx 2 root root 4096 2009-11-16 06:11 logs drwxrwxrwx 3 root root 4096 2009-11-16 09:23 logservice drwx------ 2 root root 16384 2009-11-13 05:56 lost+found drwxrwxrwx 4 root root 4096 2009-11-16 05:56 mauthd drwxrwxrwx 6 root root 4096 2009-11-15 10:38 pw drwxr-xr-x 2 root root 4096 2009-11-16 06:08 reap -rwxrwxrwx 1 root root 984 2009-11-16 06:12 shutdown.sh -rwxrwxrwx 1 root root 6242 2009-11-16 05:50 startup_max.sh -rwxrwxrwx 1 root root 1925 2009-11-16 05:50 startup_min.sh -rwxrwxrwx 1 root root 6395 2009-11-16 10:04 startup.sh -rw-r--r-- 1 root root 6352 2009-11-16 10:04 startup.sh~ drwxr-xr-x 2 root root 4096 2009-11-16 06:09 temp drwxrwxrwx 4 root root 4096 2009-11-16 05:50 uniquenamed drwxrwxrwx 3 root root 4096 2009-11-15 10:38 webmin-1.430
Да самописаный, но не мной. Эти файлы еще были и работали в то время, как я под стол ходил!
Re: Решено: [important] Не найден файл или директория
Сообщение mailman137 » 16.11.2009 19:47
cd /home/logservice
./logservice
-bash: ./logservice: No such file or directory
Вижу директорию с правами 777 /home/logservice. А что это, Вы директорию пытались запустить как приложение?
Re: Решено: [important] Не найден файл или директория
Сообщение shadow999 » 16.11.2009 19:50
register:/home/logservice# ls -al итого 444 drwxrwxrwx 3 root root 4096 2009-11-16 09:23 . drwxr-xr-x 17 root root 4096 2009-11-16 10:04 .. drwxrwxrwx 2 root root 4096 2009-11-16 06:16 logs -rwxrwxrwx 1 root root 433768 2009-11-16 09:22 logservice -rwxrwxrwx 1 root root 835 2009-11-16 06:16 logservice.conf