【问题标题】:如何更改 uname 命令搜索 uname 的位置?
【发布时间】:2022-01-23 08:25:45
【问题描述】:

我需要有关加载具有内置 platform_check 脚本的软件的帮助。我的计划是创建一个名为 uname 的脚本,执行时将打印一个接受的平台。该脚本按我的需要工作,但我不知道如何让 uname 命令搜索我的自定义 uname 脚本而不是 /bin/uname 默认值。我曾尝试使用 PATH 之类的 PATH=~/.../path_to_uname:$PATH 这不起作用。我没有 root 访问权限,所以我不能在默认位置编辑/创建 uname。

当我像这样执行脚本时: 执行 /directory_to_uname/uname 和 /directory_to_uname/uname -r 两者都按我的意图工作我只需要欺骗 shell 来寻找我的自定义 uname。

【问题讨论】:

  • 如果您没有 sudo 访问权限,除非您可以修改软件加载器,否则这似乎是不可能的。 (如果是,那将是一个巨大的安全漏洞。)在这种情况下,您根本不需要脚本。只需硬连线您想要的平台名称。另一件事是,欺骗安装程序似乎不太可能结束。安装人员需要知道系统类型来定制软件包以适应环境。说谎是不可取的。与余生一样,发生的事情总会发生。
  • 当您说您尝试过PATH=~/.../path_to_uname:$PATH 时,您是使用 uname 脚本本身的完整路径,还是使用 uname 所在文件夹的路径?你需要后者。

标签: linux unix uname


【解决方案1】:

您可以尝试使用别名来trick shell。 例如(使用 bash)编辑 ~/.bashrc 并添加 alias uname='path/to/uname uname'。执行source ~/.bashrc,命令 uname 将从别名中获取。如果您将其更改为alias uname='ls -lha' 并在执行uname 时加载(源命令),它将列出文件/目录。

【讨论】:

  • 好主意,但任何体面的安装脚本都会故意使用没有用户变量设置的 shell 来阻止 OP 正在尝试做的事情。他们想要一个原始的环境来避免奇怪的问题。
  • 我确实知道这是如何工作的,谢谢,肯定会尝试使用这种方法。 @Gene 感谢即使我们加载它也无法正常工作的提醒,我们已经没有选择了。遗憾的是,出于安全原因,我们无法启动较旧的虚拟机。
【解决方案2】:

假设您有一个这样调用 uname 的平台检查脚本,我们称之为 test.sh:

#!/bin/bash
uname

初始运行按预期显示 uname:

user@computer:~$ ./test.sh 
Linux

将 uname 作为 bash 函数导出到 echo 你想用来欺骗的东西:

user@computer:~$ function uname {
> echo "hello"
> }
user@computer:~$ export -f uname
user@computer:~$ ./test.sh 
hello

【讨论】:

    【解决方案3】:

    为了知道在命令期间访问/使用了哪些文件,您可以使用strace 命令:

    strace -y uname
    

    你会得到一大堆使用的文件和进程,你可能会看看是否有任何可以适应你的需要。

    然而,这非常危险(谁知道可能会产生什么副作用?)因此我建议您为uname 命令创建和alias

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 2011-04-05
      • 2011-10-20
      • 2015-08-28
      • 1970-01-01
      相关资源
      最近更新 更多