第三周作业

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:词尾锚定,用于单词模式的右侧;
\:匹配完整单词;

基本正则表达式元字符:
字符匹配:
. :匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符;
[: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:词尾锚定,用于单词模式的右侧;
    \:匹配完整单词;

`~]# 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\}\>"

第三周作业_第1张图片
image.png

或者

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

第三周作业_第2张图片
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编号的文件或目录;
-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”参数类似,差别在于它针对符号连接检查。

你可能感兴趣的:(第三周作业)