第三周作业

1、定义一个对所有用户都生效的命令别名,例如:lftps='lftp 172.168.0.1/pub'
2、显示/etc/passwd文件中不以/bin/bash结尾的行
3、找出/etc/passwd文件中,包含二位数字或者三位数的行。
4、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式实现。
5、使用echo输出一个绝对路径,使用egrep取出路径名,类型执行dirname /etc/passwd 的结果。
6、找出ifconfig中的ip地址。要求结果只显示IP地址。
7、vim定制自动缩进四个字符。
8、编写脚本,实现自动添加三个用户,并计算这三个用户的uid之和。
9、find用法以及常用用法的实例演示。

壹、定义一个对所有用户都生效的命令别名,例如:lftps='lftp 172.168.0.1/pub'

可通过修改bash的配置文件实现所需功能:

bash的配置文件分为两类:
①profile类:为交互式登录的shell进程提供配置
②bashrc类:为非交互式登录的shell进程提供配置
------登录类型:
--①交互式登录shell进程:
直接通过某终端输入账号和密码后登录打开的shell进程;
使用su命令:su - USERNAME, 或者使用
su -l USERNAME执行的登录切换;

--②非交互式登录shell进程:
su USERNAME执行的登录切换;
图形界面下打开的终端;
运行脚本

profile类:

    全局:对所有用户都生效;
                /etc/profile 
                /etc/profile.d/*.sh     
    用户个人:仅对当前用户有效;
                ~/.bash_profile
                
    功用:
            1、用于定义环境变量;
            2、运行命令或脚本;      

bashrc类:

    全局:
        /etc/bashrc 
    用户个人:
            ~/.bashrc
    功用:
        1、定义本地变量;
        2、定义命令别名;

注意:仅管理员可修改全局配置文件;

 让通过配置文件定义的特性立即生效:
(1) 通过命令行重复定义一次;
(2) 让shell进程重读配置文件;
    ~]# source /PATH/FROM/CONF_FILE
    ~]# .  /PATH/FROM/CONF_FILE

-以上需求可以按一下操作:
~]# vim /etc/bashrc   
   
编辑/etc/bashrc文件,在最后一行追加内容   alias lftps='lftp 172.168.0.1/pub',保存后执行 source /etc/bashrc


贰、显示/etc/passwd文件中不以/bin/bash结尾的行

^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;
                    
单词:非特殊字符组成的连续字符(字符串)都称为单词;
\< 或 \b:词首锚定,用于单词模式的左侧;
\> 或 \b:词尾锚定,用于单词模式的右侧;
\<PATTERN\>:匹配完整单词;

基本正则表达式元字符:
字符匹配:
. :匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符;
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

'egrep':
        
        支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E

分组及引用:
    ():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;
    后向引用:\1, \2, ...
        或:
        a|b:a或者b;
        C|cat:C或cat
        (c|C)at:cat或Cat

grep命令
全面搜索正则表达式并把行打印出来

【选项】


-a 不要忽略二进制数据。
-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-c 计算符合范本样式的列数。
-C<显示列数>或-<显示列数>  除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> 指定字符串作为查找文件内容的范本样式。
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F 将范本样式视为固定字符串的列表。
-G 将范本样式视为普通的表示法来使用。
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i 忽略字符大小写的差别。
-l 列出文件内容符合指定的范本样式的文件名称。
-L 列出文件内容不符合指定的范本样式的文件名称。
-n 在显示符合范本样式的那一列之前,标示出该列的编号。
-q 不显示任何信息。
-R/-r 此参数的效果和指定“-d recurse”参数相同。
-s 不显示错误信息。
-v 反转查找。
-w 只显示全字符合的列。
-x 只显示全列符合的列。
-y 此参数效果跟“-i”相同。
-o 只输出文件中匹配到的部分。

以上需求可用一下方法实现:
'
~]# grep -v "/bin/bash$" /etc/passwd
'
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin


叁、找出/etc/passwd文件中,包含二位数字或者三位数的行。

匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;
      *:匹配其前面的字符任意次;0,1,多次;
        例如:grep "x\+y"
                abxy
                aby
                xxxxxy
                yab
      .*:匹配任意长度的任意字符
      \?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
      \+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;
      \{m\}:匹配其前面的字符m次;
            \{m,n\}:匹配其前面的字符至少m次,至多n次;
            \{0,n\}:至多n次
            \{m,\}:至少m次
                    
位置锚定:
    ^:行首锚定;用于模式的最左侧;
    $:行尾锚定;用于模式的最右侧;
    ^PATTERN$:用于PATTERN来匹配整行;
    ^$:空白行;
    ^[[:space:]]*$:空行或包含空白字符的行;
                    
单词:非特殊字符组成的连续字符(字符串)都称为单词;
    \< 或 \b:词首锚定,用于单词模式的左侧;
    \> 或 \b:词尾锚定,用于单词模式的右侧;
    \<PATTERN\>:匹配完整单词;

`~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
或者
~]# grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin

肆、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式实现。

 
~]# grep "^[Ss]" /proc/meminfo

~]# grep -i "^s" /proc/meminfo

~]# grep -E "^(S|s)" /proc/meminfo



伍、使用echo输出一个绝对路径,使用egrep取出路径名,类型执行dirname /etc/passwd 的结果。

]# echo /etc/passwd | egrep -o '^/.+/'


陆、找出ifconfig中的ip地址。要求结果只显示IP地址。

ifconfig | grep -o "\<[1-2]\{,1\}[0-9]\{1,2\}\.[1-2]\{,1\}[0-9]\{1,2\}\.[1-2]\{,1\}[0-9]\{1,2\}\.[1-2]\{,1\}[0-9]\{1,2\}\>"

image.png

或者

~]# ifconfig | grep -o "\<[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\>"

image.png


柒、vim定制自动缩进四个字符。

打开设置文件:
vim /etc/vim/vimrc
启用:set ai
添加一些设置
set expandtab
set tabstop=4


捌、编写脚本,实现自动添加三个用户,并计算这三个用户的uid之和。

#! /bin/bash

# creat 3users and sum of 3 users uid 
echo "Please enter 3 names for the new 3 users:"
read -p "the first user's name: " user1
read -p "the second user's name: " user2
read -p "the third user's name: " user3
echo "==================================================="
useradd $user1
echo "created user $user1"

useradd $user2
echo "created user $user2"

useradd $user3
echo "created user $user3"

echo "==================================================="
u1=`cat /etc/passwd |grep $user1 | cut -f3 -d ":"`
u2=`cat /etc/passwd |grep $user2 | cut -f3 -d ":"`
u3=`cat /etc/passwd |grep $user3 | cut -f3 -d ":"`

echo "$user1's uid is $u1"
echo "$user2's uid is $u2"
echo "$user3's uid is $u3"


echo "==================================================="
val=`expr $u1 + $u2 + $u3`

echo "The sum of 3 users uid is $val"



玖、find用法以及常用用法的实例演示。

find

用来在指定目录下查找文件

[语法]

find(选项)(参数)

[选项]

-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-false:将find指令的回传值皆设为False;
-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或——help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true:将find指令的回传值皆设为True;
-typ<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version或——version:显示版本信息;
-xdev:将范围局限在先行的文件系统中;
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • 01 “沈伊莱,班主任来了”沈伊莱眼刚眯上,就被坐在前面的曹俊用手戳醒了,听到他这句“班主任来了”,吓的她马上从书...
    朵壹阅读 376评论 0 1
  • 今天喆喆早早起床了,我在下面储藏室里烙饼,喆喆下来说妈妈我饿了,然后拿着两根火腿肠让我在电饼铛里给她煎煎吃,这小家...
    刘欣喆阅读 248评论 0 0
  • 昨天上午老师给我们发校服,还给我们新袜子,那个袜子很长,老师还说, 要买白色的鞋子,中午妈妈带我去买鞋子,买鞋子的...
    纪承昊阅读 92评论 0 0
  • 今天晚上,我表姐和他的朋友还有他的邻居。来找我玩。想知道我们怎么玩么?就让我给你讲讲吧! 我们去...
    8d80ca5a9e93阅读 100评论 0 1