XXHolic / segment

some notes
MIT License
28 stars 4 forks source link

sudo 找不到命令 #43

Open XXHolic opened 5 years ago

XXHolic commented 5 years ago

引子

在配置服务器时,碰到这个问题,在网上找了资料,发现大部分都是很简洁的说明,试了好久发现不对,在此记录一下相关点。

操作系统:CentOS 7.6 64位

简介

sudo 是 Unix/Linux 平台上的一个非常有用的工具,它能够让一般用户执行一些超级用户才能运行的指令,root 用户通过在 /etc/sudoers 文件中设置 sudo 条目完成这个过程。推荐使用 sudo visudo 命令编辑此文件,它可以检查文件配置是否正确。

排查 1:是否安装了 sudo

有人说可能是没有安装,那么直接执行查看版本的指令:

sudo -V

我这里没有问题,接着下一步。

排查 2:sudo 会重置命令 PATH 命令

这个网上说的人不少,个人遇到出问题的指令是重启网络 sudo /etc/init.d/networking restart

解决方法是:

  1. 第一步把 /etc/sudoers 中有句 Defaults env_reset 改成 Defaults !env_reset,这句在文件里是唯一的,很容易找到。
  2. 修改 .bashrc 文件,添加 alias sudo='sudo env PATH=$PATH' , 这样 sudo 执行命令时所搜寻的路径就是系统的 PATH 变量中的路径。

不少的资料都说 .bashrc 的路径是 /etc/.bashrc ,但进入到对应文件夹执行 ls -al 后,怎么也找不到这个文件,有可能是系统不一样。那么就全局查找一下:

sudo find / -name .bashrc

发现同名文件不止一个,所需文件路径是 /root/.bashrc ,该文件默认是隐藏的,要执行 ls -al 后才能看到。里面默认的内容是这样的:

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

.bashrc 文件包含用于用户的 bash shell 的 bash 信息,当登录或每次打开新的 shell 时,该文件会被读取。每次修改 .bashrc 后,在对应文件夹下需执行 source .bashrc,才能让修改后的设置生效。

修改后再执行重启网络命令,还是出现错误提示:

env: /etc/init.d/networking: 没有那个文件或目录

排查 3:是否有该文件

一开始我认为在 Linux 里面主要文件路径应该差不多,看到别人提示说“先检查是否有这个文件”时,于是就去检查一下,发现系统下不是 networking , 而是 network , 其实从一开始执行下面这条指令就是对的了:

sudo /etc/init.d/network restart

使用配置过后的命令也没有问题。

参考资料