威尼斯wns.9778官网活动_vnsc威尼斯城官网

热门关键词: 威尼斯wns.9778官网活动,vnsc威尼斯城官网
当前位置:威尼斯wns.9778官网活动 > 计算机教程 > Linux基础之正则表达式,用户、组管理命令介绍威

Linux基础之正则表达式,用户、组管理命令介绍威

文章作者:计算机教程 上传时间:2019-05-11

Linux 无法使用userdel 删除用户和组的解决方案

通配符(Globbing)

简述:

通配符与元字符类似,通配符主要用于文件名的匹配,而元字符则主要用在字符串的匹配上;
下面介绍几种常用的通配符:

今天在看书的时候,看到有个实例,手痒痒的跟着做了起来。。。但是,出现问题了。。测试的用户和组不能删除。。

* 表示匹配任意位数的任意字符
? 表示匹配一位任意字符
^ 表示取反,不包含的意思
[] 表示此区间内的任意一个字符
{} 表示一种集合
转义字符,使具有特殊意义的字符失去原有意义
| 表示‘或',匹配一组可选的字符

情况:

元字符

一般我们移除,都是先把用户从组中删除,再依次把组干掉的。。。但是问题出现了。。

威尼斯wns.9778官网活动,元字符是用来描述字符的特殊字符。
常用的元字符及意义如下:

root@crper-Aspire-5755G:/home/crper# userdel -r test1 
userdel: user test1 is currently used by process 1 
root@crper-Aspire-5755G:/home/crper# groupdel work1 
groupdel:不能移除用户“test1”的主组 
*      重复前面的字符0次或者多次
.      匹配任意字符一次
      匹配前面的字符1次或者多次
?     匹配前面的字符0次或者1次
{m}    匹配其前面的字符m次
{m,n}   匹配前面的字符至少m次,至多n次
^      匹配字符在行首
$      匹配字符在行尾
^$     匹配空白行。空格、0不算
<     匹配字符在词首
>     匹配字符在词尾
<string> 精准匹配string
(xy)   xy表示一个分组
1     模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配的字符

删除该用户就提醒用户当前在进程运行。。。删除他的组也报错

除了以上的常用的元字符,还有一些特殊的元字符:

解决方法:

[:alpha:]  所有大小写字母
[:upper:]  所有大写字母 
[:lower:]  所有小写字母
[:alnum:]  所有字母及数字
[:punct:]  所有标点符号
[:blank:]  空白键和TAB键
[:space:]  任意空白的字元,空格、tab、CR等
[:digit:]  任意数字,0-9
[:print:]  任何可以被打印出来的字符

纠结了许久,忽然想起了以前在一本看到过一个vipw的命令,,于是。。找man。。。。开始干活了。。

grep

root@crper-Aspire-5755G:/home# vipw 

找到你之前创建的用户,用dd删除那行(记得保存:wq or :x)。。之后。 

root@crper-Aspire-5755G:/home# vipw -s  

找到那个用户所属组,也dd干掉即可(记得保存:wq or :x) 

为什么要vipw -s呢?原因只有一个,必须保证数据的一致性,不然可能会造成系统崩溃或者一些莫名其妙的问题 
grep, egrep, fgrep - print lines matching a pattern
【SYNOPSIS】
  grep [OPTIONS] PATTERN [FILE...]
  grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
【OPTIONS】
  --color=auto  对匹配到的内容进行高亮显示处理
  -i,--ignore-case
     Ignore case distinctions in both the PATTERN and the input
     files. (-i is specified by POSIX.)忽略字符大小写匹配
  -v,--invert-match
     Invert the sense of matching, to select non-matching lines.
     (-v is specified by POSIX.)显示没有匹配到的行
  -o,--only-matching
     Print only the matched (non-empty) parts of a matching line,
     with each such part on a separate output line.只显示匹配到的部分
  -q,--quiet,--silent静默模式,不列举任何内容
  -w,--word-regexp  单词完整匹配所在的行
  -d, --directories=ACTION how to handle directories; ACTION is 'read', 'recurse', or 'skip',目录表示方式:只读、递归、跳过
  -r,-r, --recursive      like --directories=recurse
  -c,--count print only a count of matching lines per FILE匹配到的文件有多少行
  -B,--before-context=NUM print NUM lines of leading context列出匹配到的前NUM行
  -A,--after-context=NUM  print NUM lines of trailing context列出匹配到的后NUM行
  -C,--context=NUM   print NUM lines of output context列出匹配到的前后几行

命令小解:

cut

root@crper-Aspire-5755G:/home# vipw --help 
用法:vipw [选项] 

选项: 
 -g, --group          编辑 group 数据库 
 -h, --help          显示此帮助信息并推出 
 -p, --passwd         编辑 passwd 数据库 
 -q, --quiet          安静模式 
 -R, --root CHROOT_DIR     chroot 到的目录 
 -s, --shadow         编辑 shadow 或 gshadow 数据库 
Print selected parts of lines from each FILE to standard output列举每行被选中的部分到标准输出,也就是提取行中的某个字段
【SYNOPSIS】
cut OPTION... [FILE]...
【OPTION】
  -b,--bytes=LIST   select only these bytes按字节分隔
  -c,--characters=LIST  select only these characters按字符分隔
  -d,--delimiter=DELIM  use DELIM instead of TAB for field delimiter  用TAB替换指定的分隔符来分区域
  -f,--field=LIST   分区域后,根据区域位数来列出数据
  -n with -b: don't split multibyte characters不分隔多字节字符
【FOR EXAMPLE】
  [root@localhost ~]# cat /etc/passwd|cut -d: -f1
  root
  bin
  daemon
  adm
  lp
  提取/etc/passwd文件的第一个字段内容,也就是用户名
  [root@localhost ~]# cat /tmp/ah2.txt |cut -nb 1,2,3
  平凡的
  [root@localhost ~]# cat /tmp/ah2.txt |cut -nb 1不分割字节
  平
  [root@localhost ~]# cat /tmp/ah2.txt |cut -b 1汉字属于多字节字符

  [root@localhost ~]# cat /tmp/ah2.txt |cut -c 1
  平

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

sort

您可能感兴趣的文章:

sort lines of text files文本文件的行排序
【SYNOPSIS】
 sort [OPTION]... [FILE]...
 sort [OPTION]... --files0-from=F
【OPTION】
  -b,--ignore-leading-blanks
  -f,--ignore-case
    fold lower case to upper case characters 忽略大小写
  -i,--ignore-nonprinting
    consider only printable characters忽略空白
  -M,--month-sort
    按照三位数月份排序
  -h,--human-numeric-sort   compare human readable numbers
    使用人类可读的单位排序
  -g,--genaral-numeric-sort
    使用通用数值排序,支持科学计数
  -t,--field-separator=SEP
    use SEP instead of non-blank to blank transition
    指定分列的分隔符
  -k,--key=KEYDEF
    sort via a key;KEYDEF gives location and type
    指定列排序,
  -n,--numeric-sort
    compare according to string numerical value
    根据字符串中的数值排序
  -r,--reverse
    反序排列
  -c,--check check from srot input;don't sort
    排序检查,但不排序
  -o,--output=FILE  write result to FILE instead of standard output
    将结果保存至文件中而不输出
  -u,--unique   with -c,check for strict ordering; without -c,output only the first of an equal run
    与-c组合,执行严格的顺序检查;不与-c组合,仅输出第一个结果,剔除相邻重复的行,重复且相邻的无法剔除。

uniq

report or omit repeated lines记录或剔除重复行
【SYNOPSIS】
uniq [OPTION]... [INPUT [OUTPUT]]
【OPTION】
  -c,--count prefix lines by the number of occurrences行计数(重复行列一行,前面有重复次数)
  -d,--repeated  only print duplicate lines, one for each group只打印有重复的行
  -D,--all-repeated[=METHOD]
  -f,--skip-fields=N
    跳过前N个字段
  -s,--skip-chars=N
    跳过前几个字符
  -i,--ignore-case  忽略大小写
  -u,--unique   only print unique lines仅打印不重复的行
  -z,--zero-terminated  end lines with 0 bytes,not newline
  -w,--check-chars=N compare no more than N characters in lines
    第N个字符之后不做匹配

练习

1、列出当前系统上所有已经登录的用户的用户名,同一用户登录多次,只显示一次即可

who |cut -d' ' -f 1|uniq

2、取出最后登录到当前系统的用户的相关信息

cat /etc/passwd|grep "^`last -1|cut -d' ' -f1|head -1`"

3、去除当前系统上被用户当作其默认的shell的最多的那个shell

cat /etc/passwd|cut -d: -f7|sort -u|sort -rn|head -1

4、将/etc/passwd中的第三个字段的数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt中

cat /etc/passwd|sort -t':' -k3 -n|tail|tr [a-z] [A-Z] 2&>1 /tmp/maxusers.txt

5、取出当前主机的IP地址,

ifconfig eno16777736| grep  "<inet>"|cut -d' ' -f 10

6、列出/etc/下所有以.conf结尾的文件的文件名,并将其名字转换成大写后保存至/tmp/etc.conf文件中

ls /etc|grep -o ".*.conf$"|tr [a-z] [A-Z] >> /tmp/etc.conf

7、显示/var目录下一级子目录或者文件的总个数

linux里没有直接的命令来展示一个目录下的文件个数,可以通过管道将两个命令组合
查看目录下所有文件个数命令如下:
ls |wc -l
 1、ls 是查看文件夹内所有文件的命令
 2、wc -l 是统计文件行数的命令
 3、以上两个命令叠加,相当于统计文件夹下文件总数

#!/bin/sh
find /tmp/homework -maxdepth 1 -type d | while read dir; do 
count=$(find "$dir" -type f | wc -l)
echo "$dir : $count"
done

8、取出/etc/group文件中的第三个字段数值最小的10个组的名字

本文由威尼斯wns.9778官网活动发布于计算机教程,转载请注明出处:Linux基础之正则表达式,用户、组管理命令介绍威

关键词: