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

通配符(Globbing)

通配符与元字符类似,通配符主要用于文件名的匹配,而元字符则主要用在字符串的匹配上;

下面介绍几种常用的通配符:

* 表示匹配任意位数的任意字符

? 表示匹配一位任意字符

^ 表示取反,不包含的意思

[] 表示此区间内的任意一个字符

{} 表示一种集合

\ 转义字符,使具有特殊意义的字符失去原有意义

| 表示‘或',匹配一组可选的字符

元字符

元字符是用来描述字符的特殊字符。

常用的元字符及意义如下:

* 重复前面的字符0次或者多次

. 匹配任意字符一次

\+ 匹配前面的字符1次或者多次

\? 匹配前面的字符0次或者1次

\{m\} 匹配其前面的字符m次

\{m,n\} 匹配前面的字符至少m次,至多n次

^ 匹配字符在行首

$ 匹配字符在行尾

^$ 匹配空白行。空格、0不算

\< 匹配字符在词首

\> 匹配字符在词尾

\ 精准匹配string

\(xy\) xy表示一个分组

\1 模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配的字符

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

[:alpha:] 所有大小写字母

[:upper:] 所有大写字母

[:lower:] 所有小写字母

[:alnum:] 所有字母及数字

[:punct:] 所有标点符号

[:blank:] 空白键和TAB键

[:space:] 任意空白的字元,空格、tab、CR等

[:digit:] 任意数字,0-9

[:print:] 任何可以被打印出来的字符

grep

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

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  "\"|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个组的名字

cat /etc/group|sort -t':' -k 3 -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:ENCRYPTED PASSWD:DATE OF LAST CHANGE:MINIMUM PASSWD AGE: MAXIMUM PASSWD AGE:PASSWD WARNING:PASSWORD INACTIVITY:EXPIRATION

这个简单的解释下:

USERNAME:也就是用户名

ENCRYPTED PASSWD:加密的密码

DATE OF LAST CHANGE:最后修改密码的日期(天数,是以1970-1-1起算的天数)

MINIMUM PASSWD:最短可修改密码日期(天数,相对第三栏的最后修改日期)

MAXIMUM PASSWD:最长可修改密码日期

PASSWD WARNING:密码过期前的警告天数(相对第四栏的日期之前的天数)

PASSWD INACTIVITY:密码的闲置日期(密码过期之后还有一定的天数可以使用)

EXPIRATION:备注

UID

人与计算机交互,人可识别字符和数字等,但是计算机只能识别0、1这样的二进制代码,所以,UID就是分配给USERNAME相对应的计算机可识别的ID号码;UID可分为以下几类:

0:系统管理员,root的UID

1-999:系统用户,这些用户是系统后台的服务类程序的用户所用;用户也可以指定用户为系统用户

1000-2^32-1:普通用户

GID

在程序设计过程中,我们会将一部分用户之间的资料共享,而不愿让资料为外人看到,所以就有了用户组的概念,用户之间通过GID来确定用户组的范围

下面我们来介绍下设置以上及相关信息的命令:

useradd

create a new user or update default new user information

【SYNOPSIS】

useradd [options] LOGIN

useradd -D

useradd -D [options]

【OPTIONS】

-D useradd命令的部分默认参数,可修改

-c,--comment 添加用户的描述信息,finger USERNAME查看更直观

-d,--home-dir 指定用户的家目录,必须为绝对路径

-e,--expiredate 用户账号失效日期,格式默认:YYYY-MM-DD

-f,--inactive 指定用户密码是否失效(-1:永不失效,过期会强制修改密码;0:立刻失效)

-g,--gid 用户主属组,该属组必须可用

-G,--groups 用户附加属组,该属组可设置多个

-M 强制不建立家目录

-m 强制建立家目录

-r,create system user 创建系统用户

-o,--non-unique 允许创建一个已存在的UID的用户(重复的UID)

-s,--shell 指定该用户的shell环境

-u,--uid 指定用户的uid值

passwd

update user's authentication tokens

【SYNOPSIS】

passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S]

[--stdin] [username]

【OPTIONS】

--stdin 结合管道符将标准输入直接赋值给用户密码

-l,--lock 锁定指定用户

-u,--unlock 解锁指定用户

-d,--delete 快速删除用户密码

-e,--expire 使用户密码失效

-n,--minimum 密码的最短修改天数

-x,--maximum 密码的最长修改天数

-w,--waring 密码过期前的通知天数

-i,--inactive 密码过期后的闲置天数

-S,--status 用户的密码状态

groupadd

create a new group

【SYNOPSIS】

groupadd [options] group

【OPTION】

-g,--gid 创建一个指定gid的group

-K,--key 修改/etc/login.defs的值,具体可参照此文件的内容

-o,--non-unique 创建一个已有的gid的组

-p,--password 创建组密码,现在基本用不到

-r,--system-group 创建一个系统组

newgrp

log in to a new group

【SYNOPSIS】

newgrp [-] [group]

这个命令只是在用户的主属组更换的时候有用,例如USERNAME有主属组group1,附属组group2,group3;现在切换用户的主属组为group3则使用此命令

总结描述用户和组管理类命令的使用方法并完成练习

创建组distro,其GID为2016;

[root@localhost ~]# groupadd -g 2016 distro

[root@localhost ~]# tail -1 /etc/group

distro:x:2016:

创建用户mandriva,其ID为1005;基本组位distro;

[root@localhost ~]# useradd -g distro -u 1005 mandriva

[root@localhost ~]# tail -1 /etc/passwd

mandriva:x:1005:2016::/home/mandriva:/bin/bash

创建用户mageia,其ID位1100;家目录为/home/linux;

[root@localhost ~]# useradd -u 1100 -d /home/linux mageia

[root@localhost ~]# tail -1 /etc/passwd

mageia:x:1100:1100::/home/linux:/bin/bash

给用户mageia添加密码,密码为mageedu;

[root@localhost ~]# passwd mageia

Changing password for user mageia.

New password:

Retype new password:

passwd: all authentication tokens updated successfully.

删除用户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/

hadoop linux mandriva

创建用户slackware,其ID为2002,基本组为distro,附属组为peguin;

[root@localhost ~]# groupadd peguin

[root@localhost ~]# useradd -u 2002 -g distro -Gpeguin slackware

[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/tcsh slackware

[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 -aG admins slackware

[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 -n 3 -x 180 -w 3 slackware

[root@localhost ~]# tail -1 /etc/shadow

slackware:!!:16658:3:180:3:::

[root@localhost ~]#echo 'Slackware'|passwd --stdin slackware

添加用户openstack,其ID号为3003,基本组为clouds,附加组为peguin和nova;

[root@localhost ~]# groupadd clouds

[root@localhost ~]# groupadd nova

[root@localhost ~]# useradd openstack -u 3003 -g clouds -G peguin,nova

[root@localhost ~]# tail -1 /etc/passwd

openstack:x:3003:2019::/home/openstack:/bin/bash

添加系统用户mysql,要求其shell为/sbin/nologin;

[root@localhost ~]# useradd -r mysql -s /sbin/nologin

[root@localhost ~]# tail -1 /etc/passwd

mysql:x:996:994::/home/mysql:/sbin/nologin

使用echo命令,非交互为openstack添加密码

[root@localhost ~]# echo 'Openstack'|passwd --stdin openstack

Changing password for user openstack.

passwd: all authentication tokens updated successfully.

以上就是Linux基础之正则表达式,用户、组管理命令介绍,如果您有什么建议可以留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值