Ошибка Cygwin — Не удалось запустить «/bin/bash»: такого файла или каталога нет

Ошибка Cygwin — Не удалось запустить «/bin/bash»: такого файла или каталога нет

Я только что скачал и установил Cygwin на Windows 7. Кажется, он успешно установился, с папкой, C:\Cygwin64содержащей 1,2 ГБ данных, когда папка установки, из которой я его установил, была чуть меньше 300 МБ. Однако, при нажатии на ярлык на рабочем столе открывается mintty.exe, который затем отображает ошибку:

Не удалось запустить '/bin/bash': такого файла или каталога нет

И это несмотря на то, что я установил все базовые файлы, которые bashпредположительно были частью - и даже если бы это не было так, установщик позже показал это как обязательный пакет и установил его сам. Так что кто-нибудь знает, что здесь происходит? Это, возможно, моя четвертая попытка за последний день успешно установить Cygwin; я начинаю думать, что мне просто не суждено это сделать.

решение1

Мне удалось решить эту проблему с помощью еще одной установки - на этот раз я выбрал загрузку и установку из сети (вариант 1 в установщике), вместо того, чтобы загружать файлы по отдельности и устанавливать из локально сохраненной папки (варианты 2 и 3). Я не могу быть уверен, почему выбор этих параметров привел к неполной установке, но теперь я могу работать bashбез ошибок.

решение2

У меня возникла та же проблема после стандартной установки прямо из Интернета.

Я решил эту проблему, перейдя в «C:\cygwin64\bin», скопировав «ash.exe» и переименовав копию в «bash.exe».

(Я попробовал это по чистой случайности, просто потому что bash отсутствовал, и я нашел этот зловещий файл ash)

решение3

Проблема

Если хотите, можете перейти к двум решениям, особенно ко второму, которое сработало у меня.

Я только что столкнулся с этой проблемой после восстановления поврежденной части моего компьютера (после того, как каталог System32был поврежден - фу!). Подобное уже случалось раньше (из-за других обстоятельств), когда у меня все еще был каталог C:\cygwin64с папками и, по крайней мере, некоторые другие файлы.

Раньше я всегда мог просто переустановить, запустив setup-x86_64.exe(я вставил свой в C:\cygwin64). После этого bashя бы вернулся. Я всегда запускаю это с помощью опции онлайн, https://mirrors.kernel.orgно даже если я выбираю только bashв графическом интерфейсе установки, я сталкивался с этой проблемой, хотя моя ошибка появлялась как

/bin/bash: Exit 126.
Failed to run '/bin/bash': No such file or directory

Терминал Cygwin (эмулятор) с указанным выше текстом, т.е. "/bin/bash: Выход 126. Не удалось запустить '/bin/bash': Нет такого файла или каталога"

Проверка моего binкаталога показала, что, действительно, bashего не было. Из командной строки ( CMD)

C:\Windows\System32>C:\cygwin64\Cygwin
'bash' is not recognized as an internal or external command,
operable program or batch file.

C:\Windows\System32>dir C:\cygwin64\bin\bas*
 Volume in drive C is ██████████
 Volume Serial Number is ██████████

 Directory of C:\cygwin64\bin

File Not Found

C:\cygwin64\bin>

Обратите внимание, что я обычно запускаю Cygwin одним из следующих способов:

  1. с помощью ярлыка на рабочем столе, что эквивалентно запуску следующей команды из командной строки (Windows)
C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico -

или

  1. Использование Cygwin.batфайла. Сначала я покажу содержимое файла, а затем результаты моих попыток его запустить.
C:\Windows\System32>type C:\cygwin64\Cygwin.bat
@echo off

C:
chdir C:\cygwin64\bin

bash --login -i

C:\Windows\System32>C:\cygwin64\Cygwin
'bash' is not recognized as an internal or external command,
operable program or batch file.

C:\cygwin64\bin>

Первая (неудачная попытка) решения

Нахождениеbash-<version>.tar.xz

Я уже скачивал раньше с https://mirrors.kernel.org, поэтому у меня была папка,

C:\cygwin64\http%3a%2f%2fmirrors.kernel.org%2fsourceware%2fcygwin%2f

Покопавшись немного дальше, я нашел tarball под bash-4.4.12-3.tar.xzназванием

C:\cygwin64\http%3a%2f%2fmirrors.kernel.org%2fsourceware%2fcygwin%2f\x86_64\release\bash

прохождение полного пути

C:\cygwin64\http%3a%2f%2fmirrors.kernel.org%2fsourceware%2fcygwin%2f\x86_64\release\bash\bash-4.4.12-3.tar.xz

Я в итоге открыл это с помощью7zip, хотя вы могли бы использоватьWinRARили что-то еще подобное.

(Я немного порассуждал о том, что tarтеперь доступно в Windows, но его использование не помогло извлечь данные. Вы можете увидеть тирадуздесьесли вы хотите узнать больше о tarи curlнативно в Windows 10) Я скопировал/вставил tarball на рабочий стол, затем щелкнул правой кнопкой мыши и выбрал «Раскрыть в `» дважды, чтобы увидеть, что было внутри. Я скопировал все это в

C:\Users\bballdave025\Desktop\bash-4.4.12-3\

в этот момент я смог посмотреть, что было внутри.Затем я сравнил расположение файлов внутри с расположением файлов на машине, где у меня работал Cygwin.Мне удалось найти все файлы, после чего я решил просто переместить их в соответствующие места.

Для некоторых других людей, возможно, приехавших изgit bash(нравитьсяэтот постер)(архив) или mingw/ msys2(какэтот постер)(архив), обратите внимание, что моя ошибка говорит о том, что система не может найти /bin/bash- это отличается от того, как могут ссылаться ваши ошибки /usr/bin/bash, поэтому будут некоторые различия.

C:\Users\bballdave025\Desktop\bash-4.4.12-3>tree /a /f .
Folder PATH listing for volume ██████████ OS
Volume serial number is ██████████ ██████████
C:\USERS\BBALLDAVE025\DESKTOP\BASH-4.4.12-3
|
+---etc               \   . On the working computer's version, I found
|   \---postinstall    }-' C:\cygwin64\etc\postinstall\bash.sh.done
|           bash.sh   /   I'm going to move the file from where you
|                       see it to _my_ C:\cygwin64\etc\postinstall.sh
|                     Then I'll run it, and if the tests pass, I'll
|                   rename it to bash.sh.done . I'll do that after
|                 moving all the others.
|
\---usr                 
    +---bin              
    |       bash.exe     \     
    |       bashbug       }---  I'll move these three files into 
    |       sh.exe       /      _my_  C:\cygwin64\bin   FIRST (1)
    |
    +---include
    |   \---bash                      \    . I'll move this bash
    |           <lots of *.h files>    }--' directory and all its
    |                                 /  constituent header (*.h)
    |                                  files to _my_ directory,
    |                                      C:\cygwin64\usr\include\
    |
    +---lib
    |       libbash.dll.a  }- I'll move this one file to _my_
    |                     /                         C:\cygwin64\lib\
    |
    |
    |                                          \
    \---share                                   \
        +---doc                                  :
        |   +---bash                              \
        |   |   +---<lots of bash doc stuff>       :
        |   |                                      |
        |   \---Cygwin                             : 
        |           bash.README                    |   .-I'll put the
        |                                      _.-'  _/ doc, info,
        +---info                              /   _-'  locale, and
        |       bash.info.gz                  \_/'  man directories
        |                                   --'   in _my_
        |                                  /  C:\cygdrive64\usr\share\
        +---locale                         `--------...____   directory,  
        |   +---<lots of locales which have the same  >    :  which is 
        |   |   <structure underneath; the last locale>   /  where they
        |   |   <(serving as an example) is below     >  :  were in the
        |   \---zh_TW                                   /   working
        |       \---LC_MESSAGES                        /    version.
        |               bash.mo                       /
        |                                            :
        \---man                                     /
            \---man1                               :
                    <lots of PROGRAM.gz files>    /
                                                 /                              

Да, я надеюсь вернуться, но мне хочется сохранить часть этого ответа.

Второе решение

У меня такое было с подругой. Администратор создал ее учетную запись и оставил в ней "свои крючки", то есть он владел каким-то правом собственности. Поскольку этот администратор больше не работал там, где работали мы, нам пришлось искать способ все исправить.

Сначала мы попытались удалить все, но всегда оставалось несколько файлов и папок, от которых мы не могли избавиться — они принадлежали тому администратору (который, кстати, очень хороший парень). Мы даже не могли удалить, если запускали удаление от имени администратора ( File Manager -> C -> Windows -> explorer.exe, щелкните правой кнопкой мыши, затем «Запуск от имени администратора», перейдите в C:\cygwin64каталог и попробуйте удалить... безрезультатно. )

Чтобы все наконец заработало, нам пришлось войти как администратор, чтобы изменить разрешения для базового каталога и всех других каталогов, после чего мы могли удалить каталог C:\cygwin, создать его заново, поместить setup-86_64.exeв новый cygwin64каталог, а затем запустить установку. Выможетпопробуйте просто изменить права доступа для всего каталога, а затем переустановить bashс помощью setup-x86_64.exeграфического интерфейса, но когда я попробовал это, а затем зашел в терминал Cygwin, я получил что-то вроде этого.

bballdave025@MY_MACHINE ~
$ wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
--2020-04-26 13:08:26--  https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.68.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.68.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13765 (13K) [text/plain]
apt-cyg: Permission denied

Cannot write to ‘apt-cyg’ (Permission denied).

bballdave025@MY_MACHINE ~
$ stat .
  File: .
  Size: 0               Blocks: 24         IO Block: ██████████  directory
Device: ██████████/██████████   Inode: ██████████  Links: 1
Access: (0575/dr-xrwxr-x)  Uid: (██████████/   bballdave025)   Gid: (██████████/Unknown+Group)
Access: 2020-03-25 06:44:06.256806800 █████
Modify: 2020-03-25 06:44:04.686424000 █████
Change: 2020-04-26 09:23:47.452255300 █████
 Birth: 2019-12-26 12:34:40.017177300 █████

bballdave025@MY_MACHINE ~
$ stat /
  File: /
  Size: 0               Blocks: 4          IO Block: ██████████  directory
Device: ██████████/██████████   Inode: ██████████  Links: 1
Access: (0775/drwxrwxr-x)  Uid: (██████████/   bballdave025)   Gid: (██████████/Unknown+Group)
Access: 2020-04-26 09:34:23.227577100 █████
Modify: 2020-04-26 09:34:23.227577100 █████
Change: 2020-04-26 12:55:46.658249200 █████
 Birth: 2019-06-25 06:49:31.485205900 █████

bballdave025@MY_MACHINE ~
$ chmod u+w .
chmod: changing permissions of '.': Permission denied

bballdave025@MY_MACHINE ~
$ # It's not going to be very useful like this.

Кстати, это также chmod -R u+w /привело к множеству ошибок.Permission denied

ЕСЛИ У ВАС ЕСТЬ ФАЙЛЫ, КОТОРЫЕ НУЖНО ВОССТАНОВИТЬ, У ВАС, ВОЗМОЖНО, ВТОРОЙ ПО ВОЗМОЖНОСТИ ШАНС СДЕЛАТЬ ЭТО СЕЙЧАС.

Один из способов сделать удаление — следовать инструкциямэто приложение учебник(архивировано). Для работы от имени администратора вам понадобятся права CMDадминистратора.

Вы также можете сделать это с помощью Windows Explorer, но вам, вероятно, понадобится запустить explorer как администратор. Я также пробовал менять разрешения таким образом, но безуспешно.

В меню «Тип» найдите cmd, затем запустите от имени администратора. Смотрите скриншот ниже.

Действия по запуску CMD от имени администратора

Взять на себя ответственность

takeown /r /d y /f C:\cygwin64

Обратите внимание, что два слова, составляющие команду, это «TAKE OWN», а не «TAKE DOWN». Также обратите внимание, что эта команда, вероятно, займет много времени, порядка 5-20 минут для моегопочти полная установка(архивировано).

Далее мы даём всем полные разрешения.

icacls C:\cygwin64 /t /grant Everyone:F

Мы могли бы еще раз попытаться вернуться и установить/переустановить bash, но мне не нравятся последствия для безопасности того, что было сделано.

ЕСЛИ У ВАС ЕСТЬ ФАЙЛЫ ДЛЯ ВОССТАНОВЛЕНИЯ, У ВАС, ВОЗМОЖНО, ВТОРОЙ ПО ВОЗМОЖНОСТИ ШАНС СДЕЛАТЬ ЭТО СЕЙЧАС. Я имею в виду, что если вы устанавливаете или переустанавливаете bashс помощью setup-x86_64графического интерфейса на данном этапе, или даже если вы просто используете проводник Windows, это ваш лучший шанс.

Я бы лучше просто удалил этот Cygwin и получил новую установку. ЕСЛИ ВЫ ПОПЫТАЛИСЬ ВОССТАНОВИТЬ КАКИЕ-ЛИБО ФАЙЛЫ, ТО МОЖЕТЕ, продолжайте и выполните следующую команду.

rmdir /s /q C:\cygwin64

После этого удаления и перед повторной установкой убедитесь, что вы используете

Windows+ Rи затем regedit, затем удалите все в Software\Cygwinпапке в HKEY_LOCAL_MACHINEи HKEY-CURRENT-USER.

решение4

  1. Запустите Cygwin:настройка-x86_64.exe

  2. Выбирать:Скачать без установки

    Это загрузит файлы терминала Cygwin в папку назначения.http://cygwin.mirror.constant.com/

    пример:C:\папка назначения>http://cygwin.mirror.constant.com/>

  3. БегатьсноваCygwin:настройка-x86_64.exe. Теперь выберите:Установить локальный каталог, нажмите Следующий, нажмитеСледующий, нажмитеСледующий, затемЗаканчивать.

  4. Идти к:http://cygwin.mirror.constant.com/папка, в ней есть две подпапки:

    ноарх x86_64

  5. Открытьx86_64папка

  6. Открытьвыпускатьпапка

  7. ОткрытьБашпапка (есть сжатый файл, пример: **bash-4.4.12-

  8. файл tar.xz**

    Извлеките сжатый файл bash, и появятся две папки (и т. д.иуср).

  9. Открытьи т. д.папку и копироватьbash.shфайл и вставьте его вC:\cygwin64\binпапка

Связанный контент