第九章 用户与组
Posted ronglianbing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九章 用户与组相关的知识,希望对你有一定的参考价值。
一.用户创建扩展知识
useradd创建用户时,系统会以/etc/login.defs、/etc/defaults/useradd两个配置文件作为参照物
1./etc/login.defs
#用户的邮件目录
MAIL_DIR /var/spool/mail
#密码的最大天数
PASS_MAX_DAYS 99999
#密码最小使用天数
PASS_MIN_DAYS 0
#密码最小长度
PASS_MIN_LEN 5
#剩多少天警告
PASS_WARN_AGE 7
#普通用户最小uid
UID_MIN 1000
#普通用户最大uid
UID_MAX 60000
#系统用户最小uid
SYS_UID_MIN 201
#系统用户最大uid
SYS_UID_MAX 999
#普通用户最小gid
GID_MIN 1000
#普通用户最大gid
GID_MAX 60000
#系统用户最小gid
SYS_GID_MIN 201
#系统用户最大gid
SYS_GID_MAX 999
#是否创建家目录
CREATE_HOME yes
#创建家目录的权限(700)
UMASK 077
#创建用户的同时 创建组,删除用户的同时,删除组
USERGROUPS_ENAB yes
#密码的 加密算法
ENCRYPT_METHOD SHA512
2./etc/default/useradd
#依赖于/etc/login.defs的USERGRUUPS_ENAB参数,如果为no,则在此处控制
GROUP=100
#普通用户家目录
HOME=/home
#是否启用账号过期 -1表示不启用
INACTIVE=-1
#账号的终止日志 不设置表示不启用
EXPIRE=
#默认登录shell
SHELL=/bin/bash
#用户的家目录 环境变量
SKEL=/etc/skel
#创建邮件
CREATE_MAIL_SPOOL=yes
设置随机复杂密码(扩展)
yum install -y expect
mkpasswd
-l:密码长度
-d:数字
-c:小写字母
-C:大写字母
-s:特殊字符
11.命令总结
命令总结:
- echo : 所见即所得,想打印出内容
-e:识别特殊符号
例如:
PS1定义了命令提示符
-bash: [u@h: command not found
-bash: ifconfig: command not found
命令 不 找 (找不到命令)
-bash: /usr/sbin/useradd: Permission denied
没有权限
2.查看当前用户
whoami
3.查看当前所在目录(路径)
pwd ‘print work directory’ 定位
4.查看历史命令
history
-w:保存历史命令到文件中write
-d:删除历史命令中的某一条 -d 后面加数字 delete(删除)
-c:清空历史记录,clear(清除)
! + 命令中的前面字符:调用之前的历史命令,只能调最近执行的命令
!!:执行上一条执行过的命令
!+历史命令中的编号:调用历史命令
#历史命令保存到文件,当前用户的家目录下有一个隐藏文件:.bash_history
[root@oldboyedu ~]# history -w
#删除第5条历史记录
[root@oldboyedu ~]# history -d 5
#清空所有历史记录
[root@oldboyedu ~]# history -c
5.命令的别名
alias
#查看别名
[root@oldboyedu ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
#取消别名
[root@oldboyedu ~]# unalias ls
#设置别名
alias 名字='命令'
alias tong='ping baidu.com'
6.查看目录下的文件
ls
-1 : 数字1 ,以列表的形式展示出某个目录下的文件
-l : 显示出某个目录下的详细信息,相当于 ll(别名)
-a : 显示所有文件包括隐藏文件 --all
-h : 以人类可读的方式,显示文件信息(文件大小加上了单位)
-d : 只显示目录本身
-t : 按照修改时间排序,最新的在最上面
-r : 倒叙排列
#以列表的形式展示出tmp目录下的文件
[root@oldboyedu ~]# ls -1 /tmp/
#详细信息
[root@oldboyedu ~]# ls -l /tmp
[root@oldboyedu ~]# ls -tl /etc/
[root@oldboyedu ~]# ls -tlr /etc/
7.切换目录
cd
cd [目录名]
cd - : 返回上一次进入的目录
cd ~ :进入当前用户家目录
cd . :进入当前目录
cd .. :返回上一级目录
cd :进入当前用户的家目录
cd ~/oldboy
8.创建目录
语法:
mkdir [选项] 目录名 #make directory
注意:不加任何选项的情况下,只能在已有的目录下创建目录
建议:创建目录时尽量加上-p选项
-m, 创建目录时,指定权限(很少用,几乎不用)
-p, 如果目录已存在则不报错,递归创建
-v, 打印出创建过程信息
权限:
r:read 读
w:write 写
x:exec 执行
目录权限:755
文件权限:644
/oldboy/oldboy1/你的名字
#创建多个目录
[root@oldboyedu ~]# mkdir /dir1 /dir2 /dir3
[root@oldboyedu ~]# mkdir /dir{4..10}
[root@oldboyedu ~]# mkdir /home/zls/dir{1..3}/oldboy1 -pv
mkdir: created directory ‘/home/zls/dir1’
mkdir: created directory ‘/home/zls/dir1/oldboy1’
mkdir: created directory ‘/home/zls/dir2’
mkdir: created directory ‘/home/zls/dir2/oldboy1’
mkdir: created directory ‘/home/zls/dir3’
mkdir: created directory ‘/home/zls/dir3/oldboy1’
#报错
[root@oldboyedu ~]# mkdir /dir4
mkdir: cannot(不能) create(创建) directory(目录) ‘/dir4’: File(文件) exists(存在)
[root@oldboyedu ~]# mkdir /dir11/oldboy #没有这个文件 或者 目录
mkdir: cannot create directory ‘/dir11/oldboy’: No such file or directory
9.创建文件
touch
语法: touch [选项]... 文件名...
[root@oldboyedu ~]# touch abc
[root@oldboyedu ~]# touch /oldboyedu1/abc
touch: cannot touch ‘/oldboyedu1/abc’: No such file or directory
1.创建的文件,必须在已存在的目录下
2.文件已存在的情况下,不会报错,会修改文件的创建时间
3.源文件内容不会被覆盖
4.对目录也可以操作,不会报错,修改创建时间(Linux中,一切皆文件)
[root@oldboyedu ~]# touch 123 456 789
[root@oldboyedu ~]# touch def hig /usr/local/src/abc
[root@oldboyedu ~]# touch /usr/local/src/{abc,def,hig}
10.以树状形式显示目录结构
tree
-L:指定层级(level)
-d:只查看目录
如果没有需要安装:yum install tree -y
[root@oldboyedu ~]# tree
.
├── 123
├── 456
├── 789
├── abc
├── anaconda-ks.cfg
├── check_student.sh
├── def
├── hig
├── oldboy
├── student.txt
└── zls
└── zls1
└── zls2
[root@oldboyedu ~]# tree -L 2 /usr/local/
/usr/local/
├── abc
├── bin
├── etc
├── games
├── include
├── lib
├── lib64
├── libexec
├── sbin
├── share
│ ├── applications
│ ├── info
│ └── man
└── src
├── abc
├── def
├── hig
└── zls123
11.复制
cp:复制(copy)
-r:递归拷贝,拷贝目录
-p:保持源文件的属性
-a:拷贝目录并保持属性
-v:显示复制的过程
-t:交换目标和源文件的位置
-i:交互
语法:
cp [OPTION]... 源文件 目标
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
[root@oldboyedu ~]# cp oldboy /usr/
cp: omitting directory ‘oldboy’
[root@oldboyedu ~]# cp -v 123 456 789 /opt/
‘123’ -> ‘/opt/123’
‘456’ -> ‘/opt/456’
‘789’ -> ‘/opt/789’
1.cp可以修改名字,指定的目录不存在,即改名
12.移动(剪切)
mv:移动 move
mv [OPTION]... 源文件 目标
-i:交互
-t:调换目标和源文件位置
1.如果目标是一个目录,就把文件放入目录
2.如果目标是一个文件,就会被覆盖
[root@db04 ~]# mv file /tmp/
[root@db04 ~]# mv file1 test1
[root@db04 ~]# mv dir1 /tmp/
[root@db04 ~]# mv dir2 file4 file5 file6 /opt/ /usr/local/
[root@db04 ~]# mv /tmp/dir1 ./
[root@db04 ~]# mv /tmp/dir1 .
[root@db04 ~]# mv /tmp/dir2 ../
[root@db04 ~]# mv -t /tmp/ file1 file2 ./file3
绝对路径执行命令:就是执行命令本身,不经过alias
命令前面加上转义符'':就是执行命令本身,不经过alias
13.删除
rm:删除 remove
-i:交互
-r:递归
-f:强制删除(force)
-v:显示删除过程
[root@oldboyedu ~]# rm -r zls
rm: descend into directory ‘zls’? y
rm: descend into directory ‘zls/zls1’? y
rm: descend into directory ‘zls/zls1/zls2’? y
rm: remove directory ‘zls/zls1/zls2/oldboy’? y
rm: remove directory ‘zls/zls1/zls2’? y
rm: remove directory ‘zls/zls1’? y
rm: remove directory ‘zls’? y
14.查看文件内容
cat:查看
-n:查看文件内容并显示行号
-A:显示文件的结束符和tab键 相当于-vET
----------------------------------------
-b:空行不显示编号
-E:显示文件的结束符($)
-T:显示文件的tab键(^I)
cat >> zls.txt << EOF
卧槽
作者:曾老湿
江山风景美如画,
本想吟诗赠天下。
奈何自己没文化,
一句卧槽浪好大。
谢谢大家。
EOF
用法:cat [选项]... [文件]...
[root@oldboyedu ~]# cat 123
file1
[root@oldboyedu ~]# cat 456
file2
[root@oldboyedu ~]# cat 123 456
file1
file2
tac
15.查看文件命令
more
[root@oldboyedu ~]# more /etc/services
less
[root@oldboyedu ~]# less /etc/services
/ + 关键字 回车
n:向下搜索
N:向上搜索(shift + n)
16.查看文件的前n行
head + 文件名
默认显示前10行
-n:显示前n行,n可以不写,为数字,n后面加数字
[root@oldboyedu ~]# head /etc/services
#查看文件前20行
[root@oldboyedu ~]# head -n 20 /etc/services
[root@oldboyedu ~]# head -20 /etc/services
tail + 文件名
默认显示后10行
-f:追踪文件末尾 相当于 tailf
-n:显示后n行,n可以不写,为数字,n后面加数字
17.三剑客:grep awk sed
grep:过滤关键字
-n:显示行号
-o:只显示关键字
-B:显示关键字的前n行,n为数字 (before)
-A:显示关键字的后n行,n为数字 (after)
-C:显示关键字的前后n行,n为数字(center)
-v:取反
-i:忽略大小写,不区分大小写
-E:支持多关键字,多个关键字之间要用竖线 '|'分隔 相当于egrep
-r,-R:递归过滤 某一目录下的 文件中的关键字
^ :以...开头
$ :以...结尾
. :代表任意字符
* :代表所有
| :管道符,将前面命令输出的结果,交给后面的命令去处理
[root@oldboyedu ~]# grep '^root' /etc/passwd
[root@oldboyedu ~]# grep 'bash$' /etc/passwd
#以数字的范围开头
[root@oldboyedu ~]# grep -n '^[0-9]' passwd
26:1
27:2
28:3
[root@oldboyedu ~]# grep -n '^[6-9]' passwd
[root@oldboyedu ~]# grep -n '^[1-2]' passwd
26:1
27:2
#以字母的范围开头
[root@oldboyedu ~]# grep -n '^m' passwd
13:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
[root@oldboyedu ~]# grep -n '^[m-n]' passwd
13:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
17:nobody:x:99:99:Nobody:/:/sbin/nologin
[root@oldboyedu ~]# grep -n '^[a-z]' passwd
[root@oldboyedu ~]# grep -n '^[a-Z]' passwd
[root@oldboyedu ~]# grep -i 'ftp' passwd
18.文件的上传下载
[root@oldboyedu ~]# yum install -y lrzsz
rz:上传文件 (直接拖拽文件)
1)不支持上传超过4G的文件
2)不支持断点续传
sz:下载文件
XFTP
19.从外网下载文件
wget
如果没有则,安装:yum install -y wget
-O:指定下载的路径,可以改名
20.curl
-o:指定下载的路径,可以改名
21.查找命令
which
[root@oldboyedu ~]# which mv
alias mv='mv -i'
/usr/bin/mv
[root@oldboyedu ~]# which cp
alias cp='cp -i'
/usr/bin/cp
[root@oldboyedu ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@oldboyedu ~]# which useradd
/usr/sbin/useradd
type
[root@oldboyedu ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
[root@oldboyedu ~]# type -a for
for is a shell keyword
[root@oldboyedu ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
[root@oldboyedu ~]# type -a for
for is a shell keyword
[root@oldboyedu ~]# type -a [
[ is a shell builtin
[ is /usr/bin/[
22.字符处理-排序
sort
-t:指定分隔符
-k:指定第几列的内容(按分隔符),不指定分隔符,默认是空格为分隔符
-n:按照阿拉伯数字的大小顺序排序
-r:倒叙
23.字符处理-去重
uniq
-c:显示去重后的数量(count)
24.字符处理-截取
cut
-d:指定分隔符
-f:指定第几列
-c:根据字符来取数据
25.字符处理-统计
wc
-l:统计行数
-c:统计字节数
-w:统计单词数
26.软硬链接
ln
-s:做软软链
-f:强制做
-v:反向做链接
&&:衔接多条命令,前面执行成功之后,再执行后面的
||:衔接多条命令,前面执行不成功,后面也要执行
27.查看磁盘信息
df
-h:人类可读
-i:查看磁盘inode
28.文件编辑
vi和vim
[root@oldboyedu ~]# yum install -y vim
1)三种模式
a.命令模式
[root@oldboyedu ~]# vim /etc/my.cnf
G: shift+g ,将光标移动到文件的末尾
gg: 将光标移动到文件的开头
dd: 删除一行,(删除多行 ndd dnd :n为数字 + p = 剪切)
D: 将光标之后的内容都删除
u: 撤销
dG: 删除光标以下的所有内容(包括光标所在行)
dgg: 删除光标以上的所有内容(包括光标所在行)
$(shift+4): 将光标移动到行尾
^(shift+6): 将光标移动到行首
ctrl+r: 恢复撤销
x: 删除光标所在字符
X: 删除光标之前的字符
yy: 复制,nyy,yny
p(小写): 粘贴(光标所在行的下一行)
P(大写): 粘贴(光标所在行的上一行)
ctrl+f 往下翻页(行比较多)
ctrl+b 往上翻页
r: 单个字符替换
R: 多个字符替换(按ESC退出替换)
b.编辑模式
[root@oldboyedu ~]# vim /etc/my.cnf
i:进入编辑模式
I:将光标跳至行首,并进入编辑模式
A:将光标跳到行末,并进入编辑模式
a:将光标向后移动一个字符,并进入编辑模式
o:将光标调至下一行,并进入编辑模式
O:将光标调至上一行,并进入编辑模式
s:删除光标所在的字符,并进入编辑模式
S:删除光标所在的行,并进入编辑模式
c.末行模式
[root@oldboyedu ~]# vim /etc/my.cnf
:w //保存当前状态
:w! //强制保存当前状态
:q //退出当前文档(文档必须保存才能退出)
:q! //强制退出文档不会修改当前内容
:wq //先保存,在退出
:wq! //强制保存并退出
:x //先保存,在退出
ZZ //保存退出, shfit+zz相当于 :wq 相当于:x
:number //跳转至对应的行号,和普通模式Ngg一个意思
末行模式的报错
E37: No write since last change (add ! to override)
E45: 'readonly' option is set (add ! to override)
E212: Unable to open and write files
末行模式(查找和替换)
查找 /string 需要搜索的内容(查找)
n 按搜索到的内容依次往下进行查找
N 按搜索到的内容依次往上进行查找
替换
:1,5s#sbin#test#g 替换1-5行中包含sbin的内容为test
:%s#sbin#test#g 替换整个文本文件中包含sbin的替换为test
:%s#sbin#test#gc 替换内容时时提示是否需要替换
%表示所有行 s表示替换 g表示所有匹配到的内容 c表示提示
替换为 w (y/n/a/q/l/^E/^Y)?
y:替换一次
n:选中下一个
a:全部替换
q:退出
l:替换一次并退出询问
另存
:w /root/test 将文件所有内容另存为/root/test
读入
:r /etc/hosts 读入/etc/hosts文件至当前光标下面
:5r /etc/hosts 指定/etc/hosts文件当前文件的哪行下面
29.对比文件
1.vimdiff
vimdiff file1 file2
优点:直观,高亮显示出不同的地方
2.diff
diff file1 file2
缺点:不直观
30.tr
替换
31.字符过滤
列:awk
行:sed
- 查看用户的命令
id:查看当前用户
id
id username 查看其他用户信息
33.用户相关命令
1)创建用户
useradd
-u:指定uid
-g:指定组(必须是已存在的组)
-s:指定用户登录的shell
-c:加注释
-M:不创建家目录
-d:指定家目录
-G:指定附加组
-r:指定系统用户,并且不创建家目录
2)修改用户
usermod
'-u' 修改用户的UID
'-g' 修改用户所属的基本组GID
'-G' 修改用户附加组, 使用逗号隔开多个附加组, 覆盖原有的附加组
'-a' 追加更多的附加组, 必须和-G使用: -aG 追加附加组
'-m' 家目录迁移, 必须和-d一起使用, 移动用户的家目录到新的位置
'-d' 指定用户的家目录新位置
'-c' 修改用户的注释信息
'-s' 更改用户使用的shell
'-l' 更改用户登录名
'-L' 锁定用户
'-U' 解锁用户
3)删除用户
userdel
-r:删除用户并删除家目录
创建zls用户,指定UID5001,基本组students 附加组sa,dba 注释信息:one newB user, 登陆的shell:/bin/bash
groupadd student
groupadd sa
groupadd dba
useradd zls -u 5001 -g student -G sa,dba -c 'one newB user' -s /bin/bash
34.查看用户登录
whoami:查看当前登录的用户
who
[root@oldboyedu ~]# who
登录的用户 终端设备 登录时间 登录的IP
oldboy1 pts/0 2019-06-27 18:01 (192.168.15.132)
root pts/1 2019-06-27 18:01 (10.0.0.1)
w
[root@oldboyedu ~]# w
系统时间 服务器运行时间 当前登录的用户数 CPU的负载: 1分钟 5分钟 15分钟
18:14:51 up 0 min, 1 user, load average: 0.75, 0.19, 0.06
10:13:35 up 249 days, 2:09, 1 user, load average: 5.61, 2.03, 0.76
用户 终端设备 连接的IP 登录时间 空闲 CPU使用率
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 18:14 3.00s 0.02s 0.00s w
35.设置密码
passwd
--stdin : 非交互设置密码
[root@oldboyedu ~]# passwd 修改当前用户的密码
[root@oldboyedu ~]# passwd qiudao01 修改指定用户的密码(root)
#普通用户
[oldboy1@oldboyedu ~]$ passwd oldboy1
passwd: Only root can specify a user name.
修改自己的 还得是输入旧密码 密码要符合 密码的复杂性
[oldboy1@oldboyedu ~]$ passwd
需要注意:
1.普通用户只能更改自己的密码(密码必须满足8位字符)
2.管理员用户能更改任何人的密码(密码长度无限制)
非交互设置密码
[root@oldboyedu ~]# echo 123 |passwd --stdin(标准输入)
设置随机密码
echo $RANDOM :生成随机数
md5sum:给随机数再加密
cut -c 1-10 : 取前10个字符
tee:将原本输出的内容保存到文件中
sed取iip地址
1.一条命令删除多个用户
seq 100 |awk ‘{print "userdel -r hh"$1}‘|bash
seq -w ‘100‘|awk ‘{print "useradd abc"$1" && mkpasswd -l 20|tee /tmp/all_pass"$1"|passwd --stdin abc"$1}‘|bash
2.创建多个用户,并给密码
for i in seq 100
;do useradd user_(i && echo `echo 1|md5sum|cut -b 1-20`|passwd --stdin user_)i ; done
- seq 5 |awk ‘{print "useradd u1"$1"&&echo $RANDOM|md5sum|cut -c 1-20|tee /tmp/od"$1"|passwd --stdin u1"$1}‘|bash
注意引号的写法:
seq 5 |awk ‘{print "useradd u1"$1"&&echo $RANDOM|md5sum|cut -c 1-20|tee /tmp/od"$1"|passwd --stdin u1"$1}‘|bash
查看终端设备命令 tty
以上是关于第九章 用户与组的主要内容,如果未能解决你的问题,请参考以下文章
《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记