目录
tar命令
归档的命令,打包的功能
命令格式: tar [选项] 打包文件名 被打包的文件或目录列表
tar命令的选项
选项 | 功能 |
c | 创建.tar格式的包文件 |
x | 释放.tar格式的包文件 |
t | 查看包中的文件列表 |
v | 表示在命令执行时显示详细的提示信息 |
f 包文件名 | 用于指定包文件名。当与-c选项一起使用时,创建的tar包文件使用该选项指定的文件名;当与-x选项一起使用时,则释放该选项指定的tar包文件。 |
p | 打包时保留文件及目录的权限。 |
z | 调用gzip程序,以gzip格式压缩或解压缩文件。 |
j | 调用bzip2程序,以bzip2格式压缩或解压缩文件。 |
J | 使用xz压缩(.tar.xz)。Xz的压缩率通常比bzip2更高。 |
C 目录路径名 | 释放包时指定释放的目标的位置。 |
1、创建(非压缩的)包文件
命令:tar cvf 包文件名 要打包的目录或文件名列表
功能:将指定的一个或多个文件或目录备份生成为一个指定的包文件。
2、创建带压缩的包文件
为节省存储空间,通常需要生成压缩格式的tar包文件,tar命令支持三种不同的压缩方式:
命令:tar c[z j|J] f 压缩包文件名 要备份的目录或文件名
3、列出包文件中的文件列表
命令:tar t[v]f 包文件名
4、提取包文件到指定目录
格式:tar x [z j|J] [v]f 包文件名 [ -C 目标位置]
tar打包时排除
--exclude=PATTERN 排除以 PATTERN 指定的文件
-X, --exclude-from=FILE 排除 FILE 中列出的模式串
文件上传下载
sftp
是一个交互式文件传输程式,它类似于ftp传输协议,属于ssh, 但它进行加密传输,相对FTP来讲有更高的安全性
sftp用法
如果有服务器的端口不是默认的22,请在sftp后面加-P 端口号即可。
# sftp root@223.6.6.6
The authenticity of host ‘223.6.6.6 (223.6.6.6)’ can’t be established.
ECDSA key fingerprint is SHA256:Hl/dKTFzL4lOlF8DIG5itaV4OAsZunC2AWlFGLjLfsg.
Are you sure you want to continue connecting (yes/no)? yes【输入yes回车】
Warning: Permanently added ‘223.6.6.6’ (ECDSA) to the list of known hosts.
root@223.6.6.6’s password:【输入223.6.6.6的root密码并回车】
Connected to 223.6.6.6.
sftp>
将223.6.6.6服务器文件下载到223.5.5.5的home目录
sftp> get /var/www/renwole.txt /home/
将223.5.5.5服务器文件上传到223.6.6.6服务器的mnt目录
sftp> put /home/renwole.txt /mnt/
你如果不知道远程主机的目录是什么样, ls命令可以列出223.6.6.6服务器的当前目录列表。例如:
sftp> ls //和查看本地操作命令一样
sftp> pwd //查询223.6.6.6的当前工作目录
如果想退出
# exit //退出机器,返回你原始机器界面。
scp
scp具有和ssh一样的验证机制,从而可以实现2台机器安全的远程拷贝文件。
scp可以概括为:scp -P 端口 文件路径 用户名@主机地址:远程目录
如果想拷贝本地文件到另外一台ssh终端,可以使用以下命令:
# scp /renwole/mariadb.tar.gz root@223.6.6.6:/renwole123/
root@223.6.6.6’s password:【输入密码回车】
mariadb.tar.gz 8% 37MB 1.3MB/s 05:29 ETA
rz命令
使用ZMODEM协议,将本地文件批量上传到远程Linux/Unix服务器,注意不能上传文件夹。
当我们使用虚拟终端软件,如Xshell、SecureCRT或PuTTY来连接远程服务器后,使用rz命令可以上传本地文件到远程服务器。输入rz回车后,会出现文件选择对话框,选择需要上传文件,一次可以指定多个文件,上传到服务器的路径为当前执行rz命令的目录。
命令格式:rz [选项]
rz命令选项
-+, --append:将文件内容追加到已存在的同名文件
-a,--ascii:以文本方式传输
-b, --binary:以二进制方式传输,推荐使用
--delay-startup N:等待N秒
-e, --escape:对所有控制字符转义,建议使用
-E, --rename:已存在同名文件则重命名新上传的文件,以点和数字作为后缀
-p, --protect:对ZMODEM协议有效,如果目标文件已存在则跳过 -
-q, --quiet:安静执行,不输出提示信息
-v, --verbose:输出传输过程中的提示信息
-y, --overwrite:存在同名文件则替换
-X, --xmodem:使用XMODEM协议
--ymodem:使用YMODEM协议
-Z, --zmodem:使用ZMODEM协议
sz命令
过ZMODEM协议,可将多个文件从远程服务器下载到本地。注意不能下载文件夹,如果下载文件夹,请先打包再下载。
命令格式:sz [选项] [filelist]
sz命令选项
命令选项基本与rz相同,请参考上文rz的命令选项或者sz的manual,或者运行命令sz -h查看。
sz和rz命令在实际应用开发中非常实用,有时候我们会经常跑脚本统计数据,需要上传和下载一些大数据量的数据,这时候这两个命令就非常有用了。
变量
变量可分为两类
环境变量(全局变量)
可以在创建它们的Shell 及其派生出来的任意子进程 Shell 中使用,环境变量又可分为自定义环境变量和 bash 内置的环境变量。
普通变量(局部变量)
只能在创建它们的Shell函数或Shell脚本中使用,普通变量一般由开发者在开发脚本程序时创建。
1、环境变量
环境变量一般是指用 export 内置命令导出的变量,用于定义 Shell 的运行环境,保证 Shell 命令的正确执行,Shell 通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等,所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器、Shell 脚本和各类应用。
环境变量可以在命令行中设置和创建,但用户退出o命令时这些变量值就会丢失,因此,如果希望永久保存环境变量,可在用户家目录下的 .bash_profile 或 .bashrc (非用户登录模式特有,例如远程SSH)文件中,或者全局配置 /etc/bashrc (非用户登录模式特有,例如远程 SSH)或 /etc/profile文件中定义,在将环境变量放入上述的文件中后,每次用户登录时这些变量都将被初始化。
按照系统规范,所有环境变量的名字均采用大写形式,在将环境变量应用于用户进程程序之前,都应该用export命令导出定义。
例如:正确的环境变量定义方法为export OLDGTRL=1
(1)设置环境变量
如果想要设置环境变量,就要在给变量赋值之后或在设置变量时使用 export 命令,另外,除了export命令。带 -x 选项的 declare 内置命令也可以完成同样的功能(注意:此处不要再前面加 $)
export 命令和 declare 命令的格式如下:
export 变量名=value
变量名=value ; export 变量名
declare -x 变量名=value
(2)设置环境变量(永久生效)
用户的环境变量配置
[root@www ~]$ ls /root/.bashrc # 推荐在此文件中优先设置
/root/.bashrc
[root@www ~]$ ls /root/.bash_profile
/root/.bash_profile
全局的环境变量配置
[root@www ~]$ /etc/profile
[root@www ~]$ /etc/bashrc
[root@www ~]$ /etc/profile.d/
若要在登陆后初始化或显示加载内容,则把脚本文件放在 /etc/profile.d/ 下即可(无需加载执行权
限)
生产场景下(在Java环境中),自定义环境变量的示例。
export JAVA_HOME=/application/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export RESIN=/applaction/resin
显示与取消环境变量
(1)通过 echo 或 printf 打印环境变量
[root@www ~]$ echo $HOME
/root
[root@www ~]$ echo $UID
0 [
root@www ~]$ echo $PWD
/root
[root@www ~]$ echo $SHELL
/bin/bash
[root@www ~]$ echo $USER
root
[root@www ~]$ printf "$HOME\n"
/root
(2)用env或set显示默认的环境变量
[root@www ~]$ env
XDG_SESSION_ID=17
HOSTNAME=www.oliven.com
TERM=xterm
...
[root@www ~]$ set
BASH=/bin/bash
...
[root@www ~]$ declare | head
BASH=/bin/bash
...
(3)用 unset 消除本地变量和环境变量
[root@www ~]$ echo $USER
root
[root@www ~]$ unset USER
[root@www ~]$ echo $USER
[root@www ~]$
环境变量初始化与对应文件的生效顺序
在登录Linux系统并启动一个 bash shell 时,默认情况下 bash 会在若干个文件中查找环境变量的设置,这些文件可统称为系统环境文件,bash 检查的环境变量文件的情况取决于系统运行Shell 的方式,系统运行 Shell 的方式有 3 种。
(1) 通过系统用户登录后默认运行的 Shell
(2) 非登录交互式运行 Shell
(3) 执行脚本运行非交互式 Shell
source .bashrc # 可以认为去执行.bashrc,使定义生效
2、普通变量
定义本地变量
变量的赋值,一般有五种写法:
name=value
name1='value'
name_2="value"
_name_3=`cmd`
_na_me_4=$(cmd)
变量名一般是由字母、数字、下划线组成的,可以以字母或下划线开始。
命令别名
别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。
命令格式:alias 别名=’原命令 -选项/参数
查看设置的别名:alias
删除别名:unalias 别名
别名永久化(强烈推荐):
alias的作用仅在该次登入的操作,即输入一次alias后,这个修改只在当前的Shell生效。如果重新开启一个 Shell,或者重新登录,则这些alias将无法使用。好在linux中提供alias永久化的方法:
<1>.若要每次登入就自动生效别名,则把别名加在/etc/profile或~/.bashrc中。然后# source~/.bashrc
<2>.若要让每一位用户都生效别名,则把别名加在/etc/bashrc最后面,然后# source /etc/bashrc
快捷键的使用
history命令
查阅命令历史记录
查询执行过的历史命令:
1、利用向上或向下光标键来进行查询。
2、第二种办法是执行“history [n]” 命令来查询。
命令格式:history (选项) (参数)
history命令的选项及参数
选项 | 功能 |
-N | 显示历史记录中最近的N个记录 |
-c | 清空当前历史命令 |
-a | 将历史命令缓冲区中命令写入历史命令文件中 |
-r | 将历史命令文件中的命令读入当前历史命令缓冲区 |
-w | 将当前历史命令缓冲区命令写入历史命令文件中 |
-d | 删除历史记录中第offset个命令 |
-n | 读取指定文件 |
参数 | 功能 |
n | 打印最近的n条历史命令 |
注意:如想查询某个用户在系统上执行了什么命令,可以使用root用户身份登录系统,检查Home目录下的用户主目录下的“.bash_history”文件,该文件记录了用户所使用的命令和历史信息。
断开长命令行
对于符号比较多的长命令,尽管系统在到达行尾时会自动将长命令行换到下一行,但也可以使用反斜杠“\”再加回车,将一个较长的命令分成多行表达,增强命令的可读性,换行后系统自动显示提示符“>”,表示正在输入一个长命令,此时可继续在新行上输入命令的后续部分。
在一行输入多个命令
若要在一行上输入和执行多条较短的命令,可使用分号来分隔命令
快捷方式
Ctrl+a 移动到当前行的开头
Ctrl+e 移动到当前行的结尾
Ctrl+l 清屏
Ctrl+u 剪切命令行中光标所在处之前的所有字符(不包括自身)
Ctrl+k 剪切命令行中光标所在处之后的所有字符(包括自身)
Ctrl+R 可以使用该快捷键来搜索历史命令引用上一条命令的最后一个参数
方法1:!$
方法2:Alt+.
方法3:Esc,.
生产环境中,history命令记录操作时间、操作用户、操作IP
1、/etc/profile文件中加入以下内容
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
export HISTTIMEFORMAT="[%F %T][`whoami`][${USER_IP}] "
2、执行:source /etc/profile
(效果)
[root@VM-8-15-centos ~]# history
1 [2020-12-25 18:10:27][root][111.18.44.17]
2 [2020-12-20 10:35:16][root][111.18.44.17] cat /etc/redhat-release
3 [2020-12-20 14:02:20][root][111.18.44.17] exit
4 [2020-12-24 09:39:17][root][111.18.44.17] cat /etc/redhat-release
5 [2020-12-24 10:06:17][root][111.18.44.17] awk 'NR==5' /etc/passwd
6 [2020-12-24 10:08:31][root][111.18.44.17] whereis ifconfig
通配符
通配符是一种特殊语句,主要有星号(*)、问号(?)等表示,用来模糊搜索文件,当查找目录或文件时,可以使用通配符来代替一个或多个真正字符。
作用范围:目录和文件名
常见通配符具体含义及用法
字符 | 含义 |
* | 匹符配任意字 |
? | 匹配单个字符 |
[] | 匹配方括号中的任意一个,不能用于创建目录和文件 |
[^] | 匹配方括号中的任意一个字符或数字后进行取反,等同于[!],表示范围可以用".."或"—",用于查找和删除目录和文件,不用于创建目录和文件 |
[!] | 匹配方括号中的任意一个字符或数字后进行取反,等同于[^],表示范围可以用".."或"—",用于查找和删除目录和文件,不用于创建目录和文件 |
[? - ?] | 匹配方括号范围内任意一个,用于查询、删除,但不能用于创建目录和文件 |
{string,string} | 匹配括号中的任意一个字符串,表示一个范围时,字符串之间用".." |
引号使用
符号 | 作用 |
无引号 | |
’ | 单引号,输出时,将单引号内的所有内容都原样输出,这称为强引用 |
” | 双引号,输出双引号内的所有内容,如果内容中有变量,特殊转义符等,会先把变量,转移符等解析出结果,然后再输出最终内容,这成为强引用 |
` | 反引号,一般用于引用命令,执行的时候命令会被执行,与$()作用相同 |
$() | 与`作用相同 |
Linux中的用户和组的分类
Linux下的用户可以分为三类
1、超级用户 --- 用户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
2、系统用户 --- 是Linux系统正常工作所必需的内建的用户。
主要是为了满足相应的系统进程对文件属主的要求而建立的,例如:bin、daemon、adm、lp等用户。系统用户不能用来登录。
3、普通用户 --- 是为了让使用者能够使用Linux系统资源而建立的,我们的大多数用户属于此类。
Linux中的组有以下三种
1、基本组(私有组) --- 建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组,基本组只容纳一个用户。当把其他用户加入到该组中,则基本组就变成了附加组。
2、附加组(共有组) --- 可以容纳多个用户,组中的用户都具有组所拥有的权利。。
3、系统组 --- 一般加入一些系统用户。
Linux中用户的用户组的配置文件
每个用户都有一个UID数值:
超级用户的UID --- 0
系统用户的UID --- 1 ~ 999
普通用户的UID --- ≥ 1000
在Linux中,用户账号、密码、用户组信息和用户组密码均是存放在不同的配置文件中的。
文件功能 | 文件名称 |
用户账号文件 | /etc/passwd |
用户密码文件 | /etc/shadow |
用户组账号文件 | /etc/group |
用户组密码文件 | /etc/gshadow |
1)用户帐号文件 --- /etc/passwd
passwd 是一个文本文件,用于定义系统的用户账号,由于所有用户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。
passwd文件中:
每行定义一个用户账号
每行由7个字段组成,字段之间用":"分割,其格式如下:
账号名称:密码:UID:GID:个人资料:主目录:Shell
字段说明:
账号名称:用户Linux系统使用时的名称。
密码:以前是以加密格式保存密码的位置,现在密码保存在/etc/shadow文件中,此处只是密码占位符“x”或“*”。若为“x”,说明密码经过了shadow的保护。
UID:用户的标识,是一个数值,用它来区分不同的用户
GID:用户所在基本组的标识,是一个数值,用它来区分不同的组,相同的组具有相同的GID。
个人资料:可以记录用户的完整姓名、地址、办公室电话、家庭电话等个人信息。
主目录:类似Windows 的个人目录,通常是/home/username,这里username是用户名,用户执行“cd~”命令时当前目录会切换到个人主目录。
Shell:定义用户登录后激活的Shell,默认是Bash Shell
2)用户密码文件 --- /etc/shadow
每行定义了一个用户信息,行中各字段用“:”隔开,其格式如下:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
为提高安全性,用户真实的密码采用MD5加密算法加密后,保存在配置文件中。只有root用户可以读取。
/etc/shadow文件中的每行9个字段的含义分别为:
字段 | 含义 |
登录名 | 登录名 |
加密口令 | 使用SHA-512/SHA-256/MD5算法加密后的密码,若为空,表示该用户无需密码即可登录,若为"*"表示该账号不能用于登录系统若为"! !"表示该账号密码已被锁定 |
最后一次修改时间 | 最近一次更改密码的日期,以距离1970年1月1日的天数表示 |
最小时间间隔 | 密码在多少天内不能被修改。默认值为0,表示不限制 |
最大时间间隔 | 密码在多少天后必须被修改。默认值为99999,表示不进行限制 |
警告时间 | 提前多少天警告用户密码将过期,默认值为7天,0表示不提供警告 |
不活动时间 | 密码过期多少天后禁用此用户 |
失效时间 | 密码失效日期,以距离1970年1月1日的天数表示,默认为空,表示永久可用 |
标志 | 保留未用,以便以后发展之用 |
Linux 查看用户上次修改密码的日期
# date -u -d "1970-01-01 UTC $((18256 * 86400 )) seconds"
2019年 12月 26日 星期四 00:00:00 UTC
3)用户组帐号文件 --- /etc/group
系统中的每一个文件都有一个用户和一个组的属主。使用“ls –l”命令可以看到每一个文件的属主和组。
系统中的每个组,在/etc/group文件中有一行记录
任何用户均可以读取用户组账户信息配置文件。
用户组的真实密码保存在/etc/gshadow配置文件中
group文件字段说明
字段 | 说明 |
Groupname | 组的名字 |
Passwd | 组的加密口令 |
GID | 是系统区分不同组的ID,在/etc/passwd域中的GID字段是用这个数来指定用户的基本组 |
Userlist | 是用","分开的用户组,列出的是附加组的成员 |
用户登录Linux系统的过程
Linux系统采用纯文本文件来保存账号的各种信息,其中最重要的文件有:
/etc/passwd、 /etc/shadow、/etc/group
Linux用户登入系统过程实质是系统读取、核对这几个文件的过程,其过程如下:
出现登录系统的画面提示输入账号,输入账号与密码;
Linux先寻找/etc/passwd里面是否有该账号名,若没有则退出登录,若有则将该账号对应的UID(User ID)与GID(Group ID)、用户主目录、shell设定一并读出;
Linux 进入/etc/shadow 里面找出登录账号与UID相对应的记录,然后核对一下刚刚输入的密码与此文件的密码是否符合;以上核定没有问题,用户正式进入系统。
用户管理
useradd命令
添加新用户
命令格式:useradd [选项]
useradd命令常用选项
选项 | 功能 |
-c(注释信息) | 设定与用户相关的说明信息(如,真实姓名、邮箱地址等)。 |
-d(目录) | 设定用户的家目录(默认为/home/用户名)。 |
-e(YYYY-MM-DD) | 设置用户的失效日期,此日期后将不能使用该账号。 |
-f(天数) | 指定密码到期后多少天账号被禁用,若指定为0,则表示账号到期后被立即禁用;若指定为-1,则表示账号过期后不被禁用(即密码永不过期) |
-g(组名或GID号) | 为用户指定所属的基本组,该组在指定时必须已存在。 |
-G(组名或GID号列表) | 为用户指定所属的附加组,各组在指定时已存在,附加组可以有多个,组之间用","分隔。 |
-M | 不创建用户家目录 |
-N | 不创建与用户名同名的基本组 |
-p(密码) | 指定用户的登录密码 |
-s(shell名) | 指定用户登录后使用的Shell,默认是bash。 |
-u(用户号) | 设置账号的UID,默认是已有用户的最大UID加1。如果同时有-o选项,则可以重复使用其他用户的标识号。 |
示例1、新建一个用户zhang3,查看passwd、shadow文件中的变化,并确认该用户的家目录中的初始配置文件。
[root@localhost ~]# useradd zhang3
[root@localhost ~]# tail -1 /etc/passwd
zhang3:x:1001:1001: :/home/zhang3:/bin/bash
[root@localhost ~]# tail -1 /etc/shadow
zhang3: ! ! :16925:0:99999:7: : : //注意密码字段的内容为"! !",表示密码尚未设置
[root@localhost ~]# ls -ld /home/zhang3
drwx------. 3 zhang3 zhang3 74 11月 4 15:58 /home/zhang3
[root@localhost ~]# ls -A /home/zhang3
bash_logout .bash_profile .bashrc .mozilla
useradd命令做了下面几件事
在 /etc/passwd 和/etc/group文件中增添了一行记录;
为新用户创建家目录(默认是“/home/用户名”,除非特别设置),并从 /etc/skel中将.bash_logout,
.bash_profile、.bashrc和.mozilla等4个隐藏文件复制到用户家目录,以便为用户的会话提供环境变量;
为新用户添加一个邮件池目录;
创建一个和用户名同名的基本组(除非特别指定其他组名)
示例2:新建一个用户li4,并指定用户家目录为/usr/li4
示例3:新建一个用户wang5,指定其UID为1005、登录Shell为/bin/bash、密码为123.com,账号永不过期。
示例4:新建一个辅助管理员用户admin,将其用户家目录指定为/admin,基本组指定为wheel,附加组同时属于adm组和root组。
示例5:新建一个用于访问FTP的zhao6用户,禁止其登录且不创建家目录。
#useradd -d /usr/li4 li4
#useradd -u 1005 -s /bin/bash -p $(openssl passwd -1 -salt $(openssl rand - base64 10) '123.com') -f -1 wang5
#useradd -d /admin -g wheel -G adm,root admin st3
#useradd -M -s /sbin/nologin zhao6
passwd命令
为用户账号设置密码
命令格式:passwd [账户名]
passwd命令的常用选项
选项 | 功能 |
-d | 清空指定用户的口令。这与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的账户可以。 |
-e | 强迫用户下次登录时必须修改口令。 |
-i | 口令过期后多少天停用账户。 |
-l | 锁定(停用)用户账户。 |
-n | 密码的最小生存时间。 |
-S | 显示账户口令的简短状态信息(是否被锁定)。 |
-u | 解锁用户账户。 |
usermod命令
修改用户属性
命令格式:usermod [选项] username
usermod命令的常用选项
常用的选项包括-c,-d,-m,-g,-G,-s,-u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,还可以使用如下选项:
选项 | 功能 |
-l | (新用户名)更改账户的名称,必须在该用户未登录的情况下才能使用。 |
-L | 锁定(暂停)用户账户,使其不能登录使用。 |
-U | 解锁用户账户。 |
userdel命令
删除用户账号
命令格式:userdel [-r] 账户名
命令选项:
-r --- 在删除该账户的同时,一并删除该账户对应的主目录。
su命令
用户间切换
命令格式:su [用户名]
从root用户切换到任何用户不需要密码验证,而从普通用户到root或其他普通用户均需要输入目标用户的密码且验证成功后才可切换。
su命令和su -命令区别
su只是切换了root身份,但Shell环境仍然是普通用户的Shell;而su -连用户和Shell环境一起切换成root身份了。
sudo命令
控制用户对系统命令的使用权限
sudo:控制用户对系统命令的使用权限,root允许的操作。通过sudo可以提高普通用户的操作权限,不过这个权限是需要进行配置才可使用。
配置sudo的两种方式:
1、visudo 建议使用,会做语法检查。
2、vi /etc/sudoer
sudo配置文件/etc/sudoers
(1)命令别名
别名规则的定义格式:
Alias_Type NAME=item1,item2,...
或者
Alias_Type NAME=item1,item2,item3:NAME item4,item5
其中:
Alias_Type是指别名类型,包括四种:Host_Alias、User_Alias、Runas Aliasi和Cmnd_Alias.
NAME就是别名。
NAME的命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头,比如ADMIN、SYS1和NETWORKING都是合法的,而sYS和6 ADMIN是非法的。
① Host_Alias
定义主机别名的例子如下:
Host_Alias HT1=localhost,ztg,192.168.0.0/24
主机别名是HT1,“=”号右边是成员。
Host_Alias HT1= localhost,ztguang,192.168.10.0/24:HT2=ztg2,ztg3
定义了两个主机别名HT1和HT2,别名之间用“:”号隔开。
② User_Alias
用户别名,别名成员可以是用户,用户组(前面要加%号)。
User_Alias ADMIN=ztg,ztguang
定义用户别名ADMIN,有两个成员ztg和ztguang,这两个成员要在系统中确实存在。
User_Alias PROCESSES= ztg1
定义用户别名PROCESSES,有一个成员ztg1,这个成员要在系统中确实存在。
③ Runas_Alias
用来定义runas别名,这个别名是指sudo允许切换到的用户;
Runas_Alias RUN_AS = root
定义runas别名RUN_AS,有一个成员root。
④ Cmnd_Alias
定义命令的别名,这些命令必须是系统存在的文件,要用绝对路径,文件名可以用通配符表示。
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
(2)授权规则
授权规则的定义格式:
授权用户 主机=命令动作
或者
授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3] …
这三个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用( )号括起来,如果不需要密码直接运行命令的,应该加NOPASSWD:参数,但这些可以省略。
sudo的客户端应用
sudo -l:列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
sudo -u 用户名 命令:以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户
名,也可以是UID。
sudo -k:清除存活期时间,下次再使用sudo时要再输入密码。
sudo -b 命令:在后台执行指定的命令。
sudo -p 提示语 <操作选项>:可以更改询问密码的提示语,其中%u会代换为使用者账号名称。
%h会显示主机名称
用户组管理
groupadd命令
创建用户组
命令格式: groupadd [-r] 用户组名称
groupadd命令的选项
-g (GID) --- 指定新用户组的组标识号(GID),默认值是已有的最大的GID加1。
-r --- 建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID。
gpasswd命令
添加/删除组成员
只有root用户和组管理员才能够使用这个。
命令格式: gpasswd [选项] [用户] [组]
gpasswd命令的选项
选项 | 功能 |
-a | 把用户加入组。 |
-d | 把用户从组中删除。 |
-M | 可同时添加多个用户。 |
-A | 给组指派管理员。 |
groupmod命令
修改用户组属性
命令格式: groupmod 选项 用户组
groupmod命令的常用选项
-g (GID) --- 为用户组指定新的组标识号。
-n (新用户组) --- 将用户组的名字改为新名字修改用户组的名称和用户组的GID值
groupdel命令
删除组账户
命令格式: groupdel 用户组名
用户和组账户的信息显示
命令格式 | 作用 |
users|w|who | 显示当前用户信息(三条命令) |
id [用户名] | 显示当前用户或指定用户的ID,以及所属组的ID |
groups [用户名] | 显示当前用户或指定用户所属组账号的信息 |