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