普通用户授权sudo、which搜索命令路径、$PATH路径、bash内置命令有哪些

在root模式对普通用户授权:

[[email protected] ~]# visudo ==vi /etc/sudoers

在vi编辑模式,输入98gg,调到98行:

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

输入yy再输入p表示复制粘贴,并改为keke用户:

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

keke    ALL=(ALL)       ALL

[[email protected] ~]$ useradd oldgirl

-bash: /usr/sbin/useradd: Permission denied

[[email protected] ~]$ sudo useradd oldgirl

We trust you have received the usual lecture from the local System

Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.

#2) Think before you type.

#3) With great power comes great responsibility.

[sudo] password for keke:

[[email protected] ~]$ tail -1 /etc/passwd

oldgirl:x:501:501::/home/oldgirl:/bin/bash

给普通用户keke授予touch、useradd权限:

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

keke    ALL=(ALL)       /bin/touch, /usr/sbin/useradd

(放具体路径作为权限)

[[email protected] ~]# su - keke

[[email protected] ~]$ sudo touch wuyike.txt

[sudo] password for keke:

[[email protected] ~]$ ll

total 0

-rw-r--r--. 1 root root 0 Mar  4 08:17 wuyike.txt

以后用sudo touch...时不需要再输入密码:

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

keke    ALL=(ALL)       NOPASSWD:ALL

#keke    ALL=(ALL)      /bin/touch, /usr/sbin/useradd

另外,这条路进root不用密码:

[[email protected] ~]$ sudo su - root

[[email protected] ~]#

查找命令所在路径的方法可以有:

[[email protected] ~]# find / -type f -name "useradd"

/etc/default/useradd

/usr/sbin/useradd

[[email protected] ~]# whereis -b useradd

useradd: /usr/sbin/useradd

[[email protected] ~]# locate useradd

/etc/default/useradd

/usr/sbin/luseradd

/usr/sbin/useradd

/usr/share/man/fr/man8/useradd.8.gz

/usr/share/man/id/man8/useradd.8.gz

/usr/share/man/it/man8/useradd.8.gz

/usr/share/man/ja/man8/useradd.8.gz

/usr/share/man/man1/luseradd.1.gz

/usr/share/man/man8/useradd.8.gz

/usr/share/man/pl/man8/useradd.8.gz

/usr/share/man/ru/man8/useradd.8.gz

/usr/share/man/sv/man8/useradd.8.gz

/usr/share/man/tr/man8/useradd.8.gz

/usr/share/man/zh_CN/man8/useradd.8.gz

/usr/share/man/zh_TW/man8/useradd.8.gz

which命令:查找命令所在路径,搜索范围来自全局变量PATH变量所对应的路径

[[email protected] ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[[email protected] ~]# grep PATH /etc/profile

case ":${PATH}:" in

PATH=$PATH:$1

PATH=$1:$PATH

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

[[email protected] ~]# export PATH="/tmp:$PATH"    将tmp作为一个路径,临时地

[[email protected] ~]# echo $PATH

/tmp:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

临时修改:export PATH="/tmp:$PATH"

永久修改:前面临时修改的命令放到/etc/profile下,使用source /etc/profile使得修改立即生效。

PATH 系统路径变量执行ls/cp/mv等非内置命令时,系统会首先查找PATH里对应的路径是否有,如果没有就报告找不到该命令。

当执行which cp来查看命令所在路径时,也是从PATH变量去搜索。

自己创建一个命令并查找:

[[email protected] ~]# touch /tmp/wuyike

[[email protected] ~]# chmod +x /tmp/wuyike    将"wuyike"变成一个命令

[[email protected] ~]# which wuyike

/tmp/wuyike

[[email protected] ~]# chmod -x /tmp/wuyike    将“wuyike”取消作为命令

[[email protected] ~]# which wuyike

/usr/bin/which: no wuyike in (/tmp:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

内置命令没有路径,在visudo中无法管理内置命令,只要which查不到的都是内置命令。

bash内置命令:

(1).:执行当前进程环境中的程序。同source。

(2). file:dot命令从文件file中读取命令并执行。

(3): 空操作,返回退出状态0。

(4)alias:显示和创建已有命令的别名。

(5)bg:把作业放到后台。

(6)declare [var]:显示所有变量,或用可选属性声明变量。

(7)dirs:显示当前记录的目录(pushd的结果)。

(8)disown:从作业表中删除一个活动作业。

(9)echo [args]:显示args并换行。

(10)enable:启用或禁用Shell内置的命令。

(11)bind:显示当前关键字与函数的绑定情况,或将关键字与readline函数或宏进行绑定。

(12)break:从最内层循环跳出。

(13)builtin [sh-builtin [args]]:运行一个内置Shell命令,并传送参数,返回退出状态0。当一个函数与一个内置命令同名 时,该命令将很有用。

(14)cd [arg]:改变目录,如果不带参数,则回到主目录,带参数则切换到参数所指的目录。

(15)command comand [arg]:即使有同名函数,仍然执行该命令。也就是说,跳过函数查找。

(16)eval [args]:把args读入Shell,并执行产生的命令。

(17)exec command:运行命令,替换掉当前Shell。

(18)exit [n]:以状态n退出Shell。

(19)export [var]:使变量可被子Shell识别。

(20)help [command]:显示关于内置命令的有用信息。如果指定了一个命令,则将显示该命令的详细信息。

(21)history:显示带行号的命令历史列表。

(22)jobs:显示放到后台的作业。

(23)kill [-signal process]:向由PID号或作业号指定的进程发送信号。输入kill-l查看信号列表。

(24)let:用来计算算术表达式的值,并把算术运算的结果赋给变量。

(25)local:用在函数中,把变量的作用域限制在函数内部。

(26)fg:把后台作业放到前台。

(27)getopts:解析并处理命令行选项。

(28)hash:控制用于加速命令查找的内部哈希表。

(29)logout:退出登录Shell。

(30)popd:从目录栈中删除项。

(31)pushd:向目录栈中增加项。

(32)pwd:打印出当前的工作目录。

(33)read [var]:从标准输入读取一行,保存到变量var中。

(34)readonly [var]:将变量var设为只读,不允许重置该变量。

(35)return [n]:从函数中退出,n是指定给return命令的退出状态值。

(36)set:设置选项和位置参量。

(37)shift [n]:将位置参量左移n次。

(38)stop pid:暂停第pid号进程的运行。

(39)suspend:终止当前Shell的运行(对登录Shell无效)。

(40)test:检查文件类型,并计算条件表达式。

(41)times:显示由当前Shell启动的进程运行所累计用户时间和系统时间。

(42)trap [arg] [n]:当Shell收到信号n(n为0、1、2或15)时,执行arg。

(43)type [command]:显示命令的类型,例如:pwd是Shell的一个内置命令。

(44)typeset:同declare。设置变量并赋予其属性。

(45)ulimit:显示或设置进程可用资源的最大限额。

(46)umask [八进制数字]:用户文件关于属主、属组和其他用户的创建模式掩码。

(47)unalias:取消所有的命令别名设置。

(48)unset [name]:取消指定变量的值或函数的定义。

(49)wait [pid#n]:等待pid号为n的后台进程结束,并报告它的结束状态。

时间: 2024-10-29 08:03:34

普通用户授权sudo、which搜索命令路径、$PATH路径、bash内置命令有哪些的相关文章

Linux Bash内置命令大全详细介绍

转自:http://os.51cto.com/art/201006/207329.htm 主要Shell内置命令 Shell有很多内置在其源代码中的命令.这些命令是内置的,所以Shell不必到磁盘上搜索它们,执行速度因此加快.不同的Shell内置命令有所不同. A.2.1  bash内置命令 .:执行当前进程环境中的程序.同source. . file:dot命令从文件file中读取命令并执行. : 空操作,返回退出状态0. alias:显示和创建已有命令的别名. bg:把作业放到后台. bin

Bash内置命令exec和重定向

Bash内置命令exec可以替换当前程序而不需要启动一个新的进程,可以改变标准输入和输出而不需要启动一个新的子进程.如果文件用exec打开,read命令就会把文件指针每次指向下一行直到文件的末尾,如果要重新从文件开始读取,则必须把文件关闭再重新打开. 1.替换当前shell,执行某个命令,命令终止,shell也就终止了$exec ls 2.打开文件作为当前shell的标准输入$exec <file_name 3.打开文件作为当前shell的标准输出$exec >file_name 4.打开文件

bash内置命令

  内置命令 想知道某个命令是否是由bash内置的命令的话,我们可以使用type.   别名 有很多的shell内置的命令,如果我们想关闭某个命令的话,那么就可以使用 enable :用来开启或者关闭某个内置命令的功能       set命令     用set命令可以设置各种shell选项或者列出shell变量.单个选项设置常用的特性.在某些选项之后-o参数将特殊特性打开.在某些选项之后使用+o参数将关闭某些特性,不带任何参数的set命令将显示shell的全部变量.除非遇到非法的选项,否则set

Linux内置命令和外部命令

1.Linux的命令可以分为内部命令和外部命令: 内置命令在系统启动时就调入内存,是常驻内存的,所以执行效率高. 而外部命令是系统的软件功能,用户需要时才从硬盘中读入内存. 2.type -  Display information about command type   #查看当前系统的命令是否为内置命令和外部命令. 3.BASH_BUILTINS  alias, bg, bind, break, builtin, caller, cd, command, compgen, complete

Linux内置命令

主要Shell内置命令 Shell有很多内置在其源代码中的命令.这些命令是内置的,所以Shell不必到磁盘上搜索它们,执行速度因此加快.不同的Shell内置命令有所不同. A.2.1 bash内置命令 .:执行当前进程环境中的程序.同source. . file:dot命令从文件file中读取命令并执行. : 空操作,返回退出状态0. alias:显示和创建已有命令的别名. bg:把作业放到后台. bind:显示当前关键字与函数的绑定情况,或将关键字与readline函数或宏进行绑定. brea

Linux 基础知识:Bash Shell 内置命令

bash内置命令无须搜寻环境变量$PATH中提供的路径,直接可以执行,因此速度很快. 以下介绍几个简单.必备的命令用法. 1. help 用途:显示所有bash内置命令的列表,或某一个内置命令的用法. 用法: 4help 执行结果:显示所有内置命令的列表. 4help –s 内置命令 执行结果:显示内置命令的语法格式. 用例: help cd 显示cd命令的详细用法. help –s printf printf: printf [-v var] format [arguments] 显示prin

&lt;linux下内置命令和外部命令&gt;

Linux下内置命令和外部命令 1.linux的命令可以分为内部命令和外部命令: 内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高. 而外部命令是系统的软件功能,用户需要时才从硬盘中读入内存. enable既可以查看内部命令,同时也可以判断是否为内部命令. [[email protected] ~]# enable ls  //判断ls是否为内置命令-bash: enable: ls: not a shell builtin //它不是内部命令[[email protected] ~

[笔记]内置命令与外部命令

内置命令(bulidin command):Bash程序本身提供,不需要到$PATH中查找,执行效率高外部命令:独立存在与文件系统中的可执行文件,文件需要存在于$PATH中        判断方法:type COMMAND 注意:Linux中严格区分大小写!!! 常见的内置命令:    help: 显示所有内置命令列表或单个内置命令的用法    type:判断命令的类型是内置还是外部命令    echo:显示,默认自动换行(加 -n 选项取消换行)    printf:依照格式显示参数内容,与C

Bash基础——内置命令

参考:列出所有Bash Shell内置命令的方法示例 Shell Builtin Commands 前言 Shell有很多内置在其源代码中的命令.由于命令是内置的,所以Shell不必到磁盘上搜索它们.内置命令执行速度更快,不同的Shell内置命令有所不同. 内置命令的类型 Bourne Shell BuiltinsBash Builtin CommandsThe Set BuiltinSpecial Builtins 原文地址:https://www.cnblogs.com/kelamoyuju