小编Pet*_*ter的帖子

"biosdevname"如何真正起作用?

我知道"biosdevname"Linux 中功能的用途,但我不确定它是如何工作的.

我用Ubuntu 14.04和Ubuntu 14.10(都是64位服务器版本)进行了测试,看起来它们默认启用它 - 在系统启动后我的网络接口有一个名称,p4p1而不是eth0,不需要自定义.据我了解,为了biosdevname启用,必须满足这两个条件:

  • biosdevname=1必须将引导选项传递给内核
  • biosdevname 必须安装包

正如我已经提到的,Ubuntu 14.04和14.10似乎都提供biosdevname 默认功能:它们biosdevname已经安装了包,我也不需要修改grub.cfg- GRUB_CMDLINE_LINUX_DEFAULT没有参数,我的网络接口仍然有BIOS名称(p*p*)而不是内核名称(eth*.)

后来我想恢复旧式设备命名,这就是有趣部分开始的地方.在尝试禁用该biosdevname功能时,我决定尝试一下.因为它需要biosdevname包工作(或者我在这里和那里阅读),我假设删除它就足以禁用该功能,所以我输入:

sudo apt-get purge biosdevname
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,之后重新启动我的网络接口仍然p4p1,如此 biosdevname显然还是即使工作biosdevname包已经被消灭了.

下一步,我应用了适当的更改/etc/network/interfaces,以便恢复我的网络接口的旧名称(删除条目p4p1 和添加条目eth0).结果,在另一次重新启动后,ifconfigeth0没有报告也没有报告p4p1操作系统仍然理解BIOS名称而不是内核名称.

事实证明,我还必须显式更改GRUB条目 GRUB_CMDLINE_LINUX_DEFAULT=biosdevname=0并更新GRUB以获得预期结果(已biosdevname禁用和恢复网络接口的旧名称).

我的问题是:biosdevname没有biosdevname包裹怎么办?毕竟不是必需的吗?如果是这样,究竟是什么提供了biosdevname 功能以及它是如何工作的?

linux ubuntu

6
推荐指数
1
解决办法
8889
查看次数

以root身份运行程序时的结果很奇怪

这是一个演示我的问题的程序的完整源代码(操作系统是Ubuntu 14.04 32位,如果重要的话):

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, const char *argv[])
{
   int status, fd;

   printf("CURRENT UID: %d, CURRENT GID: %d\n", getuid(), getgid());

   fd = open("/dev/ttyS0", O_WRONLY);
   if(fd < 0)
   {
      printf("Error opening /dev/ttyS0: %s\n", strerror(errno));
      return 1;
   }
   printf("Successfully opened /dev/ttyS0\n");
   close(fd);

   /* DROP PRIVILEGES */

   setgid(1000);
   setuid(1000);

   printf("CURRENT UID: %d, CURRENT GID: %d\n", getuid(), getgid());

   fd = open("/dev/ttyS0", O_WRONLY);
   if(fd < 0)
   {
      printf("Error opening /dev/ttyS0: %s\n", strerror(errno));
      return 1; …
Run Code Online (Sandbox Code Playgroud)

c linux ubuntu

5
推荐指数
1
解决办法
165
查看次数

Bash - 为什么$ VAR1 = FOO或'VAR = FOO'(带引号)返回命令未找到?

对于下面两个例子中的每一个,我将尝试解释我期望的结果和我得到的结果.我希望你帮我理解为什么我错了.

1)

VAR1=VAR2 $VAR1=FOO

结果: -bash: VAR2=FOO: command not found

在第二行中,$VAR1扩展为VAR2,但为什么Bash将结果解释VAR2=FOO为命令名而不是变量赋值?

2) 'VAR=FOO'

结果: -bash: VAR=FOO: command not found

为什么引号使Bash将变量赋值视为命令名?

你能否一步一步地描述Bash如何处理我的两个例子?

bash

1
推荐指数
1
解决办法
219
查看次数

标签 统计

linux ×2

ubuntu ×2

bash ×1

c ×1