寻找源头

寻找源头

我正在尝试了解 Linux,并且经常根据具体情况解决问题,而没有真正学习如何自己找到答案,当然,我不愿意这样做。

例如,我设置了一个键盘快捷键来选择一个区域并对其进行截图。每次我选择一个区域时,它总是默认为 /Pictures,我想编辑默认目录或它向我显示的快速下拉选项。

我发现了一个回答和往常一样,但这次我想知道如果没有答案,人们通常如何处理这个问题。肯定有一套合乎逻辑的步骤来精确定位终端命令的工作原理/它从哪里获取参数。

针对这个特殊情况,我在网上查找了Ubuntu使用哪个命令来截屏,结果发现是import

所以我的问题是,

  1. 查找终端命令的配置文件/位置/代码级别信息(例如,不是如何调用它,而是它在调用时具体做什么)

  2. 如何找出特定操作对应的终端命令。(import例如,当我截取屏幕截图时,就会调用此命令)

换句话说,如果我无法访问互联网或没有人知道答案,我怎么能自己解决这个问题呢?:)我对方法/逻辑更感兴趣,但import在这种情况下将是一个很好的例子。

编辑:

我认为我的问题与建议的可能重复问题不同,因为我在寻求一种获取源代码的方法(如果可能的话)。换句话说,我在寻求一种读取命令的源代码及其使用的文件的方法(例如,可能有一个用于导入函数的配置文件,如果我能找到它,我会更改默认保存目录)。为了进一步澄清,我试图找到的文件(如果可以找到它)的代码等同于以下伪代码:

<when run>
change mouse pointer to + shape
..wait for a click..
on click -> wait for release..
on release -> take the area between click and release coordinates
read config file located at ./config and get default-save-directory variable
initialize path to default-save-directory
ask user where to save the image

这必须保存在操作系统的某个地方。“这是不可能的,因为......”(例如,它可能在汇编级别)也是一个答案,但使用 man 来获取有关此功能功能的说明不是一个答案,因为我想了解它是如何工作的。

换句话说,如果一个 Linux 忍者要在本地计算机上修改导入命令,他会去哪里,并在屏幕截图保存的图片中添加签名。

答案1

快速回答:

研究终端命令。

对于变量或细节的存储位置,没有绝对的既定规则。 如果您不知道终端命令的详细信息,则必须查找它以确定。

大多数终端命令,尤其是那些有很多选项的命令,都有系统默认安装的手册,这使得查找变得容易。其中还包括终端命令的 shell,在 Ubuntu 中是bash默认的。

在互联网如此流行之前不知道正如您所提到的,人们非常依赖图书馆、书籍和手册。人们家里有很多书籍和手册。他们经常去书店和图书馆。我过去经常在图书馆里花很多时间,几乎总是借两三本书进行家庭研究(或编程和命令)。我上次去图书馆做研究已经有 20 年了。我确实会不时去图书馆参加一些研讨会或会议。我还加入了两个计算机俱乐部,他们分享信息。两个俱乐部都出版了每月的通讯,其中包括重要的计算机和编程信息。

如果您无法访问互联网,您可以使用计算机上已有的手册来获取终端命令。

感谢终端命令并输入以下内容:

$ man [terminal command]

你可以研究狂欢进口命令(来自你的问题):

$ man bash
$ man import

这两本手册都会向您展示大量无需互联网即可进行研究的信息。它们还包含一个词汇表,您可以使用这些手册中的单词进行进一步的研究。

了解命令变量的详细信息,您必须研究特定命令。某些相同命令甚至可能具有各种风格或变体,这些变体可能会将其某些变量或详细信息存储在不同的区域中,具体取决于 Linux 发行版或特定命令的维护者。

如何下载Ubuntu的命令和应用程序的源代码:

您可以通过将源代码添加到存储库来下载命令的源代码。您可以通过以下方式找到它:

  • 软件与更新->
  • (点击标签)Ubuntu 软件->
  • (勾选)源代码

    使用此命令获取您想要下载的源包:

    $ sudo apt source <package name>
    
  • 答案2

    Ubuntu 实际上使用的是gnome-screenshot,而不是import(至少在 14.04 上)。我是怎么知道的?首先,import已经很老了,所以这让我有所警觉。但同时...

    • man -k可以用来搜索终端命令的描述。

      我搜索了一些与屏幕截图相关的关键字,例如“screenshot”、“capture”、“screencap”等。根据搜索词的不同,结果要么是少数,要么是太多。我看到一些命令不断出现,主要是gnome-screenshotshutter(我安装了)。

      当我们处理 GUI 时,它还可以帮助搜索应用程序文件,例如:

      find /usr/share/applications/ ~/.local/share/applications/ -iname "*screenshot*"
      grep -i "screenshot" /usr/share/applications/*.desktop ~/.local/share/applications/*.desktop
      
    • 我打开了gnome-system-monitor,按以下方式排序已开始,然后观察截图时是否弹出命令。这时我确认命令确实弹出了gnome-screenshot

      在命令行中,你可以使用

      watch "ps -ef --sort=start_time | tail"
      

    答案3

    寻找源头

    是的,除了一些特殊情况(例如仅二进制的视频卡驱动程序)外,您可以轻松找到并阅读 Linux 世界中所有内容的源代码。

    例如,要了解有关ls命令的更多信息,请输入 google ls source code,它将在顶部为您提供一个特殊的 google 匹配,告诉您这ls是 的一部分coreutils

    核心工具,它们是 GNU,而不是 Linux,是您在大多数发行版中整天使用的命令。从该登录页面,您可以轻松下载整个 tarball,或直接浏览其 git 存储库。

    例如,这是最有趣的目录(此时,链接显示固定的哈希值,因此如果您稍后阅读此答案,请务必再次从顶部浏览):主分支中“src”的历史视图

    类似的方法适用于包括内核本身在内的所有其他开源程序。

    所有东西都在哪儿?

    which ls显示特定二进制文件的位置。

    Linux 文件系统标准列出保存文件的所有常见位置。

    包管理

    根据您的发行版,您可以通过包管理器(例如)或多或少轻松地下载源包apt-get source $package,这应该更加轻松。这有明显的好处:a) 非常容易;b) 应该准确返回二进制文件实际使用的源代码版本。当然,这取决于发行版。

    寻找物品

    您的问题的核心是如何了解某个软件的行为。如果您只是获取源代码,这通常并不是一件容易的事。在极端情况下,即如果该软件对您来说确实至关重要/必不可少,并且您绝对必须使其工作,那么这可能是一种可行的途径,但一般来说,您最好还是谷歌搜索。我已经做了相当多的(滥用)大型软件包的源代码,特别是在编译软件时(通常会出现库或编译器版本略有不匹配的奇怪边缘情况),我向您保证这会很令人满意,但通常需要大量工作。

    如果您确实找到了问题的解决方案,请务必通过拉取请求将其流回当前维护者,如果您认为它对其他人有价值(而不仅仅是修复软件以更符合您的个人意愿)。

    至于其他人是如何发现的;他们之所以能发现通常是因为他们实际上在开发软件,并通过软件的错误跟踪器进行联系 - 了解代码库已经有很大帮助。

    当然,还有真正的黑客实际上喜欢深入研究他们遇到的任何问题源代码。

    总而言之,对于任何真正的问题,很可能有人已经遇到过,并发布了相关帖子,因此谷歌搜索绝对不失为一种好方法。使用正确的关键词本身就是一门艺术。

    将其提升到新的水平

    这一切都很好很有趣,但如果你想去真实的深入兔子洞,你可以引导从头开始的 Linux。该网站将指导您构建一个完整(尽管非常小)的 Linux 系统完全地从头开始,即从源代码开始。根本没有现成的二进制文件。

    答案4

    man <command>通常是一个很好的起点,通读它,看看是否能找到你需要的内容。

    一个经常被遗忘的命令是信息,不幸的是它总是有额外的信息,因为import它不能很好地服务,但对于测试尝试man gpg,它会给你一个非常简短的概述,然后尝试info gpg 你会看到更多的信息。

    一些比较晦涩/较旧的命令将会有好的info页面。

    祝你好运。

    相关内容