Linux基础之正则表达式,用户、组管理命令介绍
通配符(Globbing)
通配符与元字符类似,通配符主要用于文件名的匹配,而元字符则主要用在字符串的匹配上;
下面介绍几种常用的通配符:
*表示匹配任意位数的任意字符
?表示匹配一位任意字符
^表示取反,不包含的意思
[]表示此区间内的任意一个字符
{}表示一种集合
\转义字符,使具有特殊意义的字符失去原有意义
|表示‘或',匹配一组可选的字符
元字符
元字符是用来描述字符的特殊字符。
常用的元字符及意义如下:
*重复前面的字符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:]任何可以被打印出来的字符
grep
grep,egrep,fgrep-printlinesmatchingapattern 【SYNOPSIS】 grep[OPTIONS]PATTERN[FILE...] grep[OPTIONS][-ePATTERN|-fFILE][FILE...] 【OPTIONS】 --color=auto对匹配到的内容进行高亮显示处理 -i,--ignore-case IgnorecasedistinctionsinboththePATTERNandtheinput files.(-iisspecifiedbyPOSIX.)忽略字符大小写匹配 -v,--invert-match Invertthesenseofmatching,toselectnon-matchinglines. (-visspecifiedbyPOSIX.)显示没有匹配到的行 -o,--only-matching Printonlythematched(non-empty)partsofamatchingline, witheachsuchpartonaseparateoutputline.只显示匹配到的部分 -q,--quiet,--silent静默模式,不列举任何内容 -w,--word-regexp单词完整匹配所在的行 -d,--directories=ACTIONhowtohandledirectories;ACTIONis'read','recurse',or'skip',目录表示方式:只读、递归、跳过 -r,-r,--recursivelike--directories=recurse -c,--countprintonlyacountofmatchinglinesperFILE匹配到的文件有多少行 -B,--before-context=NUMprintNUMlinesofleadingcontext列出匹配到的前NUM行 -A,--after-context=NUMprintNUMlinesoftrailingcontext列出匹配到的后NUM行 -C,--context=NUMprintNUMlinesofoutputcontext列出匹配到的前后几行
cut
PrintselectedpartsoflinesfromeachFILEtostandardoutput列举每行被选中的部分到标准输出,也就是提取行中的某个字段 【SYNOPSIS】 cutOPTION...[FILE]... 【OPTION】 -b,--bytes=LISTselectonlythesebytes按字节分隔 -c,--characters=LISTselectonlythesecharacters按字符分隔 -d,--delimiter=DELIMuseDELIMinsteadofTABforfielddelimiter用TAB替换指定的分隔符来分区域 -f,--field=LIST分区域后,根据区域位数来列出数据 -nwith-b:don'tsplitmultibytecharacters不分隔多字节字符 【FOREXAMPLE】 [root@localhost~]#cat/etc/passwd|cut-d:-f1 root bin daemon adm lp 提取/etc/passwd文件的第一个字段内容,也就是用户名 [root@localhost~]#cat/tmp/ah2.txt|cut-nb1,2,3 平凡的 [root@localhost~]#cat/tmp/ah2.txt|cut-nb1不分割字节 平 [root@localhost~]#cat/tmp/ah2.txt|cut-b1汉字属于多字节字符 [root@localhost~]#cat/tmp/ah2.txt|cut-c1 平
sort
sortlinesoftextfiles文本文件的行排序 【SYNOPSIS】 sort[OPTION]...[FILE]... sort[OPTION]...--files0-from=F 【OPTION】 -b,--ignore-leading-blanks -f,--ignore-case foldlowercasetouppercasecharacters忽略大小写 -i,--ignore-nonprinting consideronlyprintablecharacters忽略空白 -M,--month-sort 按照三位数月份排序 -h,--human-numeric-sortcomparehumanreadablenumbers 使用人类可读的单位排序 -g,--genaral-numeric-sort 使用通用数值排序,支持科学计数 -t,--field-separator=SEP useSEPinsteadofnon-blanktoblanktransition 指定分列的分隔符 -k,--key=KEYDEF sortviaakey;KEYDEFgiveslocationandtype 指定列排序, -n,--numeric-sort compareaccordingtostringnumericalvalue 根据字符串中的数值排序 -r,--reverse 反序排列 -c,--checkcheckfromsrotinput;don'tsort 排序检查,但不排序 -o,--output=FILEwriteresulttoFILEinsteadofstandardoutput 将结果保存至文件中而不输出 -u,--uniquewith-c,checkforstrictordering;without-c,outputonlythefirstofanequalrun 与-c组合,执行严格的顺序检查;不与-c组合,仅输出第一个结果,剔除相邻重复的行,重复且相邻的无法剔除。
uniq
reportoromitrepeatedlines记录或剔除重复行 【SYNOPSIS】 uniq[OPTION]...[INPUT[OUTPUT]] 【OPTION】 -c,--countprefixlinesbythenumberofoccurrences行计数(重复行列一行,前面有重复次数) -d,--repeatedonlyprintduplicatelines,oneforeachgroup只打印有重复的行 -D,--all-repeated[=METHOD] -f,--skip-fields=N 跳过前N个字段 -s,--skip-chars=N 跳过前几个字符 -i,--ignore-case忽略大小写 -u,--uniqueonlyprintuniquelines仅打印不重复的行 -z,--zero-terminatedendlineswith0bytes,notnewline -w,--check-chars=NcomparenomorethanNcharactersinlines 第N个字符之后不做匹配
练习
1、列出当前系统上所有已经登录的用户的用户名,同一用户登录多次,只显示一次即可
who|cut-d''-f1|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地址,
ifconfigeno16777736|grep "\<inet\>"|cut-d''-f10
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-maxdepth1-typed|whilereaddir;do count=$(find"$dir"-typef|wc-l) echo"$dir:$count" done
8、取出/etc/group文件中的第三个字段数值最小的10个组的名字
cat/etc/group|sort-t':'-k3-n|head|cut-d':'-f1
9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test
cat/etc/fstab/etc/issue>>/tmp/etc.test
Linux基础知识—用户、组管理
Linux为了提高其安全性,通过创建用户及用户组并赋相应的权限来限制各用户访问不同的文件。下面我们来学习下用户及用户组的相关管理命令先来看看几个文件:
/etc/passwd
[root@localhost~]#cat/etc/passwd|head-3 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
其文件内容格式是由‘:'分隔开的字符串,其内容包括如下:USERNAME:X:UID:GID:DESCRIPTION:HOME:SHELL
/etc/shadow
[root@localhost~]#cat/etc/shadow|head-3 root:$6$1RSlswAIVbmtwWM5$WLZxHXzkL7.PvHb2ghYqbGvj3Cz4AB5sGRr33TwCX1cwSqV.syv0q1eqcF3NGUJeNNspAOt5C1rWfdsgBllB1.::0:99999:7::: bin:*:16659:0:99999:7::: daemon:*:16659:0:99999:7:::
其内容格式类似于/etc/passwd格式,只是内容不同:
USERNAME:ENCRYPTEDPASSWD:DATEOFLASTCHANGE:MINIMUMPASSWDAGE:MAXIMUMPASSWDAGE:PASSWDWARNING:PASSWORDINACTIVITY:EXPIRATION
这个简单的解释下:
USERNAME:也就是用户名 ENCRYPTEDPASSWD:加密的密码 DATEOFLASTCHANGE:最后修改密码的日期(天数,是以1970-1-1起算的天数) MINIMUMPASSWD:最短可修改密码日期(天数,相对第三栏的最后修改日期) MAXIMUMPASSWD:最长可修改密码日期 PASSWDWARNING:密码过期前的警告天数(相对第四栏的日期之前的天数) PASSWDINACTIVITY:密码的闲置日期(密码过期之后还有一定的天数可以使用) EXPIRATION:备注
UID
人与计算机交互,人可识别字符和数字等,但是计算机只能识别0、1这样的二进制代码,所以,UID就是分配给USERNAME相对应的计算机可识别的ID号码;UID可分为以下几类:
0:系统管理员,root的UID 1-999:系统用户,这些用户是系统后台的服务类程序的用户所用;用户也可以指定用户为系统用户 1000-2^32-1:普通用户
GID
在程序设计过程中,我们会将一部分用户之间的资料共享,而不愿让资料为外人看到,所以就有了用户组的概念,用户之间通过GID来确定用户组的范围
下面我们来介绍下设置以上及相关信息的命令:
useradd
createanewuserorupdatedefaultnewuserinformation 【SYNOPSIS】 useradd[options]LOGIN useradd-D useradd-D[options] 【OPTIONS】 -Duseradd命令的部分默认参数,可修改 -c,--comment添加用户的描述信息,fingerUSERNAME查看更直观 -d,--home-dir指定用户的家目录,必须为绝对路径 -e,--expiredate用户账号失效日期,格式默认:YYYY-MM-DD -f,--inactive指定用户密码是否失效(-1:永不失效,过期会强制修改密码;0:立刻失效) -g,--gid用户主属组,该属组必须可用 -G,--groups用户附加属组,该属组可设置多个 -M强制不建立家目录 -m强制建立家目录 -r,createsystemuser创建系统用户 -o,--non-unique允许创建一个已存在的UID的用户(重复的UID) -s,--shell指定该用户的shell环境 -u,--uid指定用户的uid值
passwd
updateuser'sauthenticationtokens 【SYNOPSIS】 passwd[-k][-l][-u[-f]][-d][-e][-nmindays][-xmaxdays][-wwarndays][-iinactivedays][-S] [--stdin][username] 【OPTIONS】 --stdin结合管道符将标准输入直接赋值给用户密码 -l,--lock锁定指定用户 -u,--unlock解锁指定用户 -d,--delete快速删除用户密码 -e,--expire使用户密码失效 -n,--minimum密码的最短修改天数 -x,--maximum密码的最长修改天数 -w,--waring密码过期前的通知天数 -i,--inactive密码过期后的闲置天数 -S,--status用户的密码状态
groupadd
createanewgroup 【SYNOPSIS】 groupadd[options]group 【OPTION】 -g,--gid创建一个指定gid的group -K,--key修改/etc/login.defs的值,具体可参照此文件的内容 -o,--non-unique创建一个已有的gid的组 -p,--password创建组密码,现在基本用不到 -r,--system-group创建一个系统组
newgrp
logintoanewgroup 【SYNOPSIS】 newgrp[-][group] 这个命令只是在用户的主属组更换的时候有用,例如USERNAME有主属组group1,附属组group2,group3;现在切换用户的主属组为group3则使用此命令
总结描述用户和组管理类命令的使用方法并完成练习
创建组distro,其GID为2016; [root@localhost~]#groupadd-g2016distro [root@localhost~]#tail-1/etc/group distro:x:2016: 创建用户mandriva,其ID为1005;基本组位distro; [root@localhost~]#useradd-gdistro-u1005mandriva [root@localhost~]#tail-1/etc/passwd mandriva:x:1005:2016::/home/mandriva:/bin/bash 创建用户mageia,其ID位1100;家目录为/home/linux; [root@localhost~]#useradd-u1100-d/home/linuxmageia [root@localhost~]#tail-1/etc/passwd mageia:x:1100:1100::/home/linux:/bin/bash 给用户mageia添加密码,密码为mageedu; [root@localhost~]#passwdmageia Changingpasswordforusermageia. Newpassword: Retypenewpassword: passwd:allauthenticationtokensupdatedsuccessfully. 删除用户mandriva但保留其家目录; [root@localhost~]#tail-3/etc/passwd mariadb:x:1000:1000::/home/mariadb:/sbin/nologin hadoop:x:1001:1001::/home/hadoop:/bin/bash mageia:x:1100:1100::/home/linux:/bin/bash [root@localhost~]#ls/home/ hadooplinuxmandriva 创建用户slackware,其ID为2002,基本组为distro,附属组为peguin; [root@localhost~]#groupaddpeguin [root@localhost~]#useradd-u2002-gdistro-Gpeguinslackware [root@localhost~]#tail-2/etc/passwd mageia:x:1100:1100::/home/linux:/bin/bash slackware:x:2002:2016::/home/slackware:/bin/bash [root@localhost~]#tail-2/etc/group mageia:x:1100: peguin:x:2017:slackware 修改slackware的默认shell为/bin/tcsh; [root@localhost~]#usermod-s/bin/tcshslackware [root@localhost~]#tail-2/etc/passwd mageia:x:1100:1100::/home/linux:/bin/bash slackware:x:2002:2016::/home/slackware:/bin/tcsh 为用户slackware新增附属组admins; [root@localhost~]#usermod-aGadminsslackware [root@localhost~]#tail-4/etc/group distro:x:2016: mageia:x:1100: peguin:x:2017:slackware admins:x:2018:slackware 为slackware添加密码,且要求密码最短使用期限为3天,最长为180天,警告为3天; [root@localhost~]#passwd-n3-x180-w3slackware [root@localhost~]#tail-1/etc/shadow slackware:!!:16658:3:180:3::: [root@localhost~]#echo'Slackware'|passwd--stdinslackware 添加用户openstack,其ID号为3003,基本组为clouds,附加组为peguin和nova; [root@localhost~]#groupaddclouds [root@localhost~]#groupaddnova [root@localhost~]#useraddopenstack-u3003-gclouds-Gpeguin,nova [root@localhost~]#tail-1/etc/passwd openstack:x:3003:2019::/home/openstack:/bin/bash 添加系统用户mysql,要求其shell为/sbin/nologin; [root@localhost~]#useradd-rmysql-s/sbin/nologin [root@localhost~]#tail-1/etc/passwd mysql:x:996:994::/home/mysql:/sbin/nologin 使用echo命令,非交互为openstack添加密码 [root@localhost~]#echo'Openstack'|passwd--stdinopenstack Changingpasswordforuseropenstack. passwd:allauthenticationtokensupdatedsuccessfully.
以上就是Linux基础之正则表达式,用户、组管理命令介绍,如果您有什么建议可以留言