我刚刚在 Windows 7 上下载并安装了 Cygwin。它似乎已成功安装,C:\Cygwin64
文件夹包含 1.2GB 的数据,而我从中安装它的安装文件夹刚好不到 300MB。但是,单击桌面快捷方式会打开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
在安装 GUI 中选择,我也会遇到这个问题,尽管我的错误出现如下
/bin/bash: Exit 126.
Failed to run '/bin/bash': No such file or directory
检查我的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:
- 使用桌面快捷方式,这与从 (Windows) 命令提示符运行以下命令相同
C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico -
或者
- 使用该
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
进一步探索后,我发现了一个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
或者其他类似的东西。
(我对如何在 Windows 上使用进行了一番抱怨tar
,但使用它却无法进行提取。你可以看看我的抱怨这里如果你想了解更多关于tar
Windows curl
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
GUI 重新安装,但是当我尝试这样做然后进入 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
如果您有文件需要恢复,那么现在您可能拥有第二好的机会去恢复它。
删除的一个方法是按照本 appuals 教程(已归档)。您需要管理员权限才能CMD
以管理员身份运行。
您也可以使用 Windows 资源管理器执行此操作,但您可能需要以管理员身份运行资源管理器。我也尝试过更改权限,但没有成功。
从类型菜单中,搜索cmd
,然后以管理员身份运行。请参阅下面的屏幕截图。
取得所有权
takeown /r /d y /f C:\cygwin64
请注意,该命令的两个组成词是“TAKE OWN”而不是“TAKE DOWN”。还请注意,此命令可能需要很长时间,大约需要 5-20 分钟几乎完全安装(已归档)。
接下来,我们授予每个人完全权限。
icacls C:\cygwin64 /t /grant Everyone:F
我们可以再次尝试返回并安装/重新安装bash
,但我不喜欢刚才所做的事情带来的安全隐患。
bash
如果您有文件需要恢复,那么现在可能是您恢复的第二个最佳机会。我的意思是,如果您此时使用GUI安装或重新安装setup-x86_64
,或者即使您只是使用 Windows 文件资源管理器,这也是您最好的机会。
我宁愿删除这个 Cygwin 并重新安装。如果您尝试恢复任何文件,请继续运行以下命令。
rmdir /s /q C:\cygwin64
删除后,重新安装前,请确保使用
Windows+R然后regedit
,然后移除/删除和Software\Cygwin
文件夹中的所有内容。HKEY_LOCAL_MACHINE
HKEY-CURRENT-USER
答案4
运行 Cygwin:安装-x86_64.exe
选择:下载无需安装
这将下载 Cygwin 终端文件到您的目标文件夹中http://cygwin.mirror.constant.com/
例子:C:\目标文件夹>http://cygwin.mirror.constant.com/>
跑步再次Cygwin:安装-x86_64.exe。现在,选择:安装本地目录, 点击 下一个, 点击下一个, 点击下一个, 然后结束。
去:http://cygwin.mirror.constant.com/文件夹,有两个子文件夹:
诺阿奇 x86_64
打开x86_64文件夹
打开发布文件夹
打开狂欢文件夹(里面有一个压缩文件,例如:**bash-4.4.12-
tar.xz** 文件
解压压缩的 bash 文件,出现两个文件夹(ETC和用户)。
打开ETC文件夹并复制命令行工具文件并粘贴目录:\cygwin64\bin文件夹