是否可以访问终端命令的源代码或配置文件,阅读它的工作原理,甚至可以在本地计算机上对其进行自定义?

ozg*_*ral 6 command-line

我正在尝试了解 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
Run Code Online (Sandbox Code Playgroud)

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

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

L. *_*mes 9

快速回答:

研究终端命令。

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

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

在互联网因表演你所指的不知道而如此流行之前,人们非常依赖图书馆、书籍和手册。人们家里有很多书籍和手册。经常去书店和图书馆。我过去常常在图书馆度过很多小时,几乎总是要借两三本书用于家庭研究(或编程和命令)。我去图书馆做研究已经有大约 20 年了。我不时去图书馆参加一些研讨会或会议。我也属于两个共享信息的计算机俱乐部。两家具乐部每月都会发布通讯,其中包括重要的计算机和编程信息。

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

感谢终端命令并输入:

$ man [terminal command]
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令研究bash导入命令(来自您的问题):

$ man bash
$ man import
Run Code Online (Sandbox Code Playgroud)

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

要了解命令变量的详细信息,您必须研究特定命令。一些相同的命令甚至可能有不同的风格或变体,根据 Linux 发行版或特定命令的维护者,它们可能会将其中的一些变量或细节存储在不同的区域。

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

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

  • 转到软件和更新->
  • (单击选项卡)Ubuntu 软件->
  • (打勾)源代码

    使用这个命令获取你要下载的源码包:

    $ sudo apt source <package name>
    
    Run Code Online (Sandbox Code Playgroud)

    wja*_*rea 5

    Ubuntu 实际上使用gnome-screenshot, 不是import(至少在 14.04 上)。我是怎么想出来的?好吧,首先,它import已经很老了,所以这给了我提示。但是也...

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

      我查找了一些与屏幕截图相关的关键字,例如“屏幕截图”、“捕获”、“屏幕截图”等。根据搜索词的不同,这会带来一些项目或太多项目。我看到一些命令不断出现,主要是gnome-screenshotshutter(我安装的)。

      在我们处理 GUI 的地方,它还可以帮助搜索应用程序文件,例如:

      find /usr/share/applications/ ~/.local/share/applications/ -iname "*screenshot*"
      grep -i "screenshot" /usr/share/applications/*.desktop ~/.local/share/applications/*.desktop
      
      Run Code Online (Sandbox Code Playgroud)
    • 我打开gnome-system-monitor,按Started排序,并观察当我截取屏幕截图时是否弹出命令。那时我确认是gnome-screenshot

      在命令行上,您可以使用

      watch "ps -ef --sort=start_time | tail"
      
      Run Code Online (Sandbox Code Playgroud)


    Ano*_*noE 2

    寻找源头

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

    例如,要了解有关命令lsgoogle 的更多信息ls source code,它会在顶部提供一个特殊的 google 命中,告诉您这lscoreutils.

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

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

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

    一切都在哪里?

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

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

    包管理

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

    找东西

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

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

    至于其他人如何发现;他们经常这样做,因为他们实际上在开发软件,并且通过他们的错误跟踪器与他们联系 - 了解代码库已经有很大帮助。

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

    总而言之,对于任何真正的问题,很可能有人已经遇到了它,并且已经发布了相关内容,因此谷歌搜索当然不是一个坏方法。使用正确的关键词本身就是一门艺术。

    将其提升到一个新的水平

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


    归档时间:

    查看次数:

    2164 次

    最近记录:

    7 年,5 月 前