AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 829
In Process
Chris Marasti-Georg
Chris Marasti-Georg
Asked: 2009-05-01 06:04:03 +0800 CST2009-05-01 06:04:03 +0800 CST 2009-05-01 06:04:03 +0800 CST

如何在不浪费 HD 空间的情况下使用 cygwin?[关闭]

  • 772
关闭。这个问题是题外话。它目前不接受答案。

关于服务器故障的问题必须与在业务环境中管理信息技术系统有关。家庭和最终用户计算问题可以在Super User上提出,关于开发、测试和开发工具的问题可以在Stack Overflow上提出。

4年前关闭。

改进这个问题

我喜欢使用Cygwin,但我讨厌它似乎使用了我不需要的缓存东西的所有额外磁盘空间。我可以删除什么以使我的安装占用空间尽可能小?

在相关的说明中,什么是一套好的准系统包,可以为我提供必需品,没有我可能永远不会运行的绒毛?

cygwin
  • 9 9 个回答
  • 13972 Views

9 个回答

  • Voted
  1. Dan
    2009-06-08T22:47:07+08:002009-06-08T22:47:07+08:00

    有些人似乎认为在这个人使用的任何平台上更换硬件都很容易。如果他们可能使用 CF 适配器和 4GB 卡在上网本或类似设备上运行 Windows,那么 500MB 实际上可能是要牺牲的大量空间。或者他们可能正在将其安装到虚拟映像中,而这些额外信息意味着它在安装在解压缩的 DVD 上或必须跨越多个 DVD 与处理随之而来的问题之间的区别,特别是如果它被发送给客户例如,不是特别技术性;针对贵公司开发的应用程序的内部培训材料。为所有受训者提供一个相同的定义图像可以创造奇迹,使环境同质化,并使培训师的生活更轻松。

    解决用户提出的问题或向他们提问以获取更多信息。

    潜在的解决方案:

    安装 Cygwin 时,在屏幕上询问您将软件包存储在哪里,将其指向特定位置,例如 c:\Cygwin\Packages。正常安装,运行它以检查它是否正常运行。删除存储包的文件夹,如果需要更新,Cygwin 将再次下载它,这不是最有效地使用带宽,但根据您的要求,它可能比在本地保存缓存更好。

    另一种选择是安装这些软件包,但第一次安装时,请将软件包保存到另一个位置,例如 USB 驱动器,然后如果你必须这样做

    • 6
  2. Brian De Smet
    2009-06-09T15:47:19+08:002009-06-09T15:47:19+08:00

    我注意到我当前的安装小于 250MB,在我开始在我的笔记本电脑上关心它之前,它必须是这个大小的四倍。

    但是,如果你需要让它变小...

    下载安装程序。将其保存到 c:\cygwin\setup.exe。运行安装程序。尽可能多地取消选择包。请注意,如果您选择有要求的包,它将自动选择所需的包。删除安装程序缓存(应该默认为 c:\cygwin(http|ftp)something oranother。从 c:\setup.exe 重新运行安装程序,尝试卸载更多包。重复直到安装程序尽可能小。

    请注意,即使是最小的安装,也会需要一堆基本的库包。我过去(大约一年前)将它降低到 100 兆以下,同时仍然拥有我曾经在 bash 脚本方面投入的所有东西。

    • 6
  3. Sam Merrell
    2009-05-01T07:11:36+08:002009-05-01T07:11:36+08:00

    如果不安装 Cygwin,我就无法使用 Windows,但我从来没有真正遇到过使用磁盘空间的问题。我认为您可以删除 Cygwin 存储软件包的文件夹,但每次更新 Cygwin 时,它都会下载所需的软件包。

    至于准系统设置,它真的取决于你需要什么。我从基本的 Cygwin 安装开始,然后添加 OpenSSH、Cron、RXVT、Screen、Vim、Git、Curl、Zip/Unzip 和 Wget。这些是我需要的大部分工具,但如果需要,我只是安装其他东西。

    • 2
  4. Brian De Smet
    2009-06-09T15:54:13+08:002009-06-09T15:54:13+08:00

    除了 Cygwin,您还可以使用更多不打算解决 Cygwin 旨在解决的所有问题的软件包。有一些 unix 实用程序包,其中只有最常用的程序的有限选择。

    Unix Utilties for Windows是我以前使用的那个,但它似乎是一个死项目。

    GnuWin32似乎还活着。

    • 1
  5. brianegge
    2009-07-08T19:56:14+08:002009-07-08T19:56:14+08:00

    我将从基本的 cygwin 包开始,并在您需要的任何其他命令中使用“page-fault”。我保留了我使用的常用实用程序的列表,但可能与您使用的完全不同。安装 Cygwin 时不要选择所有包。我这样做过一次,大约需要 6GB。我的想法是,我永远不必担心没有程序。这是个坏主意。

    我的 Windows XP 机器有 1.1 GB 的服务包卸载数据。在尝试修剪 Cygwin 之前,我会删除这些文件。尝试使用WinDirStat程序并查看所有硬盘空间的去向 - 它可能不是 Cygwin。此外,有时您可能应该删除 C:\cygwin\tmp,因为重新启动时不会清除它。

    • 1
  6. Arialdo Martini
    2012-04-21T03:03:08+08:002012-04-21T03:03:08+08:00

    您可以从 CygWin 切换到Gow,这是 CygWin 的轻量级替代品(大约轻 10 倍)

    • 1
  7. Lou Fiorino
    2015-01-30T11:34:48+08:002015-01-30T11:34:48+08:00

    如果您多次提取设置文件,您会看到未使用的文件被留下...

    要清理 Cygwin 安装集(不是已安装的代码库,而是用于执行安装的包...

    我想我在某处看到了一个 perl 脚本来执行此操作,但请尝试使用此 java 代码来清理 Cygwin 设置:

        import java.io.BufferedReader;
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.InputStreamReader;
        import java.text.DecimalFormat;
        import java.util.HashSet;
    
        public class CygwinCleaner {
                boolean doClean = false;
                long diskFileCount = -1;
                long setupFileCount = 0;
                long missingFileCount = 0;
                long srcFileCount = 0;
                long deleteCount = 0;
                public HashSet<String> pkgs = new HashSet<String>(9999);
    
                public String formatCount(long count) {
                        DecimalFormat df = new DecimalFormat("##,###");
                        String retval = "      " + df.format(count);
                        return retval.substring(retval.length() - 6);
                }
    
                public void checkForMissingFiles() {
                        for (String filename : this.pkgs) {
                                if (!filename.contains("-src.")) {
                                        if (!((new File(filename)).exists())) {
                                                System.err.println(" Missing " + filename);
                                                missingFileCount++;
                                        }
                                }
                        }
                }
    
                public void checkOrCleanFiles(File testfile) {
                        String tfap = null;
                        if (testfile.isDirectory()) {
                                for (File file : testfile.listFiles()) {
                                        checkOrCleanFiles(file);
                                }
                        } else {
                                this.diskFileCount++;
                                tfap = testfile.getAbsolutePath();
                                if (!this.pkgs.contains(tfap)) {
                                        if (this.doClean) {
                                                System.err.println("Deleting \"" + tfap + "\"");
                                                if (testfile.delete()) {
                                                        this.deleteCount++;
                                                } else {
                                                        System.err.println("COULD NOT DELETE \"" + tfap + "\"");
                                                }
                                        } else {
                                                System.err.println("WOULD delete \"" + tfap + "\"");
                                        }
                                }
                        }
                }
    
                public boolean loadFileList(File file) {
                        boolean retval = false;
                        if (file.exists()) {
                                try {
                                        String basedir = (new File(file.getParent())).getParent() + "/";
                                        basedir = basedir.replace('\\', '/');
                                        BufferedReader br = null;
                                        br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
                                        String line = br.readLine();
                                        String installFile = null;
                                        boolean processlines = false;
                                        while ((line = br.readLine()) != null) {
                                                if (processlines) {
                                                        if (line.startsWith("install:") || line.startsWith("source:")) {
                                                                installFile = line.substring(1 + line.indexOf(" "));
                                                                installFile = installFile.substring(0, installFile.indexOf(" "));
                                                                installFile = basedir + installFile;
                                                                String hashString = (new File(installFile)).getAbsolutePath();
                                                                if (!this.pkgs.contains(hashString)) {
                                                                        this.pkgs.add(hashString);
                                                                        this.setupFileCount++;
                                                                        if (line.startsWith("source:")) {
                                                                                srcFileCount++;
                                                                        }
                                                                }
                                                        }
                                                }
                                                if (line.startsWith("@ ")) {
                                                        processlines = true;
                                                }
                                                if (line.startsWith("[test]") || line.startsWith("[prev]")) {
                                                        processlines = false;
                                                }
                                        }
                                        br.close();
                                        retval = true;
                                } catch (Throwable t) {
                                        t.printStackTrace();
                                }
                        }
                        return retval;
    
                }
    
                public static void main(String[] args) {
                        if (args.length == 0) {
                                System.err.println("Usage:::::   CygwinCleaner    {full_path_to_setup.ini}    [CLEAN]\nIf only the ini file is specified then a report will be generated\nTo perform the cleanup add the second optional parameter of CLEAN");
                        } else {
                                System.out.print("CygwinCleaner: ");
                                CygwinCleaner cc = new CygwinCleaner();
                                String setupFileName = args[0];
                                if (args.length > 1) {
                                        if (args[1].equalsIgnoreCase("CLEAN"))
                                                cc.doClean = true;
                                }
                                if (cc.doClean) {
                                        System.out.println("Performing cleanup\n");
                                } else {
                                        System.out.println("Reporting only\n");
                                }
                                File file = new File(setupFileName);
                                cc.pkgs.add(file.getAbsolutePath());
                                if (cc.loadFileList(file)) {
                                        cc.checkOrCleanFiles(file.getParentFile());
                                        cc.checkForMissingFiles();
                                        System.out.println("     Total of:" + cc.formatCount(cc.setupFileCount) + " files in setup.ini");
                                        System.out.println("       Source:" + cc.formatCount(cc.srcFileCount) + " files in setup.ini");
                                        System.out.println("      Leaving:" + cc.formatCount((cc.setupFileCount - cc.srcFileCount)) + " files in setup.ini\n");
                                        System.out.println("     Total of:" + cc.formatCount(cc.diskFileCount) + " files in setup directory before cleanup");
                                        System.out.println("      Deleted:" + cc.formatCount(cc.deleteCount) + " files in setup directory (unused)");
                                        System.out.println("      Leaving:" + cc.formatCount((cc.diskFileCount-cc.deleteCount)) + " files in setup directory after cleanup\n");
                                        System.out.println("      Missing:" + cc.formatCount(cc.missingFileCount) + " files in setup directory that are contained in setup.ini");
                                } else {
                                        System.err.println("setup.ini file (" + setupFileName + ") does nofiles in setup");
                                }
                        }
                }
        }
    
    • 1
  8. Agnatha
    2016-12-24T11:53:35+08:002016-12-24T11:53:35+08:00

    我一直在尝试 Cygwin,试图获得一个“简单的”,最小的安装。我确实发现安装 grep、gawk、sed 和类似工具等实用程序对 cygwin、base-Cygwin 以及有时不需要的工具(如 bash、coreutils 等)有依赖关系,我还没有尝试完全理解为什么存在这种依赖关系,但这不是我的目标。我只想安装工具及其所需的 dll 并开始检查 Cygwin 包。我发现不使用 Cygwin 提供的 setup.exe 是完成最小 Cygwin 安装的另一种方法。这就是我完成它的方式。

    1. 使用 Cygwin 提供的 setup.exe 下载所有软件包 - 仅下载而不安装。
    2. 成功完成下载后,会在 x86/release 或 x86_64/release 目录下找到 zlib、gawk、grep、libiconv 等单个软件包。
    3. 每个包都是'tar'red 并使用工具'xz' 或bzip 压缩并存储在各自的目录中。
    4. 要安装 sed 或 gawk 等特定工具,只需提取工具可执行文件及其依赖项 (.dll)

      在您尝试以下操作之前,请确保您拥有 7z.exe、xz.exe、bzip2 或其他能够解压缩 .xz 或 bzip 存档的工具

    安装 gawk 示例如下:

    1. 使用以下命令从 gawk-4.1.3-1.tar.xz 存档中提取 gawk.exe - 7z.exe e -so gawk-4.1.3-1.tar.xz | 焦油 xvf -
    2. 完成后,您通常应该在子文件夹中找到 gawk.exe,即 release/gawk 文件夹下的 usr/bin
    3. 查找 gawk 的依赖项 - 您可以通过多种方式执行此操作。

      检查在 x86 或 x86_64 文件夹中找到的 Cygwin setup.ini 文件。查找字符串 '@gawk' 并在此行之后的行中找到列出依赖项的“requires:”行。

      我的读法是这样的-“需要:bash cygwin libgmp10 libintl8 libmpfr4 libreadline7”

    要运行 gawk,bash 不是必须的,因为我们有 windows 命令 shell。(包含 bash 以获取 gawk 所需的其他一些 dll。但是,这会导致安装更多不必要的文件)。其他依赖项包含 gawk 需要运行的文件。使用 7z 或 xz 等工具将上述每个包提取到单独的文件中。

    提取所有依赖项后,将所需的工具(grep/sed/gawk)复制到一个文件夹和所有依赖的 .dll 中,您现在应该能够使用所需的最少 .dll 集来运行您的工具。 -bones cygwin 安装。

    注意:仅提取 setup.ini 中列出的每个工具的依赖项可能还不够。有时,您可能需要执行/运行该工具以发现需要更多 dll。

    还有其他方法可以找出 exe 所需的 dll - 您可以使用 MS 中的 dumpbin 或 dependency walker、ndepends 或类似工具来查找依赖 dll 的列表

    咨询 - https://stackoverflow.com/questions/362560/how-do-i-detect-the-dlls-required-by-an-application https://stackoverflow.com/questions/475148/how-do-i -找出-哪个-dll-一个-可执行文件-将加载

    我还通过仅运行该工具并通过从所需的包中提取来一一安装缺少的 dll 来强制依赖 dll 信息。

    当您运行 exe 时,如果它因缺少 .dll 消息而出错,请在此处搜索包含该 dll 的包 - https://cygwin.com/cgi-bin2/package-grep.cgi。输入缺少的 dll 的全名/部分名称以查找包含该 dll 的包的名称。

    最终,我完成了一个简单的 cygwin 安装,只安装了我需要的工具和 dll。示例:gawk - gawk.exe 和以下 dll - cygwin1.dll、cyggmp-10.dll、cygiconv-2.dll、cygintl-8.dll、cygmpfr-4.dll、cyggcc_s-seh-1.dll、cygncursesw- 10.dll、cygreadline7.dll

    sed - sed.exe 和 dll - cygwin1.dll、cygintl-8.dll

    希望这是有用的。Cywin 安装程序也做了 dll re-basing,我不会在这里冒险

    • 1
  9. netlinxman
    2009-06-08T19:53:05+08:002009-06-08T19:53:05+08:00

    作为 cygwin 用户,我同意前面的两个帖子。

    需要:grep、sed、awk、cut、diff、comm、vim、OpenSSH、tar、gzip、bash、wget

    至于空间,我同意伊恩的观点。为空间付出的小代价。您现在可以以低于 100.00 美元的价格购买 1TB 10,000 RPM 驱动器。我记得我们都必须为 20.00 GB 驱动器支付超过 150.00 美元。

    如果您真的关心本地驱动器空间,请尝试让自己的 NAS 存储盒坐在您的网络上,并将“下载的包”存储到其中。这将进一步减少您自己机器上的占用空间。

    为 Cygwin 付出的代价真的很小。

    • 0

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve