第九章 用户与组

一.用户创建扩展知识
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.命令总结

命令总结:

  1. 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

  1. 查看用户的命令
    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

  1. 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

猜你喜欢

转载自www.cnblogs.com/ronglianbing/p/11734773.html