Linux если файл отсутствует

Файла нет, хотя он есть. что это значит?

У тебя 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-битная версия библиотеки.

Читайте также:  Linux make apt get

Вот поэтому Линус на «федоре», а Грег – на «арче».

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

Источник

Оцените статью
Adblock
detector