第四章 vi/vim

1. 打开、关闭文件

1. 打开文件

vim [option] filename
+n:光标定位到第n行
+/henry:光标到第一个匹配到的行首
-m:只读方式打开
-e:直接进入扩展命令行模式
-b:以二进制方式打开

2. 关闭文件

:q        # 退出
:q!        # 不保存,强制退出
:w        # 保存
:wq        # 保存退出
:wq!    # 强制的保存退出
:x        # 保存退出

ZZ # 保存退出
ZQ # 不保存退出

 

2. 模式的切换和操作

  • 命令模式:打开后的默认模式

  • 插入模式:编辑文件

  • 扩展命令模式(末行模式):保存或退出等

  • 可视化模式:配合鼠标使用

1. 命令模式和插入模式

  • 命令模式进入插入模式

  • i 在当前光标的所在位置插入

  • I 在当前行的行首位置开始插入

  • a 在光标的后面开始插入

  • A 在当前行的行尾位置开始插入

  • o 在当前光标所在行的下方打开一个新行

  • O 在当前光标所在行的上方打开一个新行

  • 回到命令模式:Esc键

2. 命令模式和扩展命令模式

  • 从命令模式进入扩展命令模式

:        # shifit + :
  • 命令模式的操作
:w                         # 保存文件到磁盘
:r filename    # 读入filename,在cursor的下一行插入其内容
:w filename       # 另存为
:! command         # 执行终端命令
:r! command         # cursor下一行插入执行结果
  • 从扩展命令模式到命令模式:两次Esc键或者Esc + Enter

3. cursor光标移动

1. 字符间移动

  • h 左移动

  • l 右移动

  • j 往下移动

  • k 往上移动

  • # command 多个字符之间跳转

2. 单词间移动(除了下划线都认为是单词的分隔符)

 w 下一个单词的词首
 e 当前单词或者下一个单词的词尾
 b 当前单词或者上一个单词的词首
 \# command 多个单词之间进行跳转

3. 行间移动

 gg 回到第一行
 1G 回到第一行
 G跳转到最后一行
 扩展命令模式下:# 跳转到对应的#行
 #G 跳转到指定的#行

4. 段落间移动

{        # 上一段
}        # 下一段
[[        # 文本开头
]]        # 文本结尾

5. 翻屏

ctrl + f            # 下一屏
ctrl + d            # 下半屏
ctrl + u            # 上半屏
ctrl + b            # 上一屏

 

4. 命令行的操作

1.字符编辑

nx                            # 删除cursor之后的文本(n个字符,默认一个)
xp                            # 两个字符交换位置
p                                # 黏贴到cursor所在后一个字符后
~                                # 大小写转化
nJ                            # 合并下 n 行,删除下 n 行换行符

rx                            # 用 x 替换cursor所在位置后的单个字符
R                                # 切换为 Replace 模式,可以连续替换

2. 删除d

dl                            # 删除右边的一个字符,根据cursor移动删除
d0
d$/D
3dd                            # 删除当前行和下2行
d^                            # 从cursor位置删除到当前行第一个非空字符
dw                            # 删除一个单词
de                            # 删除到当前单词或下一个单词词尾
db                            # 删除到当前单词或上一个单词词首
dG                            # 删除到文件行尾
dgg                            # 删除到文件行首

3. 复制y

y$                            # 结合cursor跳转使用
5yy                            # 复制5行
p                             # 粘贴到cursor位置(类似a),如果是整行则粘贴到下一行
P(大写)                     # 粘贴到cursor位置前,如果是整行则粘贴到上一行

  • y 复制,需要结合光标跳转字符

  • y$

  • y0

  • y^

  • yw

  • ye

  • yb

  • yG

  • ygg

  • yy 复制整行

  • #yy 复制#行


  • 改变c(直接切换到插入模式)
cw                            # 结合cursor跳转使用
cc                            # 删除整行,并进入insert模式
ncc                            # 删除 n 行
c$/C

c 修改之后直接切换到插入模式

c$

c0

c^

cb

ce

cw

#

cc 删除当前行并且输入新内容

#cc 删除#行,并切换到插入模式

C 相当于c$
  • 插入n次henry
nihenry                    # 插入n个henry
  • 撤销u:最近的更改
nu                            # 撤销之前的 n 次更改
U                                # 撤销当前行的更改
ctrl+r                    # 撤销 撤销
3.    
  • u 撤销最近的更改

  • #u 撤销之前的#次更改

  • U 撤销光标所在行的关于此行操作

  • ctrl+r 重做最后的操作,撤销撤销

  • . 重复前一个操作

  • #. 重复之前的动作多少次

  • 搜索/(可以使用正则
/pattern                # 向下搜索指定pattern
?pattern              # 向上搜索指定pattern
n                                # 和搜索命令相同方向跳转cursor
N                                # 和搜索命令相反方向跳转cursor
  • 粘贴
 p 如果是整行,则粘贴到当前所在行的下面,否则,则粘贴到光标所在位置的后面
 P 如果是整行,则粘贴到当前行所在的上面,否则,则粘贴到光标所在位置的前面

5. 扩展的命令模式补充

1. 地址定界

### 

```SHELL
:start,end            # 从start行到end行
:start,+n                # 从start行到 start+n 行
:2,5                        # 2-5行
:2,+5                        # 2-7行
:n                            # 具体到第n行
:.                            # 当前行
:$                            # 最后一行
:$-2                        # 倒数第 $-2 行
:%                            # 全部
:n,/pattern/        # 从第n行到第一次pattern匹配行
:/pat1/,/pat2/    # 从第一次pat1匹配行到第一次pat2匹配行
:/pattern/,n        # 从第一次pattern匹配行到第 n 行
```

### 

2. 使用方法(d/y/w/r)

:/pattern/,n w newfile        
:4 r b                # 在第4行,插入
d                     # 删除
y                     # 复制
w newfile             # 将指定范围内的文件另存为
r filename            # 将文件内容插入指定位置

3. 查找替换

  1. :地址定位符s/pattern(正则)/替换的内容/装饰器

  • 查找的内容可以使用正则表达式和分组,替换的内容可以引用,即\1, \2 等

  • 也可以使用&代替查找的内容(不需要分组)

# 替换第一个匹配字符
:%s/s..c/abc    
# 使用向后引用,正则的分组
:%s/\(sy.c\)/abc\1/

 

  1. 装饰器

    • i:忽略大小写

    • g:全部替换

    • gc:替换之前要确认(y 确认,n 跳过,a 全部,l,...)

    • / 可以作为替换成别的分隔符:@ #

6. 其他操作

1. 可视化模式

  • 配合移动键使用

  • 选中的文字可以被删除、复制、变更、过滤和替换等

  1. v:面向字符

  2. V:面向行

  3. ctrl + v:面向块

# 批量加入注释
1. ctrl + v
2. 移动光标选中需要注释的行
3. 按下 I 并输入注释
4. esc结束

 

2. 多文件操作

  • 保存之后再切换否则更改的内容会丢失

vim f1 f2 f2        # 打开多个文件
:next               # 切换下一个文件
:prev               # 切换下一个文件
:last #最后一个 :first #第一个 # 退出 :wqall :wall :qall

3. 使用多个窗口

  • 多个文件

vim -o f1 f2 f3    # 水平分屏
vim -O f1 f2 f3 # 垂直分屏
ctrl + w(hjkl)    # 切换窗口
  • 单个文件
ctrl + w, s            # 水平分屏
ctrl + w, v            # 垂直分隔
ctrl + w,hjkl     # 跳转
ctrl + w, q            # 取消相邻的屏幕
ctrl + w, o            # 取消全部窗口

4. 定制vim

  • 全局配置文件:/etc/vimrc

  • 当前用户配置文件:~/.vimrc

  • 扩展命令模式:

    • 添加行号 set nu 取消 set nonu

    • 搜索时忽略大小写 set ic 取消set noic

    • 自动缩进(与上一行对其) set ai 取消 set noai

    • 搜索高亮 set hls 取消 set nohls

    • 语法高亮 syntax on 关闭 syntax off

    • 设置光标所在的行的标识符 set cul 取消 set nocul

    • 获取帮助 :set all

:set nu                    # 设置行号
:set nonu                # 取消行号
:set ic                    # 忽略大小写,搜索
:set noic
:set ai                    # 自动缩进,与上一样对齐
:set noai
:set hls                # 搜索高亮
:set nohls
:syntax on            # 语法高亮
:syntax off
:set cul                # 设置光标所在行的标志符(下划线)
:set nocul
:set all                # 获取帮助
  • 文件转换
# 转换为 windows 格式
:windows set fileformat=dos# 转换为 Linux/unix
:linux set fileformat=unix

5. vim帮助信息

  • :help :help topic

  • vimtutor

  • vim + enter

5. 搜索

1. find

1. 用法

  1. find [option]... [查找路径][查询条件][处理动作]

  2. 查找路径:可以指定目录,默认当前目录

  3. 查找条件:用来指定文件查找的标准,文件名、大小、权限、类型等

  4. 处理动作:对符合条件文件进行的操作,默认直接输出到屏幕

2. 查找条件

1. -name:可以配合通配符使用

  • 文件名:完全匹配

  • 通配符:?、* 需要转义

# 使用名称查找,文件目录和文件只要符合都可以
find . -name a.txt        # 完全匹配
find -name a\?                # 所有以a开头后面有一个字母的文件或文件夹
find -name a\*                # 所有以a开头的文件或文件夹
find -anme 'a*'                # 所有以a开头的文件或文件夹
find -anme a[ab]            # 以a开头,后面字母是a/b的文件或文件夹

2. -i :忽略大小写

find -iname a                    # 忽略大小写

3. -maxdepth/-mindepth

  • 指定查找深度,搜索层数,指定目录为第一层

find -maxdepth 2 -name a
# 最小层数, 包括第二层
find -mixdepth 2 -name a

4. -type:指定文件类型(7)

  1. f:文件

  2. d:目录

  3. l:链接

  4. s:套接字

  5. b:块设备

  6. c:字符设备文件

  7. p:管道文件

find -type f -name a
find -type d -name a
find -type l -name a
find -type s /run -name *
# 指定搜索层数
find -maxdepth 1 -type d
# 搜索块文件,如:/dev/sda
find / -type b -ls
# 搜索字符文件
find / -type c -ls
# 搜索管道文件
find / -type p -ls

5. -empty:空文件夹

find -empty -type d      # 查找所有空目录

6. -user/-group:属主和组

find -user henry
find -group henry

7. -uid/-gid:uid或gid的文件和目录

  • id username :查看用户的 uid,gid

id henry                                # 查看用户uid
find -uid 1000
find -gid 1000

8. -nouser/-nogroup:没有属主的

  • linux通过uid进行识别用户

find / -nouser                     # 用户被删除时,属主变成数字表示没有属主
find / -nogroup

9. 组合条件

  • 与:-a

  • 或:-o

  • 非:-not / !

  • 摩根定律

    • 非A或非B=非(A 且 B)

    • 非A且非B=非(A 或 B)

find -type f -o -nouser
find -not -user henry -a -not -user dean ll
find -not \( -user henry -o -not -user dean \) -ll

10. -path:排除目录

# 排除指定目录下的其他文件
find -path "./*a1" -prune -o -print
# 以下命令等效
find -path "./*a1"
find -path "./*a1" -prune -a -print
find -path "./*a1" -prune -not -print

11. -size:文件大小

  • -n:[0, n-1]

  • n:查找在大小在(n-1 n ] 的文件且不等0的文件

  • +n:(n, )

  • c:字节,K:kb,M:mb,G:gb

find -size 1c/K/M/G
# 生成 1M 文件
dd if=/dev/zero of =ccc bs=1M count=1
ll ccc
# 查找文件大小在[0, 1]的文件和目录
find -size -2M
# 查找文件大小在(1, 2]的文件和目录
find -size 2M
# 查找文件大小在(2,...)2M以上的文件和目录
find -size +2M

12. 文件时间戳

  • 默认时间戳以天为单位

    1. atime [+|-]/ mtime / ctime

    2. time:[time,time+1)时间为 time 天到 time+1 天之间的文件

    3. +time:[time+1….]

    4. -time:[0, tim)

  • 以分钟为单位(和天一样)

    1. -amin

    2. -mmin

    3. -cmin

# 查找访问时间为[0, 1)天内的文件和目录
find -atime -1 -ls
# 查找访问时间为[1,2)天内的文件和目录
find -atime 1 -ls
# 查找访问时间为[2,....),2天以上的文件和目录
find -atime +1 -ls

13. -perm:权限

# 普通文件一般为
find -perm 644 -ls
# 软链接为 777 
find -perm 777 -ls

3. 处理动作(5)

1. -print:默认

  • 把搜索结果打印到屏幕上

find -perm 644 -print

2. -ls:类似ll

find -perm 644 -ls

3. -delete:删除

find -perm 644 -delete

4. -fls ls.txt:写入文件

# 将查找结果写入到文件中
find -perm 644 -fls ls.txt

5. -ok/exec command {} \;

  • 对查找到的文件执行 command 命令

  • {}:表示搜索到的内容

  • \; :为固定格式

  • ok:需要确认,exec:不需要确认

  • find传递内容时一次性传递的

# 需要确认
find -perm 644 -ok rm -rf {} \;
# 不需要确认
find -perm 644 -exec rm -rf {} \;

2. xargs

  • xargs:可以将命令的输出,一个个交给管道之后的命令

  • 解决好多命令不支持管道,但工作中会用到的问题

  • 有些命令不支持太多字符,也可以使用xargs

touch a{1..1000000}
echo a{1..1000000}|xargs touch
find -name * | xargs ls -l
ls a* | xargs rm -f

3. grep

  • 从文件中查找符合条件行,使用正则时需要对 +、 ?、 {、 }、 (、 )

  • Global search REgular expression and pring out the line,全局用正则搜索,并打印符合条件行

  • 三剑客:grep、sed、awk,用于处理文本,都可以使用正则

1. 用法

  • gerp [option]… pattern [filename]

# 只要行内容包行 pattern 整行就会被输出
grep 'root' /etc/passwd

2. 参数

  1. --color=auto

    • alias grep = 'grep --color'

    • 将匹配到的文本添加颜色显示

  2. -v:取反

  3. -i:忽略大小写

  4. -n:显示匹配行行号

  5. -c:显示匹配的行数

  6. -o:显示匹配的字符串

  7. -q:静默模式,不输出内容,判断执行是否成功,echo $?

  8. -A n:输出匹配和后 n 行

  9. -B n:输出匹配和前 n 行

  10. -C n:输出匹配和前后 n 行

  11. -e:或关系

  12. -E:扩展正则表达式

  13. -r:递归查找,用于在目录中查找

# 显示没有匹配到的行
grep -v 'root' /etc/passwd

grep -q 'root' /etc/passwd
# $?上次命令结果的返回值,成功表示0,不成功为非0(1-255)
echo $?
# 输出匹配行以及其下 2 行
grep -nA 2 'root' /etc/passwd
# 输出匹配行以及其上 2 行
grep -nB 2 'root' /etc/passwd
# 输出匹配行以及前后 2 行
grep -nC 2 'root' /etc/passwd
# 或者
grep -e 'root' /etc/passwd -e 'mail' /etc/passwd
# 递归查找
grep -r 'root' /etc/

4. 正则

  • 注意和文件通配符区分

1. 字符匹配(9)

  1. .:任意

  2. [abc]:abc的一个

  3. [^abc]:取反

  4. [:alpha:]:字母

  5. [:upper:]:大写字母A-Z

  6. [:lower:]:小写字母a-z

  7. [:digit:]:数字

  8. [:alnum:]:数字字母

  9. [:punct:]:标点

grep "[[:alnum:]]*" b
grep "\W*" b

grep "a*.c" b
abc
ac
bc
dc
...

2. 量词

  1. *:任意次,默认时贪婪匹配

  2. ?:0 或 1次,使用时需要转义 \?

  3. +:至少1次,使用时需要转义 +

  4. {n}:匹配n次,使用时需要转义\{n\}

  5. {m, n}:匹配n次,使用时需要转义\{m, n\}

  6. {,n}:至多n次,使用时需要转义\{,n\}

grep "a\?c" b
grep "a\+c" b

3. 位置锚定

  1. ^:开头

  2. $:结尾

  3. ^$:空行

grep "^$" b

4. 向后引用

  • \1:表示前面第一个分组的引用

grep "\(.\+\) is \1" b
grep "\(l..e\).*\1" b
# 外边的是1,里面的是2分组
grep "\(l(..)e\).*\1\2" b

5. egrep

  • egrep = grep -E

  • 标准正则需要转义此时不用转义

# 以下写法等价
grep -E "(l..e).*\1" b
egrep "(l..e).*\1" b

6.压缩和归档

1. 压缩

1. gzip

1. 用法

  • gzip [option]… [file]...

2. 参数

  1. -c:保留源文件,必须指定导出路径

  2. -d:解压

  3. -9:指定压缩比为 9,默认为9, 范围[1-9]

# 删除源文件压缩
gzip /etc/passwd
# 解压zip包,默认删除压缩包
gunzip /etc/passwd.gz

# 解压,删除压缩包
gzip -d /etc/passwd.gz
# 压缩,解压保留原文件
gzip -c /etc/passwd.gz > /etc/passwd
gzip -dc /etc/passwd.gz > /etc/passwd

# 值越大,压缩比越大
gzip -9 /etc/passwd 
gzip -1 /etc/passwd 

# 查看压缩包,可以输出到一文件,即变相解压
zcat /etc/passwd.gz > /etc/passwd

2. bzip2

  • 生成 .bz2 文件

参数

  1. -k:保留源文件

  2. -d:解压缩

  3. -9:指定压缩比

bzip2 /etc/passwd
# 指定压缩比默认9
bzip2 -9 /etc/passwd
bzip2 -d /etc/passwd.bz2
bunzip2 /etc/passwd.bz2
# 保留源文件
bzip2 -k /etc/passwd.bz2
# 查看bz2文件
bzcat /etc/passwd.bz2

3. xz

  • 生成 .xz 文件

1. 参数

  1. -k:保留源文件

  2. -d:解压

  3. -9:指定压缩比

xz /etc/passwd
xz -d /etc/passwd.xz
unxz /etc/passwd.xz
# 指定压缩比为 9
xz -9 /etc/passwd
# 查看.xz 文件
xzcat /etc/passwd.xz

2. tar 归档

  • 只放进包里不压缩

  • 参数 - 可省略

1. 参数

  1. c:创建

  2. v:显示过程

  3. f:指定文件

  4. r:追加

  5. x:解包

  6. -C:指定解压位置

  7. z:使用 gzip 压缩

  8. j:使用 bzip2 压缩

  9. J:使用 xz 压缩

  10. --exclude=filename:排除指定文件

# 打包
tar cvf a.tar b c
# 追加 d 到 a.tar
tar -r -f a.tar d

# 使用 gzip 压缩,和解压
tar zcvf a.tar.gz f1 f2 f3
tar zxvf a.tar.bz
# 使用 bzip2 压缩,和解压
tar jcvf a.tar.bz f1 f2 f3
tar jxvf a.tar.bz
# 使用 xz 压缩,和解压
tar Jcvf a.tar.xz f1 f2 f3
tar Jxvf a.tar.xz

# 不指定压缩格式的解压, 默认解压到当前目录
tar xvf a.tar.xz
tar xf a.tar -C /opt
# 排除指定文件
tar zcf etc.tar.gz --exclude=/etc/yum.repos.d --exclude=yum.conf /etc/

2. split 分卷压缩

  • 只能压缩文件

1. 用法

`split -b size filename -d tarfile`

`cat tarfile* > tarfile`

2. 参数

  1. -b:指定分卷大小

  2. -d:指定数字为后缀,默认是字母

# 大文件切分压缩
split -b 1M b -d b.tar.gz  
# 合并
cat b.tar.gz0* > b.tar.gz

7. 用户和用户组

1. motd

  • message of the day

  • 登录提示内容

  • /etc/motd

2. 用户

1.用户分类

  1. root:id为 0

  2. 普通用户:

    • 系统用户:一般情况下启动服务或者运行进程,不可以登录,id 为 1-999/centos 7, 1-499/centos6。

    • 可登录用户:可以登录系统的,1000-65535/centos7,500-65535/cenos6。

2. useradd

  • 只能root用户执行

1. 参数(10)

  1. -d:指定用户的家目录,默认在/home,不可以指定为 /temp 目录

  2. -u:指定用户id

  3. -g:指定用户的用户组,可以使用 gid / name

  4. -G:指定用户的附加组

  5. -M:不创建用户家目录

  6. -N:不创建组,默认继承自 users

  7. -r:创建系统用户,id 从1000依次递减

  8. -s:指定用户登录后使用的 shell,/sbin/nologin(可以登录看到提示信息,会立马踢掉)

  9. -D:显示默认配置(可以和 -b,-s,-g连用)

  10. -b:修改默认的家目录

useradd echo
useradd -d /opt/echo echo
# gid:有且只能有一个,—G:指定附加组,可以有多个
useradd -G root,echo dean
# 默认继承自, users
useradd -N dean1
# 创建系统用户
useradd -r henry
# 指定用户登录使用的shell
useradd -s /sbin/nologin dean2
passwd dean2                        # 给dean2 设置登录密码

# 如果不指定uid,则系统会找到最大的 uid 进行递增
useradd -u 3000 dean3
useradd dean4
  • 修改默认配置
# 修改默认登录shell
useradd -D -s /sbin/nologin
# 修改默认的家目录
useradd -D -b /opt
# 修改默认组
useradd -D -g 3000

2. 配置文件

cat /etc/default/useradd
# 用户家目录的模版
ll -a /etc/skel/.
  • 存放用户位置:/etc/passwd(7部分)
henry:   x:    1000:1000:henry: /home/henry:/bin/bash
用户名 密码占位符 uid  gid  描述信息   家目录     使用shell

3. usermod

参数

  1. -L:锁定用户,用户无法登录,默认情况下:修改用户密码即解锁

  2. -U:解锁用户

  3. -m:移动家目录

  4. -d:新的家目录,不会自己创建,要使用-m选项

  5. -g:修改主组

  6. -G:修改附加组

  7. -a:追加附加组,需要和G一起连用

  8. -l:改名

  9. -s:改shell

# 登录会进入 / 目录
usermod -d /usr/henry henry 
# -d 一般和 -m 连用
usermod -md /usr/local/henry henry 
# 追加附加组,需要和G一起连用
usermod -aG dean henry

4. userdel

参数(1)

  1. -r:删除用户以及家目录和mail pool

# 删除用户和家目录和mail pool
userdel -r dean2

5. passwd

  • root only

参数(9)

  1. -d:删除用户密码

  2. -l:锁定用户

  3. -u:解锁用户

  4. -e:强制用户下次登录时,修改密码

  5. -x maxdays:密码最长有效期,默认是 day

  6. -n mindays:密码最短有效期

  7. -w days:提前通知用户密码到期时间

  8. -i days:密码过期多少天禁用

  9. -—stdin:从标准输入读取密码,不需要二次确认

passwd -i 7 dean
# 用于脚本,自动修改,交互的内容获取不到
echo 'xxx' | passed --stdin username

6. chage

参数(7)

  1. -d:将密码修改时间设置为指定时间

  2. -E:设置用户过期时间

  3. -I:密码过期多长时间以后账户被禁用

  4. -l:list用户密码策略

  5. -m days:密码最多使用期

  6. -M days:密码最长使用期

  7. -W days:密码过期的警告天数

# 交互式更改用户密码策略
chage dean

配置文件

  1. 用户名

  2. 密码

  3. 18106:从unix元年到密码最近一次修改的时间

  4. 0:密码最小使用期限

  5. 99999:密码最大使用期限

  6. 7:密码过期前提前 7 天通知用户,默认是 7 天

  7. 20:密码过期 20 天被锁定,

  8. 最后一个:从unix元年,多少天账户失效

cat /etc/shadow
# $6$ : sha-512,6表示加密方式,ahzn7peGcStDon3:加盐,剩下的为加密字符串
henry:$6$.ahzn7peGcStDon3$kI8HHtL5V0CHFS4VMb9.8yag5Qyq2a9CqjA3zyqFwnEHJYtzAOgDdDr7JzEiABusYOpZG.6BGvfyqjZvxABHk/:18106:0:99999:7:20::

7. su和sudo

1. su

  • su username,从root切换,不需要密码

  • su - username,完全切换,切换用户家目录和环境变量

su username
# 完全切换,切换用户家目录和环境变量
su - username
# 获取用户权限,执行命令
su - root -c 'useradd dean3'

2. sudo

  • /etc/sudoers

    • 添加用户:henry ALL=(ALL) [NOPASSWD:]ALL

    • 添加用户组:%wheel ALL=(ALL) [NOPASSWD:] ALL

    • (ALL):允许执行的命令

    • NOPASSWD:不需要输入密码

vim /etc/sudoers
添加:henry  ALL=(ALL) ALL
sudo useradd dean4

3. 用户组

1. 分类

  • gid取值和uid相同

  1. root组:root ID为0

  2. 普通用户组

    • 系统组

    • 可登录用户组

2. groupadd(2)

1. 参数(2)

  1. -g:指定gid

  2. -r:指定系统组

groupadd oleg
cat /etc/group

2. 配置文件

  • /etc/group

  • /etc/gshadow

  1. henry:组名

  2. x:密码占位符

  3. 1000:gid

  4. dean:以当前组为附加组的用户列表

# /etc/group
henry:x:1000:dean
# /etc/gshadow

3. groupmod(2)

  • -g:修改gid

  • -n:修改gname

groupmod -g henry 3000
groupmod -n henry henryboos

4. groupdel

groupdel dean

4. 两种认证方式

  • 用户名和密码

  • 用户名和key

# 生成key
ssk-keygen
# 公钥和私钥,非对称加密
Your identification has been saved in /root/.ssh/id_rsa.
# 公钥
Your public key has been saved in /root/.ssh/id_rsa.pub.
+---[RSA 2048]----+
|        .o+      |
|        .= .     |
|       .. = o .  |
|  . . .. = o +   |
| o o + .S O .    |
|  + = = o@ o     |
|   = B..=.*      |
|    E+.  +o+     |
|    .++   ++     |
+----[SHA256]-----+
# copy公钥到远程服务器
ssh-copy-id root@ip
# 直接登录,公加密私解密
ssh root@ip

 

posted @ 2020-07-02 21:55  炜琴清  阅读(141)  评论(0编辑  收藏  举报