免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 一生有你llx
打印 上一主题 下一主题

[系统管理] Linux基础命令 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
11 [报告]
发表于 2018-10-20 08:58 |只看该作者

cal

cal指令可以显示一个日历信息,如果没有指定选项和参数,那么就会显示当前的月份。

此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

1、语法

cal [-smjy13]  [[[day] month] year]  

2、选项列表

选项

说明

-V

显示命令版本信息

-1

显示一个月的日历信息,这是默认值

-3

显示上个月、这个月、下个月的日历信息

-s

将星期日作为第一天来显示

-m

将星期一作为一周的第一天,默认星期日是第一天

-j

显示儒略历(显示的是从1月1日起,到当前的天数)

-y

显示当年的日历信息

     一个参数指定要显示的年份(1-9999);请注意,必须指定完整的年份:“cal 89”将不显示1989年的日历。两个参数表示月份(1-12)和年份。三个参数表示日期(1-31)、月份和年份,如果在终端上显示日历,则会突出显示日期。如果没有参数,则显示当前月份的日历。一年从1月1日开始。一周的第一天由地区决定。

3、实例

1)显示儒略历日历

[root@localhost ~]# cal j      //这里显示的不是“日”,而是一年的第几天

         九月2018         

日  一  二  三  四  五  六

                        244

245 246 247 248 249 250 251

252 253 254 255 256 257 258

259 260 261 262 263 264 265

266 267 268 269 270 271 272

273

2)将“星期日”作为第一天显示,显示最近3个月

[root@localhost ~]# cal -3 -s

      八月 2018               九月2018                 十月 2018     

日  一 二  三  四 五  六      日  一  二 三  四  五六    日 一 二  三  四 五 六

            1  2  3   4                            1        1   2   3  4  5  6

5  6  7   8  9  10 11      2   3   4  5   6  7  8     7  8   9  10 11 12 13

12 13 14 15 16 17 18      9   10 11 12 13 14 15    14 15 16 17 18 19 20

19 20 21 22 23 24 25      16  17 18 19 20 21 22    21 22 23 24 25 26 27

26 27 28 29 30 31          23 24 25 26 27 28 29    28 29 30 31         

                              30                                       

[root@localhost ~]#

3)将星期一作为一个星期的第一天

[root@localhost ~]# cal -m

      九月2018     

一 二 三 四 五 六日

                1  2

3  4  5  6  7  8  9

10 11 12 13 14 15 16

17 18 19 20 21 22 23

24 25 26 27 28 29 30


论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
12 [报告]
发表于 2018-10-20 09:18 |只看该作者

chkconfig
  启动或者关闭系统服务,设置服务的运行级别,该指令并不会立刻启动或者停止服务,而是在开机的时候发生效果。
chkconfig提供了一个简单的命令行工具,用于维护/etc/rc[0-6].d目录层次结构,使系统管理员不必直接操作这些目录中的许多符号链接。这个chkconfig的实现受到IRIX操作系统中的chkconfig命令的启发。但是,这个版本没有在/etc/rc[0-6].d层次结构之外维护配置信息,而是直接管理/etc/rc[0-6].d中的符号链接。这将留下所有有关在单个位置启动服务init的配置信息。
  chkconfig有五个不同的功能:添加用于管理的新服务、从管理中删除服务、列出服务的当前启动信息、更改服务的启动信息以及检查特定服务的启动状态。
当chkconfig后面只有一个服务名称的时候,它会检查服务是否配置为在当前运行级中启动。如果是,则chkconfig返回true;否则返回false。“--level”选项可以用来使chkconfig查询指定运行级下的服务状态,而不是当前的运行级。当使用“--list”参数运行chkconfig或根本没有参数时,将显示所有服务及其当前配置的清单。
  如果在服务名称之后指定了on、off、reset或resetpriorities之一,则chkconfig将更改指定服务的启动信息。on和off标志将分别导致服务在被更改的运行级别中启动或停止。reset标志将服务的所有运行级别的on/off状态重置为init脚本文件中指定的样子,重置的时候会有一个询问。而resetpriorities标志则会直接将服务的on/off状态重置为init脚本中指定样子。默认情况下,on和off选项只影响运行级别2、3、4和5,而reset和resetpriorities影响所有运行级别。请注意,对于每个服务,每个运行级都有一个开始脚本或一个停止脚本。当切换runlevel时,init将不会重新启动已经启动的服务,也不会重新停止未运行的服务。
  chkconfig还可以通过xinetd.d配置文件管理xinetd脚本,xinetd服务只支持on、off、--list。
  chkconfig支持一个“--type”参数,当几个服务共享名字的情况下,这个选项就有效。支持该选项的服务可以是sysv和xinetd。
  此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
  chkconfig [--list]  [--type type][name]
  chkconfig --add  name
  chkconfig --del  name
  chkconfig - -override  name
  chkconfig [--level levels]  [--type type]  name  <on|off|reset|resetpriorities>
  chkconfig [--level levels]  [--type type]  name

2、选项列表
选项
说明
--help
帮助信息
--version
显示命令版本信息
--list 服务名
此选项列出chkconfig所知道的所有服务,以及它们是在每个运行级别中停止还是启动。如果指定了名称,则仅显示有关服务名称的信息。
--add 服务名
增加服务。当添加新服务时,chkconfig确保服务在每个运行级别上都有一个启动项或一个杀死项。如果任何运行级缺少这样的条目,chkconfig将按照init脚本中的默认值创建适当的条目。请注意,“INIT INFO”部分中的默认条目优先于initscript中的默认运行级别;如果存在任何必需的启动或要求停止条目,则将调整脚本的开始和停止优先级,以考虑这些依赖项。
--del 服务名
将服务从chkconfig管理中删除,与它相关的/etc/rc[0-6].d中的任何符号链接都被删除。
--level [levels] [name] [on|off|reset]
设置指定服务在指定运行级别的开机状态,级别可以是0~6。例如: chkconfig –level 35 vsftpd on
--override name
如果/etc/chkconfig.d/name文件现在存在,并且与基础配置脚本不同,则更改服务名称的配置文件,而不使用基础配置。

3、关于运行级别
  每个应该由chkconfig管理的服务都需要在其init.d脚本中添加两行或者多行注释。第一行告诉chkconfig默认应该在什么运行级别启动服务,以及启动和停止优先级级别。如果服务在默认情况下不应该在任何运行级别中启动,则应该使用“-”来代替runlevel列表。第二行包含服务的描述,并且可以通过反斜杠继续扩展多行。例如random.init中有三行注释
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.
这意味着随机脚本应该在级别2、3、4和5中启动,它的开始优先级应该是20,它的停止优先级应该是80。

  chkconfig还支持从左到右的“-”分隔符,并将优先于可用的“chkconfig:”行应用它们。例如下面的:
### BEGIN INIT INFO
# Provides: foo
# Required-Start: bar
# Defalt-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Foo init script
### END INIT INFO
在这种情况下,“foo”的启动优先级将被更改,它将高于“bar”启动优先级。在添加依赖项时必须小心,因为它们可能导致许多脚本的启动和停止优先级发生巨大变化。

4、实例
1)查看所有服务
[root@localhost ~]# chkconfig --list
NetworkManager    0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
    …
基于 xinetd 的服务:
    chargen-dgram:    关闭
    chargen-stream:   关闭
    …
2)查看指定服务
[root@localhost ~]# chkconfig --list vsftpd
vsftpd         0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:启用  6:关闭
3)设置ftp服务在3和5这两个级别启动
[root@localhost ~]# chkconfig --level 35 vsftpd on    //级别35启动
[root@localhost ~]# chkconfig --list vsftpd             //查看是否设置成功
vsftpd         0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭


论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
13 [报告]
发表于 2018-10-20 09:47 |只看该作者
本帖最后由 一生有你llx 于 2018-10-20 22:39 编辑

继续

论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
14 [报告]
发表于 2018-10-20 22:38 |只看该作者
本帖最后由 一生有你llx 于 2018-10-20 22:40 编辑

明天再更

论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
15 [报告]
发表于 2018-10-21 09:38 |只看该作者
date
      以给定的格式显示当前的日期,或者设置系统时间。
     此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
     date [选项]。
     date [+格式]。
     date -u  [参数]
     参数格式[MMDDhhmm[[CC]YY][.ss]],分别对应(月、日、时、分、年前两位、年后两位、秒)

2、选项和格式列表
选项
说明
--help
帮助信息
--version
显示命令版本信息
-f | --file=DATEFILE
和“--date”一样,文件的每一行都设置一次
-d | --date=STRING
显示字符串代表的时间,注意不是当前时间
-r | --reference=FILE
显示文件的最后修改时间
-R | --frc-2822
以rfc-2822的方式输出日期和时间,
--rfc-3339=TIMESPEC
以rfc-3339的方式输出日期和时间,精度可以是date、seconds、ns,日期和时间用一个空格隔开
-s |  --set=STRING
用指定字符串设置时间
-u |  --utc, --universal
输出或者设置通用时间

格式
说明
%a
当前locale 的星期名缩写(例如: 日,代表星期日)
%A
当前locale 的星期名全称 (如:星期日
%b
当前locale 的月名缩写 (如:一,代表一月)
%B
当前locale 的月名全称 (如:一月)
%c
当前locale 的日期和时间 (如:2005年3月3日 星期四23:05:25)
%C
世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
%d
按月计的日期(例如:01)
%D
按月计的日期;等于%m/%d/%y
%e
按月计的日期,添加空格,等于%_d
%F
完整日期格式,等价于 %Y-%m-%d
%g
ISO周数年的最后两位数
%G
ISO周数年份
%H
小时(00-23)
%I
小时(00-12)
%j
按年计的日期(001-366)
%k
小时,00~23
%l
小时,1~12
%m
月份(01-12)
%M
分(00-59)
%n
新的一行
%N
十亿分之一秒
%p
当前locale 下的”上午”或者”下午”,未知时输出为空
%P
和“%p”一样,但是输出小写字母
%r
当前locale 下的 12 小时时钟时间(如:11:11:04 下午)
%R
24 小时时间的时和分,等价于%H:%M
%s
从1970-01-01 00:00:00开始的秒数
%S
秒(00-60)
%t
tab字符
%T
时间,等于%H:%M:%S
%u
一个星期的一天,1是星期一。(1~7)
%U
一年中的第几周,以周日为每星期第一天(00-53)
%V
ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
%w
一个星期的一天,0是周日. (0~6)
%W

%x
当前locale 下的日期描述(如:12/31/99)
%X
当前locale 下的时间描述(如:23:13:4
%y
年份最后两位数位(00-99)
%Y
%z
+hhmm格式的数字时区,例如“-0400
%:z
+hh:mm格式的数字时区,例如“-04:00
%::z
+hh:mm:ss格式的数字时区,例如“-04:00:00 “
%:::z
数字时区,使用“:”达到必要的精度,例如“-04, +05:30“
%Z
时区的缩写,例如EDT

3、说明
     默认情况下,使用数字0来填补数字时间中的空缺。当然也可以指定其他方式:“%-“,不填补;”%_“,使用空格填补;”%0“,使用0;”%^“使用大写字母;”%#“,使用相反的字母
     “--date=String“是一种自由格式,是一种方便读取的日期字符串,例如“Sun,2月29日16:21:42-0800”或“2004-02-29 16:21:42:42”,甚至是“下星期四”。日期字符串可能包含指示日历日期、时间、时区、周中日、相对时间、相对日期和数字的项。空字符串表示一天的开始。日期字符串可以包含指示日历日期、时间、时区、星期数、相对时间、相对日期和数字的项。日期字符串格式比这里容易记录的要复杂,但是在info文档中有完整的描述。

4、实例
1)不适用任何参数,直接显示日期和时间
[root@localhost ~]# date
2018 09 05星期三 11:48:58 CST     //注意,这里显示的是CST时间
2)显示UTC时间
[root@localhost ~]# date -u
2018年 09月 05日星期三 03:51:53 UTC
3)设置CST日期时间
[root@localhost ~]# date -s 2018-9-4   //这里可以看到支持的日期格式。如果没有设置时间,那么默认就是00
2018年 09月 04日星期二 00:00:00 CST
[root@localhost ~]# date -s 20180905
2018年 09月 05日星期三 00:00:00 CST
[root@localhost ~]# date -s 2018/9/6
2018年 09月 06日星期四 00:00:00 CST
[root@localhost ~]# date -s 11:56     //修改时间
2018年 09月 05日星期三 11:56:00 CST
[root@localhost ~]# date -s 11:54:40
2018年 09月 05日星期三 11:54:40 CST
4)显示当前是一年中的第几周,第几天
[root@localhost ~]# date +%U周第%j
第35周第248天
5)显示12小时制度下的时间
[root@localhost ~]# date +%r
下午 12时02分48秒
[root@localhost ~]# date +%p%H:%M:%S     //这里可以使用多个格式组合,达到上面的效果
下午12:03:24
6)显示当前日期
[root@localhost ~]# date +%x
2018年09月05日
[root@localhost ~]# date +%F
2018-09-05
[root@localhost ~]# date +%Y-%m-%d    //多格式拼接
2018-09-05



论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
16 [报告]
发表于 2018-10-22 11:15 |只看该作者
last
      显示以前登录过的用户信息,last指令会搜索/var/log/wtmp文件(或者是经过-f选项指定的文件),然后列出文件中所有的用户信息。如果执行last指令时提示“last /var/log/wtmp∶ NO such file or directory”,则需要使用指令touch /var/log/wtmp手工创建此文件
     lastb指令用来显示登录失败的用户信息,其用法和last一样,对应的日志文件是/var/log/btmp
     此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
     last  [-R]  [-num] [ -n num ]  [-adFiowx]  [ -f file ]  [ -t YYYYMMDDHHMMSS ]  [name...]  [tty...]
     lastb [-R]  [-num]  [ -n num ] [ -f file ]  [-adFiowx]  [name...] [tty...]

2、选项列表
选项
说明
-f 文件名
指定登录的日志文件(默认是/var/log/wtmp)
-num
指定last显示多少行信息
-n num
和“-num”一样
-R
不显示主机名字
-a
在最后一列显示主机名
-d
将非本地登录的用户ip转换成主机名
-F
显示所有的登录和注销时间和日期
-o
读取旧的日志文件
-w
显示用户名和域名
-x
显示系统关机信息和运行级别的变化信息
-t [YYYYMMDDHHMMSS]
显示指定时间的登录信息
[name]
显示指定用户的登录信息
[tty]
显示指定终端的登录信息,last tty1 = last 1

3、实例
1)显示最近登录的5条信息
[root@localhost ~]# last -5    //也可以使用last n 5
//登录用户登录终端主机名登录时间注销时间持续时间
root     pts/0        :0.0             Tue Sep  4 13:10   still logged in   
root     pts/0        :0.0             Wed Aug 22 15:07 - 13:09 (12+22:02)  
root     pts/1        :0.0             Wed Aug 22 07:46 - 13:10 (13+05:23)  
root     pts/0        :0.0             Wed Aug 22 07:43 - 11:02  (03:1   
root     tty1         :0               Wed Aug 22 07:20   still logged in   
wtmp begins Wed Aug  8 18:02:52 2018
2)显示用户weijie和root在8月9号的登录信息
[root@localhost ~]# last -t 20180909090000 weijie  //可以看到用户weijie在9.9之前没有登录
wtmp begins Wed Aug  8 18:02:52 2018
[root@localhost ~]# last -t 20180909090000 root  //用户root在9.9之前登录过几次
root     pts/0        :0.0             Wed Aug  8 20:19 - down   (00:05)   
root     tty1         :0               Wed Aug  8 20:19 - down   (00:06)   
root     pts/1        :0.0             Wed Aug  8 18:16 - 20:16  (01:59)   
root     pts/0        :0.0             Wed Aug  8 18:08 - 20:15  (02:06)   
root     tty1         :0               Wed Aug  8 18:04 - 20:16  (02:11)   
wtmp begins Wed Aug  8 18:02:52 2018
3)显示终端tty1的登录信息
[root@localhost ~]# last 1    //等同于last tty1
root     tty1         :0               Wed Aug 22 07:20   still logged in   
root     tty1         :0               Tue Aug 21 17:34 - down   (02:24)   
…  
wtmp begins Wed Aug  8 18:02:52 2018






论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
17 [报告]
发表于 2018-10-23 07:51 |只看该作者
service
      service可以控制系统服务(打开、关闭、重启)。service在尽可能可预测的环境中运行SystemV init脚本,删除大多数环境变量并将当前工作目录设置为根目录。脚本参数位于“/etc/init.d/script”中的System V init脚本。受支持的命令值取决于调用的脚本,服务将命令和选项传递给init脚本。
     所有脚本至少应该支持start命令和stop命令。作为特例,如果命令是“--full-restart”,脚本将运行两次,首先使用stop命令,然后使用start命令。“service  --status-all”按照字母顺序运行所有的init脚本,执行status命令。用户可以在/etc/init.d/目录下找到服务的脚本文件。
     只有环境变量LANG和TERM传递给init脚本文件。
     此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

1、语法
     service SCRIPT COMMAND [OPTIONS]
     service --status-all
     service --help | -h | --version

2、选项列表
选项
说明
-h | --help
帮助信息
-V | --version
显示命令版本信息
--status-all
显示所有的服务状态
--full-restart
重启服务,运行两次,先停止后开启
[service_name  cmd]
控制服务。例如service vsftpd start。cmd可以是start、stop、restart

3、实例
1)查看所有服务当前的运行状态
[root@localhost ~]# service --status-all
abrt-ccpp hook is installed
abrtd (pid  2031) 正在运行...
abrt-dump-oops 已停
acpid (pid  1507) 正在运行..   
2)查看指定服务(vsftpd)的运行状态
[root@localhost ~]# service vsftpd status
vsftpd (pid 3081 正在运行...
3)停止指定服务(vsftpd)
[root@localhost ~]# service vsftpd stop
关闭vsftpd:                                             [确定]
[root@localhost ~]# service vsftpd status
vsftpd 已停






论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
18 [报告]
发表于 2018-10-24 08:42 |只看该作者
shutdown
      shutdown指令以安全的方式来关闭系统,所有已经登录的用户都会被告知系统将要关闭。并且在最后五分钟内,新的登录将被阻止。过了指定的time后,关机会向init(守护进程发送一个请求,以便将系统降至适当的运行级别。这是通过发出runlevel(7)事件来执行的,该事件包括RUNLEVEL环境变量中的新运行级以及PREVLEVEL变量中的前一个运行级(从环境或/var/run/utmp获得)。可以设置一个额外的INIT_HART变量,它将包含使用halt指令关机的HAL值,或者使用power off指令关机的POWEROFF值。
     此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
     shutdown [选项]  [时间]  [警告信息]

2、选项列表
选项
说明
-c
取消正在执行的关机,这个选项没有时间参数
-h
关闭计算机,等于halt或者power off
-P
等价power off
-H
等价halt
-k
只是发出警告信息,注销登录,并没有 关机
-r
重启,等于reboot
时间
now代表立刻关机; +m代表m分钟后关闭;23:00代表在晚上11点关机

3、说明
如果设置为首选从/var/run/utmp读取RUNLEVEL,关机将从此环境变量读取当前运行级。“/var/run/utmp”文件,读取当前运行级的位置,该文件还将使用新的运行级别进行更新。“/var/log/wtmp”文件,新运行级记录将追加到此文件中。Upstart init(守护进程不跟踪运行级别本身,而是完全由其用户空间工具实现。

4、实例
1)5分钟后关闭机器,并发出警告“I am downing”
[root@192 /]# shutdown -h +5 I am downing        //当前操作有root用户发出,5分钟后关机,并且有提示信息
Broadcast message from root@192.168.0.113
    (/dev/pts/1) at 10:40 ...
The system is going down for halt in 5 minutes!     //5分钟
I am downing                                         //自定义的提示信息
[weijie@192 root]$                                  //当前控制台是weijie用户登录,他也收到关机信息
Broadcast message from root@192.168.0.113
    (/dev/pts/1) at 10:40 ...
The system is going down for halt in 5 minutes!
I am downing
2)取消关机
[root@192 ~]# shutdown c                        //需要打开另一个终端,输入取消命令
[root@192 /]# shutdown -h +5 I am downing     //在之前的关机命令窗口,最后可以看到取消的信息
The system is going down for halt in 4 minutes!
I am downing
shutdown: Shutdown cancelled      
[root@192 /]#






论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
19 [报告]
发表于 2018-10-24 08:42 |只看该作者
yes
      反复的输出指定的字符串,直到手动停止。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

1、语法
     yes [STRING]...
     yes OPTION
     如果不指定字符串,那么输出字符“y”

2、选项列表
选项
说明
--help
帮助信息,并且退出
--version
显示命令版本信息,并且退出

3、实例
1)输出hello world
[root@localhost ~]# yes hello world
hello world
hello world
hello world
hello world
hello world
hello world^C      //使用ctrl+c强制停止
[weijie@192 root]$
2)输出字符y
[root@localhost ~]# yes          //没有任何选项和参数,输出字符y
y
y
y
y
y
^C
You have new mail in /var/spool/mail/root
[root@localhost ~]#






论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2018-12-10 14:43:45
20 [报告]
发表于 2018-10-25 08:22 |只看该作者
sudo
      sudo允许用户以超级用户或安全策略指定的另一个用户的身份执行命令。Sudo支持安全策略插件和输入/输出日志的插件。第三方可以开发和分发自己的策略和I/O日志插件,以便与sudo前端无缝地工作。默认的安全策略是sudoers,它是通过文件/etc/sudoers或通过LDAP配置的。
     安全策略确定用户在需要什么权利的时候需要运行sudo。该策略可能要求用户使用密码或其他身份验证机制进行身份验证。如果需要身份验证,如果用户的密码未在可配置的时限内输入,sudo将退出。此限制是特定于策略的;sudoers安全策略的默认密码提示超时为5分钟。
     安全策略可能支持凭据缓存,允许用户在不需要身份验证的情况下再次运行sudo。sudoers策略将凭据缓存5分钟,除非在sudoers(5)中重写。通过使用“-v”选项运行sudo,用户可以在不运行命令的情况下更新缓存的凭据。
     安全策略可能记录使用sudo的成功和失败情况。如果配置了I/O插件,运行中的命令的输入和输出也可能被记录下来。
     此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
     sudo -h | -K | -k | -V
     sudo -v  [-AknS]  [-g group name | #gid]  [-p prompt]  [-u user name | #uid]
     sudo -l[l] [-AknS]  [-g group name | #gid]  [-p prompt]  [-U user name] [-u user name | #uid]  [command]
     sudo [-AbEHnPS]  [-C fd]  [-g group name | #gid]  [-p prompt]  [-r role]  [-t type]  [-u user name | #uid]  [VAR=value]  -i |  -s [command]
     sudoedit [-AnS]  [-C fd]  [-g group name | #gid]  [-p prompt]  [-u user name | #uid]  file  ...

2、选项列表
选项
说明
-h
帮助信息
-V
显示命令版本信息
-A
通常,如果sudo需要密码,它就会从用户终端读取密码。如果指定了-A(Askpass)选项,则执行一个(可能是Graphi cal)帮助程序来读取用户密码并将密码输出到标准输出。如果设置了SUDO_ASKPASS环境变量,则指定助手程序的路径。否则,如果“/etc/sudo.conf”包含了askpass程序的路径,将使用该值。例如:
# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass
-b
在后台运行命令。请注意,如果使用-b选项,则不能使用shell作业控件操作进程。大多数交互命令在后台模式下都无法正常工作。
-C fd
通常,sudo将关闭除标准输入、标准输出和标准错误之外的所有打开的文件描述符。“-C”选项允许用户在标准错误(文件描述符3)之上指定起点。不允许值小于3。安全策略可能限制用户使用“-C”选项的能力。sudoers策略仅允许用户只有在开启“closefrom_override”之后,才可以使用“-C”选项
-E
运行时保留用户环境。“-E”选项向安全策略指示用户希望保存他们现有的环境变量。如果指定了“-E”选项,且用户没有保留环境的权限,则安全策略可能返回错误
-e
编辑命令文件,而不是执行命令。当查询安全策略的时候,使用字符串“sudoedit”代替命令。如果用户通过策略认证,有3个步骤需要做:1)产生一个临时的副本;2)运行策略指定的编辑器来编辑临时文件。sudoers策略依次使用环境变量SUDO_EDITOR,、VISUAL 、EDITOR。如果没有设置这三个环境变量,则使用编辑器sudoers(5)选项中列出的第一个程序;3)如果修改了临时文件,则将临时文件复制回原来的位置,并移除临时版本。
如果指定的文件不存在,它将被创建。注意,与sudo运行的大多数命令不同,编辑器是在调用用户的环境中运行的。如果由于某些原因,sudo无法用指定的编辑器更新文件,则用户将收到警告,编辑后的副本将保留在临时文件中。
-g group
由指定的用户组来执行命令。使用#gid,而不是组名。注意,shell要求使用反斜杠(‘\’)转义‘#’
-H
-H(Home)选项要求安全策略将“HOME”环境变量设置为由密码数据库指定的目标用户的家目录。根据策略,这个选项很可能是默认的。
-i [command]
模拟初始登录。“-i“选项将目标用户的密码数据库条目指定的shell作为登录shell运行。这意味着shell将读取特定于登录的资源文件,如“.profile”或“.login”。如果指定了命令,则通过shell的-c选项将其传递给shell执行。如果未指定命令,则执行交互式shell。sudo试图在运行shell之前更改到该用户的家目录。安全策略应将环境初始化为最小变量集,类似于用户登录时存在的变量集。
-K
删除用户缓存的凭据,不能与命令或其他选项一起使用。此选项不需要密码。并非所有安全策略都支持凭据缓存。
-k [command]
单独使用时,sudo选项可以使用户的缓存凭据无效。下一次运行sudo时,将需要密码。此选项不需要密码,添加该选项是为了允许用户从.logout文件中撤消sudo权限。并非所有安全策略都支持凭据缓存。
当与可能需要密码的命令或选项一起使用时,“-k”选项将导致sudo忽略用户的缓存凭据。因此,sudo将提示输入密码(如果安全策略需要密码),并且不会更新用户缓存的凭据。
-l[l] [command]
列出用户能执行的命令。如果没有指定命令,则-l(List)选项将列出当前主机上调用用户(或-u选项指定的用户)所允许的命令。如果指定了命令并得到安全策略的允许,则会显示命令的完全路径以及任何命令行参数。如果指定了命令但不允许执行,sudo将退出,状态值为1。如果使用l参数(即-ll),则使用较长的列表格式。
-n
非交互式,将不提示用户。-n选项防止sudo提示用户输入密码。如果运行命令需要密码,sudo将显示错误消息并退出。
-P
保存组向量。“-P“选项使sudo保持调用用户的组向量不变。默认情况下,sudoers策略将组向量初始化为目标用户所在的组列表。然而,实际有效的组ID仍然被设置为与目标用户匹配。
-p prompt
使用指定的密码提示语句:
%H,扩展为主机名,包括域名;
%h,扩展为主机名,不包括域名;
%p,扩展为请求其密码的用户的名称;
%U,扩展到运行命令的用户的登录名;
%u,扩展到调用用户的登录名;
%%,两个连续的‘%’字符折叠成一个‘%’字符;
-r role
“-r“选项将导致新的安全上下文具有由role指定的角色。
-S
从标准输入读取密码,而不是终端获取。密码后面必须跟着换行符
-s [command]
如果设置了shell环境变量,则“-s“选项运行由shell环境变量指定的shell,或者运行密码数据库中指定的shell。如果指定了命令,则通过shell的”-c“选项将命令传递给shell执行。如果没有指定命令,则执行交互式shell。
-t type
“-t“选项将导致新的安全上下文的类型,如果没有指定类型,则从指定的角色派生默认类型。
-U user
“-U”选项与“-l”选项一起使用,以列出指定用户的权限。安全策略可能限制列出其他用户的特权。sudoers策略只允许root或当前主机上具有完整特权的用户使用此选项。
-u user
以指定的用户身份执行指令。“-u“选项使sudo以root以外的用户身份运行指定的命令。要指定#uid而不是用户名。当以uid的形式运行命令时,许多shell要求用反斜杠‘\’转义“#”。安全策略可能会将UID限制在密码数据库。sudoers策略允许不存在于密码数据库中的UID,只要没有设置targetpw选项。其他安全策略可能不支持这一点。
-v
当给定-v(验证)选项时,sudo将更新用户的缓存凭据,必要时对用户密码进行身份验证。对于sudoers插件,这会将sudo超时再延长5分钟(或安全策略设置的超时时间),但不会运行命令
--
这个选项提示,sudo应该停止处理命令行参数

     为命令设置的环境变量也可以var=value的形式传递到命令行,例如LD_Library_path=/usr/local/pkg/lib。传递到命令行的变量受与正常环境变量相同的限制,但有一个重要的例外。如果在sudoers中设置setenv选项,则要运行的命令具有SETENV标记集或匹配的命令。

3、执行命令
     当sudo执行命令时,安全策略指定命令的执行环境。通常,将实际有效的uid和gid设置为与密码数据库中指定的目标用户相匹配,并根据组数据库初始化组向量(除非指定了-p选项)。安全策略可能会指定一些参数:真实有效用户ID、真实有效组ID、补充组ID、环境列表、当前工作目录、文件创建掩码、SELinux的角色和类型、调度级别。
     1)进程模型
     当sudo运行一个命令时,它调用fork(2),设置上面描述的执行环境,并在子进程中调用execve系统调用。主sudo进程等待命令完成,然后将命令的退出状态传递给安全策略的close方法并退出。如果配置了I/O日志插件,则将一个新的伪终端((“pty”)被创建,第二个sudo进程用于在用户现有的pty和正在运行的新pty之间传递作业控制信号。这个额外的进程使挂起并恢复命令成为可能。如果没有它,命令将使用POSIX术语中的“孤立进程组”。也不会收到任何作业控制信号
     2)信号处理
     因为命令是作为sudo进程的子进程运行的,所以sudo会将接收到的信号中继到命令。除非该命令在新的pty中运行,否则SIGHUP、SIGINT和SIGQUIT信号将不会被中继,除非它们是由用户进程而不是内核发送的。否则,该命令将在用户按下“ctrl+c”时接收到两次SIGINT.信号。由于SIGSTOP和SIGKILL不能被捕获,因此不会被中继到命令。作为一般规则,当您希望挂起sudo运行的命令时,应该使用SIGTSTP而不是SIGSTOP。
     作为特例,sudo将不会中继它正在运行的命令发送的信号。这可以防止命令意外地杀死自己。在某些系统上,reboot(命令在重新启动系统之前将SIGTERM发送到所有非系统进程,而不是它自己。这防止sudo将接收到的SIGTERM信号中继回reboot(,然后该信号可能会在系统实际启动之前退出,使其处于类似于单用户模式的半死状态。但是,请注意,此检查只适用于sudo运行的命令,而不适用于命令可能创建的任何其他进程。因此,通过sudo运行调用重reboot(或shutdown(的脚本可能导致系统处于这种未定义状态,除非使用exec()函数系列而不是system()运行reboot(或shutdown((后者在命令和调用进程之间插入一个shell)。

4、插件
     插件根据“/etc/sudo.conf”文件的内容动态加载。如果没有“/etc/sudo.conf”文件,或者它不包含插件行,sudo将使用传统sudoers安全策略和I/O日志记录,这相当于以下“/etc/sudo.conf”文件
#
# Default /etc/sudo.conf file
#
# Format:
#   Plugin plugin_name plugin_path plugin_options ...
#   Path askpass /path/to/askpass
#   Path noexec /path/to/sudo_noexec.so
#   Debug sudo /var/log/sudo_debug all@warn
#   Set disable_coredump true
#
# The plugin_path is relative to /usr/libexec unless
#   fully qualified.
# The plugin_name corresponds to a global symbol in the plugin
#   that contains the plugin interface structure.
# The plugin_options are optional.
#
Plugin policy_plugin sudoers.so
Plugin io_plugin sudoers.so
     插件行由插件关键字组成,后面跟着符号名字和包含插件的共享对象的路径。符号名字是插件共享对象中struct policy_plugin或struct io_plugin的名称。路径可以是完全限定的或相对的。如果不完全限定,则相对于“/usr/libexec”目录。路径之后的任何附加参数都是作为参数传递给插件的开放函数。不以Plugin、Path、Debug、Set开头的行将被默认忽略。

5、路径
     路径行由Path关键字组成,后面跟着要设置的路径的名称及其值。例:
Path noexec /usr/libexec/sudo_noexec.so
Path askpass /usr/X11R6/bin/ssh-askpass

     以下与插件无关的路径可以在“/etc/sudo.conf”文件中设置
     1)askpass,辅助程序的完全限定路径,用于在没有终端可用时读取用户的密码。当sudo从图形应用程序执行时,情况可能是这样。由askpass指定的程序应该将传递给它的参数显示为提示符,并将用户的密码写入标准输出。askpass可能被环境变量SUDO_ASKPASS覆盖。
     2)noexec,共享库的完全限定路径,包含仅返回错误的execv()、execve()和fexecve()库函数的虚拟版本,用于在支持LD_PRELOAD或其等效的系统上实现noexec功能。默认值为“/usr/libexec/sudo_noexec.so”。

6、调试标志
     Sudo版本1.8.4及更高版本支持一种灵活的调试框架,如果存在问题,可以帮助跟踪sudo在内部做什么。
     Debug行由Debug关键字组成,后面跟着要调试的程序名称(sudo、visudo、sudoreplay)、调试文件名和以逗号分隔的调试标志列表。sudo和sudoers插件使用的调试标志语法是subsystem@priority,但是插件可以自由使用不同的格式,只要它不包括逗号。例如语句“Debug sudo /var/log/sudo_debug all@warn,plugin@info”将会在警告级别和更高级别记录插件子系统的所有调试语句以及信息级别的语句。
     目前,每个程序只支持一个调试条目。sudo调试条目由sudo前端、sudodit和plugins共享。将来的版本可能会增加对每个插件调试行的支持和/或对单个程序的多个调试文件的支持。
     sudo前端使用的优先级依次为:crit、err、warn、notice、diag、info、trace、debug.。当指定每个优先级时,还包括所有高于此优先级的优先级。例如,通知的优先级将包括记录在通知中的调试消息以及更高的优先级。
     sudo前端可以使用一下子系统:
子系统
说明
all
所有的子系统。
args
命令行参数进程。
conv
用户回会话
edit
sudoedit。
exec
命令执行过程。
main
sudo的主函数。
netif
网络接口处理。
pcomm
插件会话
plugin
插件配置。
pty
为tty相关代码。
selinux
SELinux专用处理。
util
实用函数。
utmp
utmp处理

7、退出值
     当程序成功执行时,sudo的退出状态将只是被执行的程序的退出状态。否则,如果存在配置/权限问题或sudo无法执行给定的命令,sudo将以1退出。在后一种情况下,错误字符串将打印到标准错误。如果sudo无法在用户路径中调用stat函数统计一个或多个条目,则在stderr上打印错误。(如果该目录不存在,或者它实际上不是一个目录,则忽略该条目,并且不打印错误。)在正常情况下不应该发生这种情况。stat(2)返回“拒绝权限”的最常见原因是,如果您正在运行一个自动侦听器,并且您的路径中的一个目录位于当前无法访问的计算机上。

8、安全说明
     当执行外部命令时,sudo试图保持安全。为了防止命令欺骗,sudo在用户路径中搜索命令时,最后检查“.”和““。但是请注意,实际的path环境变量没有被修改,而是不改变地传递给sudo执行的程序。
     请注意,sudo通常只记录它显式运行的命令。如果用户运行“sudo su“或”sudo sh“之类的命令,则从该shell运行的后续命令不受sudo的安全策略的约束,提供shell转义的命令也是如此。如果启用了I/O日志记录,随后的命令将有它们的输入和输出记录,但这些命令不会有传统的日志。因此,当用户通过sudo访问命令时,必须小心,以验证该命令不会无意中给用户一个有效的root shell。
为了防止泄露潜在的敏感信息,sudo在执行时默认禁用核心转储。为了帮助调试sudo崩溃,您可能希望通过在“/etc/sudo.conf“文件中将“disable_coredump”设置为false来重新启用核心转储,如下所示
Set disable_coredump false
     请注意,默认情况下,大多数操作系统从setuid程序(包括sudo)禁用核心转储。要实际获得sudo核心文件,您可能需要为setuid进程启用核心转储。在BSD和Linux系统上,这是通过“sysctl“命令完成的,在Solaris上可以使用”coreadm“命令。

9、环境变量
     sudo使用一下环境变量,安全策略控制命令环境的实际内容。
环境变量
说明
EDITOR
如果没有设置SUDO_EDITOR或VISUAL,则默认编辑器使用”-e”模式。
MAIL
在“-i“模式中或在sudoers中启用env_reset时,将其设置为目标用户的邮件线轴。
HOME
如果指定了“-i“或”-H“,在sudoers中赋值给目标用户的home目录,或者赋值给env_reset或all_set_home。或者当指定”-s“选项时,sudoers中赋值给set_home。
PATH
可能被安全策略覆盖
SEHLL
使用“-s“选项,执行运行的shell
SUDO_ASKPASS
如果没有可用的终端,或者指定了“-A“选项,则指定用于读取密码的辅助程序的路径。
SUDO_COMMAND
赋值给sudo运行的命令
SUDO_EDITOR
“-e“模式下的默认编辑器
SUDO_GID
赋值给调用sudo的用户的组ID
SUDO_PROMPT
作为默认的密码提示语句
SUDO_PS1
如果设置,PS1将被设置为正在运行的程序的值。
SUDO_UID
赋值给调用sudo的用户的ID
SUDO_USER
赋值给调用sudo的用户登录名
USER
赋值给目标用户(默认是root,除非指定“-u“选项)
VISUAL
如果在“-e“模式下没有指定”SUDO_EDITOR“,那么这个就是默认编辑器

10、实例
     1)查看当前用户支持的指令
[weijie@192 /]$ sudo –l       //当前用户没有权利执行任何sudo指令
[sudo] password for weijie:
对不起,用户 weijie 不能在 192 上运行 sudo
You have new mail in /var/spool/mail/root
[root@192 /]# sudo –l       //当前用户是root,因此可以执行所有的sudo指令
匹配此主机上 root 的默认条目:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS
    DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1
    PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
    LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
    LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL
    LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
   secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 root 可以在该主机上运行以下命令:
    (ALL) ALL
     2)以指定的用户身份来执行命令,不可以指定root
[root@192 /]# sudo -u weijie ls /home/david/         //以用户weijie的身份来查看用户david的家目录,很明显是没有权利的
ls: 无法打开目录/home/david/: 权限不够
[root@192 /]# sudo -u weijie ls /home/weijie/       //以用户weijie的身份来查看用户weijie的家目录,这个当然可以
1.zip  mail
[root@192 /]# sudo  ls /home/david/                   //直接查看用户david家目录,由于当前在root环境下,因此完全可以
mail
     3)其他例子代码
$ sudo -u yaz ls ~yaz                               //查看用户yaz的家目录
$ sudo -u www vi ~www/htdocs/index.html          //以用户www的身份编辑文件
$ sudo -g adm view /var/log/syslog                //以组adm的身份去查看日志文件,
$ sudo -u jim -g audio vi ~jim/sound.txt         //要使用不同的主组以Jim的身份运行编辑器
$ sudo shutdown -r +15 "quick reboot"             //关机
$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"   //若要对/home分区中的目录进行使用列表,请注意,这将在子shell中运行命令,以使cd和文件重定向工作






您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP