我正在运行 Debian 10(从 9 升级),最近我注意到系统中似乎缺少相当多的命令,除非它们运行时sudo
- bash 表示未找到它们。
$ reboot
bash: reboot: command not found
即使它们作为 运行,也会发生这种情况root
。相当多的实用程序都采用这种方式,包括:
shutdown
和reboot
许多分区工具,例如
fdisk
和gparted
update-grub
和grub-install
modprobe
我喜欢运行命令,以防sudo
万一我犯了一个错误,然后sudo !!
当我确定它输入正确时,但是这个误导性的消息导致我继续徒劳地寻找实际上在我的整个系统上的命令时间。
值得注意的是,手册页仍然存在,并且可以作为普通用户查看。
为什么我没有收到only root can do that
类似 with 的错误mount
?这种行为是否更安全?另外,有什么办法可以关掉它吗?
答案1
感谢我了解到的评论,/sbin
并且在 Debian 上默认/usr/sbin
被排除在外。$PATH
我通过将以下行添加到我的~/.bashrc
:
PATH=$PATH:/sbin:/usr/sbin
所有命令现在都显示正常:
$ update-grub
grub-mkconfig: You must run this as root
答案2
你检查过你的PATH环境变量吗?当有人意外修改 PATH 变量并且可执行搜索路径可能被破坏时,通常会发生这种情况。
答案3
(正如另一个答案中评论的那样:)“/sbin/
并且/usr/sbin/
路径通常被设计从 PATH 变量中排除,因为这些目录中的可执行文件通常需要 root 权限,因此预计不会由普通用户运行。”
使用完整的 sudo 命令,但以 开头echo
。然后,如果出现问题,例如意外按下Enter
按键,命令只会显示在屏幕上,然后您返回到命令提示符,而不会发生任何实际情况(但要小心命令替换)。然后,您可以使用Up
箭头返回以按原样编辑命令。
还要检查命令本身的手册页,因为其中一些提供了选项只显示该命令会做什么,没有实际去做。
例如,sfdisk
有选项-n
(或:)--no-action
,它可以完成您要求它做的所有事情,但是不写入设备,因此没有进行任何实际修改。
要进行永久更改,请编辑.bashrc
用户主目录中的文件(如果您使用 BASH)。要使更改对新用户永久生效,您可以在/etc/skel/
.在默认行为下,此目录的内容将复制到您添加的任何新用户的主目录中。
安全须知:以下链接中的教程建议bin/
在每个用户的主目录中添加一个目录,以允许他们使用自己的可执行文件。然而,一个好的安全实践是禁用/home
通过使用noexec
中的修饰符从分区运行可执行文件fstab
。这样做将确保只有管理员批准的可执行文件才能运行。目录/usr/local/
树提供了空间来添加不通过标准(安全)存储库的可执行文件,以便可以维护管理控制,同时仍然允许从发行版提供的标准包进行扩展。
看一下像这样的简短教程也许有用:https://www.howtoing.com/set-path-variable-linux-permanently/