一 Linux的UID 和GIDgit
UID的编号为0-65535正则表达式
0为管理员Root的UIDsql
1-60000为普通用户的UID shell
其中1-499(CenOS6) 1-999(enOS7)为系统用户使用(做为服务权限帐号)express
500-60000(CenOS6) 1000-60000(enOS7)为普通登录用户使用centos
60000之后的基本不会使用安全
GID的编号为0-65535bash
0为管理员Root组的GIDoracle
1-60000为普通组的UID app
其中1-499(CenOS6) 1-999(enOS7)为系统组使用(做为服务帐号组)
500-60000(CenOS6) 1000-60000(enOS7)为普通登录用户组使用
60000之后的基本不会使用
当建立一个帐号的时候不指定用户基本组,会自动建立和帐号UID相同GID的基本组
二 Linux用户相关的4个配置文件
/etc/passwd 存放用户名 UID 基本组 家目录
/etc/group 存放组名 GID 组内包含的用户
/etc/shadow 存放用户密码及相关属性
/etc/gshadow 存放组密码相关属性
/etc/passwd
格式 account:password:UID:GID:GECOS:directory:shell
解释 登陆名:X:UID:GID:注释信息:家目录:用户默认shell
例如 root:x:0:0:root:/root:/bin/bash
password字段只有占位符X,出于安全问题,password另外存放在/etc/shadow
查看详细文档命令
whatis passwd man 5 passwd
/etc/shadow
格式 login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field
解释 登陆名:加密密码:上次修改密码的时间:修改密码最小时间间隔:修改密码最大时间间隔:密码过时前警告时间:密码过时后还能使用的时间:帐号失效时间:保留字段
举例
root:$6$H98QFBU6mj9/JK.4$6W..X0l3L0qLl/isPumCmx6Vr/qSjanYClVoDAaBMO64lV85ZWQba1VfAE4lMmRlYVNh5Zjk3mqw9y0hfZLfQ/:16671:0:99999:7:::
其中密码字段有三段,以$分隔
$6$H98QFBU6mj9/JK.4$6W..X0l3L0qLl/isPumCmx6Vr/qSjanYClVoDAaBMO64lV85ZWQba1VfAE4lMmRlYVNh5Zjk3mqw9y0hfZLfQ/
第一段 $6$ 加密方式
查看详细文档命令
whatis crypt man crypt
ID | Method
---------------------------------------------------------
1 | MD5
2a | Blowfish (not in mainline glibc; added in some Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
第二段 $H98QFBU6mj9/JK.4$ 随机生成的盐
第三段 加密后的密码
其中的 date of last password change和account expiration date 时间为距离1970年1月1 的时间
查看详细文档命令
whatis shadow man 5 shadow
/etc/group
格式 group_name:passwd:GID:user_list
查看详细文档命令
whatis group man 5 group
/etc/gshadow
不多用,在组切换的时候用
查看详细文档命令
whatis gshadow man 5 gshadow
三 Linux操做用户的经常使用命令
在使用命令操做用户时,若是不加参数,则参照默认的用户配置文件
/etc/login.defs 用户建立规则
/etc/default/useradd 默认使用的配置文件
useradd 建立用户
useradd [options] LOGIN
useradd -D [options] 设置建立用户的默认选项
-b, --base-dir BASE_DIR
-c, --comment COMMENT
-d, --home HOME_DIR 复制/etc/skel到家目录做文配置文件
-g, --gid GROUP 不指定会建立和用户同名的基本组
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]
-M Do not create the user's home directory ,如查为系统用户默认不建立家目录
-N, --no-user-group 不建立和UID相同的GID 必须用-g 指定基本组
-o, --non-unique 容许建立相同UID的帐号
-r, --system Create a system account.
-s, --shell SHELL
-u, --uid UID
例:建立用户oracle 附加组database sql ID 3000 家目录为/home/database
useradd -u 3000 -G database,sql -d /home/database oracle
usermod
用户属性修改
usermod [options] LOGIN
参数和useradd一至
-a, --append Add the user to the supplementary group(s). Use only with the -G option.
-c, --comment COMMENT
-d, --home HOME_DIR 修改家目录,旧的文件不会移动到新的家目录 。
-m, --move-home 与-d联合使用,迁移旧文件到新家目录
-e, --expiredate EXPIRE_DATE
-g, --gid GROUP
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]
-l, --login NEW_LOGIN 修改登录名,用户的家目录只能手动修改,其它自动修改。
-L, --lock
-o, --non-unique 容许用户的ID 为同一个
-p, --password PASSWORD
-s, --shell SHELL
-u, --uid UID
-U, --unlock
passwd 给用户添加密码
passwd [options] [username]
--stdin 从标准输出接收用户密码
userdel
userdel [options] LOGIN
-f, --force 强制删除用户,即便用户还在登陆状态
-r, --remove 删除用户同时删除家目录
groupadd
groupadd [options] group
-f, --force 待测试
-g, --gid GID
-o, --non-unique 允行添加相同GID的组
-r, --system Create a system group.
groupmod 组属性修改
groupmod [options] GROUP
-g, --gid GID 修改GID
-n, --new-name NEW_GROUP 修改组名
gpasswd
gpasswd [option] group
-a, --add user
-d, --delete user
-r, --remove-password
groupdel
有用户在基本组 ,基本组没法被删除
newgrp 临时切换基本组为指定的组
有附加组不用输密码, 若是没有附加组要输入组密码
chage
修改用户帐号及密码的属性
chage [options] [LOGIN]
-d, --lastday LAST_DAY
-E, --expiredate EXPIRE_DATE
-l, --list
chsh 修改用户的shell,基本用不到
chfn 修改用户的指纹,用户的我的信息
-f, --full-name full-name
-o, --office office
-p, --office-phone office-phone
-h, --home-phone home-phone
finger
id 显示用户的各类有效信息和组ID
id [OPTION]... [USERNAME]
-g, --group
-G, --groups
-n, --name
-u, --user
w 显示如今谁在用系统和在作什么
who 显示如今谁在用系统
-a, --all
-b, --boot 显示系统上次启动的时间
-d, --dead 显示死掉的进程
-q, --count 显示所有的登录用户和登录的个数
-r, --runlevel
whoami 查询当前的用户是哪一个
pwck verify integrity of password files
检查/etc/passwd 和 /etc/shadow 中的内容是否是符合格式
su switch user 切换用户
su user 半切换
su - user su -l user 完会切换
以指定用户的身份执行命令
su - user -c "command"
四 LINUX 文件权限管理
用户对文件的访问权限有三种:
r, w, x
文件:
r: 可以使用文件查看工具查看其内容;
w: 可以使用文件编辑工具编辑其内容;
x: 可向内核请求将此文件运行为进程;
目录:
r: 可以使用ls命令列出目录中的文件或子目录列表;
w: 可在此目录中建立或删除文件;
x:可以使用‘ls -l’列出目录文件及子目录的详细属性信息;可以使用cd命令切换工做目录为指定目录;
文件的权限主要针对三类对象进行定义:
ownuer: u, 属主;
group: g, 属组;
other: o, 其它;
某类用户对某文件的访问权限:
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
664:rw-rw-r--
rwxr-x---: 750
控制权限的经常使用命令
chmod 修改文件权限:
chmod [OPTION]... MODE[,MODE]... FILE... 直接设置权限
chmod [OPTION]... OCTAL-MODE FILE... 八进制文件权限
chmod [OPTION]... --reference=RFILE FILE.. 复制目标文件权限
三类用户:
u: owner
g: group
o: other
a: all 通常能够省略,默认表明all
两种用法:
=mode =rx =r =rwx =
=后面为空为取消权限
例:ug=rx, go= chmod g=rw yum.log
[+|-]mode
u+r +w +x
例:chmod a+w yum.log
chmod 640 yum.log
chmod 做用于目录 ,不会做用于子文件
-R, --recursive 递归修改权限,会做用于子文件
例: 复制yum.log 的权限给test.log, 两个文件的权限相同,和yum.log一至
chmod --reference=yum.log test.log
chown 修改文件属主
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
-R: recursive
chgrp 修改文件属组
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R: recursive
umask:遮罩码
目录:777-umask
文件:666-umask
若是某一类用户的权限减得的结果有执行权限,此时会自动让其权限位加1;
umask UMASK
设定:仅对当前shell进程有效;
五 grep: Global search REgular expression and Print out the line.
做用:文本搜索工具,根据用户指定的“模式(pattern)”逐行去搜索目标文本,打印匹配到的行;
模式:由正则表达式的元字符及文本字符所编写的过滤条件;
元字符:字符不表示其字面意义,而用于表示通配或控制功能;
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
grep [OPTIONS] PATTERN [FILE...]:
选项:
--color=auto:对匹配到的串作高亮显示;
-v:显示模式匹配不到行;
-i: 忽略字符大小写;
-o: 仅显示可以被模式匹配到的串本行;
-q: 静默模式;
-E:使用扩展的正则表达式;
基本正则表达式的元字符:
字符匹配:
. 匹配任意单个字符;
[] 匹配指定范围内的任意单个字符;
[^ ] 匹配指定范围内的任意单个字符;
[:lower:], [:upper:], ...
次数匹配:用于要指定其次数的字符的后面;
* 任意次;
\? 0或1次;
\+ 1或屡次;
\{m\} 精确限制为m次;
\{m,n\} 至少m次,至多n次,[m,n]
\{0,n\} 至多n次;
\{m,\} 至少m次;
.* 匹配任意长度的任意字符;
位置锚定:
^: 行首锚定;用于模式的最左侧;
$ 行尾锚定;用于模式的最右侧;
\<, \b 词首锚定;用于表示单词的模式的左侧;
\>, \b 词尾锚定;用于表示单词的模式的右侧;
^$ 空白行;
分组:\(\)
分组的小括号中的模式匹配到的内容,会在执行过程当中被正则表达式引擎记录下来,并保存内置的变量中;这些变量分别是\1, \2, ...
\1: 从左侧起,第一个左括号,以及与之配对的右括号中间的模式所匹配到的内容;
\2:
...
后向引用:使用变量引用前面的分组括号中的模式所匹配到的字符;
扩展的正则表达式:
grep家庭有三个命令:
grep 基本正则表达式
-E 扩展正则表达式
-F 不支持正则表达式
egrep 扩展正则表达式
fgrep 不支持正则表达式
扩展正则表达式的元字符:
字符匹配:
. 任意单个字符
[] 匹配指定范围内的任意单个字符;
[^] 匹配指定范围内的任意单个字符;
次数匹配:
* 任意次
? 0次或1次;
+ 1次以上;
{m} 精确匹配m次;
{m,n} 至少m次,至多n次;
锚定:
^ 锚定行首
$ 锚定行尾
\<, \b 词首锚定;用于表示单词的模式的左侧;
\>, \b 词尾锚定;用于表示单词的模式的右侧;
分组:()
后向引用:\1, \2, ...
或者:
a|b
C|cat: 不表示Cat或cat,而表示C或cat;
要写成(C|c)at
POSIX | Non-standard | Perl/Tcl | Vim | ASCII | Description |
---|---|---|---|---|---|
[:alnum:] |
[A-Za-z0-9] |
Alphanumeric characters | |||
[:word:] |
\w |
\w |
[A-Za-z0-9_] |
Alphanumeric characters plus "_" | |
\W |
\W |
[^A-Za-z0-9_] |
Non-word characters | ||
[:alpha:] |
\a |
[A-Za-z] |
Alphabetic characters | ||
[:blank:] |
\s |
[ \t] |
Space and tab | ||
\b |
\< \> |
(?<=\W)(?=\w)|(?<=\w)(?=\W) |
Word boundaries | ||
[:cntrl:] |
[\x00-\x1F\x7F] |
Control characters | |||
[:digit:] |
\d |
\d |
[0-9] |
Digits | |
\D |
\D |
[^0-9] |
Non-digits | ||
[:graph:] |
[\x21-\x7E] |
Visible characters | |||
[:lower:] |
\l |
[a-z] |
Lowercase letters | ||
[:print:] |
\p |
[\x20-\x7E] |
Visible characters and the space character | ||
[:punct:] |
[][!"#$%&'()*+,./:;<=>?@\^_`{|}~-] |
Punctuation characters | |||
[:space:] |
\s |
\_s |
[ \t\r\n\v\f] |
Whitespace characters | |
\S |
\S |
[^ \t\r\n\v\f] |
Non-whitespace characters | ||
[:upper:] |
\u |
[A-Z] |
Uppercase letters | ||
[:xdigit:] |
\x |
[A-Fa-f0-9] |
Hexadecimal digits |
练习:
一、显示/etc/passwd文件中以bash结尾的行;
grep --color bash$ /etc/passwd
二、显示/etc/passwd文件中的两位数或三位数;
grep --color "\<[[:digit:]]\{2,3\}\>" /etc/passwd
三、显示'netstat -tan'命令结果中以‘LISTEN’后跟0个、1个或多个空白字符结尾的行;
netstat -tan | grep --color "LISTEN[[:space:]]*$"
四、添加用户bash,testbash, basher以及nologin用户(nologin用户的shell为/sbin/nologin);然后找出/etc/passwd文件中用户名同shell名的行;
useradd testbash useradd basher useradd nologin -s /sbin/nologin grep --color -E "^([[:alnum:]]*):.*\1$" /etc/passwd
五、显示当前系统上root、centos或user1用户的默认的shell和UID;
grep --color -E "^root|centos|user1\>" /etc/passwd | cut -d: -f 1,3,7
六、找出/etc/rc.d/init.d/functions文件中某单词(单词中间能够存在下划线)后面跟着一组小括号的行;
grep --color -E "\<[[:alnum:]_]*\(\)" /etc/rc.d/init.d/functions
七、使用echo输出一个路径,然后egrep找出其路径基名;
echo /etc/rc.d/init.d/functions | grep --color -E -o "([^/])*$"
进一步地:使用egrep取出其目录名;
echo /etc/rc.d/init.d/functions | grep --color -E -o "^.*/"
八、找出ifconfig命令执行结果中1-255之间的数字;
ifconfig | grep --color -E "\<[[:digit:]]{1,2}\>|\<1[[:digit:]]{2}\>|\<2[0-4][0-9]\>|\<25[0-5]\>"