第三周作业

1.定义一个队所有用户都生效的命令别名,例如:ftps='lftp 172.168.0.1/pub'

  alias(设置指令的别名)命令详解    

    语  法:alias[别名]=[指令名称]  如: alias rf = 'rm -f'

 说明:用户可利用alias,自定指令的别名。若仅输入alias,则可列出目前所有的别名设置。 alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名,可在/etc/profile或自己的~/.bashrc中设定指令的别名。

还有,如果你想给每一位用户都生效的别名,请把alias rf='rf -f' 一行加在/etc/bashrc最后面,bashrc是环境变量的配置文件 /etc/bashrc和~/.bashrc 区别就在于一个是设置给全系统一个是设置给单用户使用 

参  数:若不加任何参数,则列出目前所有的别名设置。

    答:  

        vim /etc/bashrc

        alias ftp='lftp 172.168.0.1/pub'

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

grep(Global search REgular expression and Print out the line)详解

grep:文本过滤工具(模式:pattern)工具                                                                                                         grep:基本正则表达式,-E                                                                                                                             egrep:扩展正则表达式,-G                                                                                                                       fgrep:不支持正则表达式

作用:文本搜索工具,根据用户指定的"模式(过滤条件)",对目标文件逐行进行匹配检查,打印匹配到的行

模式:由正则表达式的元字符及文本字符所编写的过滤条件

grep [OPTIONS] PATTERN [FILE...]                                                                                                               grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

OPTIONS: --color=auto;对匹配到的文本着色后高亮显示

    -i:ignorecase,忽略字符的大小写

    -o:仅显示匹配到的字符串本身

    -v,--invert-match:显示不能被模式匹配到的行

    -E:支持使用扩展的正则表达式元字符

    -q:--quiet,--slient:静默模式,即不输出任何信息

    -A#:after,后#行

    -B#:before,前#行

    -C#:context,前后各#行 #表示数字

基本正则表达式:  字符匹配:                                                                                                                                 .:匹配任意单个字符                                                                                                                                          []:匹配指定范围内的单个字符                                                                                                                            [^]:匹配指定范围外的任意单个字符                                                                                                              [:digit:]:匹配任意一个数字字符                                                                                                                      [:lower:]匹配任意小写字母                                                                                                                          [:upper:]匹配任意大写字母                                                                                                                          [:alpha:]匹配任意一个字母字符(包括大小写)                                                                                                [:alnum:]匹配[a-zA-Z0-9]任意一个                                                                                                              [:punct:]匹配标点符号                                                                                                                                  [:space:]匹配一个包括换行符回车等在内的所有空白符                                                                          匹配次数:用在要指定其出现的次数的数字的后面,用于限制其前面字符出现的次数                                  *:匹配器前面的字符任意次:0,1,多次 正在表达式有贪婪模式,能匹配多长匹配多长                                    .*:匹配任意长度的任意字符                                                                                                                         \?:匹配其前面的字符0次或1次;即前面的字符是可有可无的                                                                         \+:匹配前面的字符1次或多次:即前面的字符要出现至少1次                                                                     \{m\}:匹配前面字符m次                                                                                                                           \{m,n\}:匹配前面字符至少m次,至多n次                                                                                                   \{0,n\};至多n次 \{m,\}:至少m次                                                                                                     位置锚定: ^:行首锚定:用于模式的最左侧 $:行尾锚定:用于模式的最右侧 ;^PATTERN$:用于PATTERN来匹配整行 ; ^$:空白行;         ^[[:space:]]*$:空行或包含空白字符的行.          单词:非特殊字符组成的连续字符(字符串)都称为单词 \<或\b:词首锚定,用于单词模式的左侧 \>或者\b:词尾锚定,用于单词模式的右侧 \:匹配完整单词

分组及引用: \(\):将一个或多个字符捆绑在一起,当做一个整体进行处理 \(\)*ab             Notd:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:         \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符             \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符         He loves his lover. He likes his lover. She likes her liker. She loves her liker. grep "\(l..e\).*\1" lovers.txt 后向引用:引用前面的分组括号中的模式所匹配到的字符

egrep: 支持扩展的正则表达式,类似于grep文本过滤功能:grep -E egrep [OPTIONS] PATTERN [FILE...] 选项: -l,-o,-v,-q,-A,-B,-C     -G:支持基本正则表达式                                   扩展正则表达式的元字符: 字符匹配:             .:任意单个字符         []:指定范围内的任意单个字符         [^]:指定范围外的任意单个字符         次数匹配:     *:任意次,0,1或多次 ?:0次或1次,其前的字符是可有可无的     +:其前字符至少1次         {m}:其前的字符m次 {m,n}:至少m次,至多n次         {0,n}最多多少次     {m,}最少多少次         位置锚定: ^:行首锚定     $:行尾锚定     \<,\b词首锚定     \>,\b词尾锚定         分组及引用: ():分组括号内的模式匹配到的字符会被记录于正则表达式引擎内部变量中 后向引用:\1,\2,... 或:     a|b:a或者b     C|cat:C或cat     (c|C)at:cat或Cat


    grep -v "/bin/bash$" /etc/passwd

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

grep "[[:digit:]]\{2,3\}" /etc/passwd

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

grep -i "^[sS]" /proc/meminfo 

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

grep  "\b[sS]" /proc/meminfo

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

    dirname 命令读取指定路径名删除最后一个“/”(斜杠)及其后面的字符,保留其他部分,并写结果到标准输出。如果最后一个“/”后无字符,dirname 命令使用倒数第二个“/”,并忽略其后的所有字符。dirname 命令在创建路径名的时候遵从以下规则:

如果 Path 参数为“//”(双斜杠),或者参数 Path 全部由斜杠组成,将其转换为单斜杠“/”。 从指定路径删除尾部的“/”字符。 如果参数 Path 中没有剩下的“/”,则将路径转换成 . (点)。 从路径中删除尾部的所有非斜杠字符。 如果剩下的路径为“//”(双斜杠),跳到步骤 6。 删除路径尾部的斜杠字符。 如果剩下的路径为空,则转换成单斜杠“/”。例如,输入:

dirname // 结果为 /(斜杠)。输入:

dirname /a/b/ 结果为:/a。输入:

dirname a 结果为 . (点)。输入:

dirname a/b 结果为路径名 a。

echo /etc/passwd |  egrep -o "^/.+/"

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

ifconfig eth0 | grep "inet " | tr -s '  ' ':' | cut -d: -f3 注意:"inet "  inet后面有个空格

tr 替换 -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串

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

vim /etc/vimrc

set ts=4

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

#! /usr/bin/sumUid.sh

sum=0

for uname in user1 user2 user3; do

id $uname &> /dev/null && echo "$uname exists" || useradd $uname

uid=$(id -u $uname)

sum=$[$sum+$uid]

done

echo "uid sum = $sum"

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

find:通过实时遍历文件系统查找需要指定起始路径

        工作特点:

                查找速度略慢:

                精确查找:

                实时查找

        用法:

                find [OPTIONS] [查找起始路径] [查找条件] [处理动作]

                       查找起始路径:指定具体搜索目标起始路径:默认当前目录

                       查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等标准进行;默认为找出指定路径下的所有文件

                        处理动作:对符合查找条件的文件作出的操作,例如删除等操作,默认输出至标准输出

                        查找条件:

                            表达式:选项和测试

                                测试: 测试结果一般为布尔型(false/true)

                                根据文件名查找: 一下pattern支持glob风格的通配

                                    -name "pattern":区分大小写

                                    -iname "pattern":不区分大小写

                                根据文件从属关系查找:

                                        属主:-user USERNAME:  find / -user root "file"

                                        属组:-group groupname

                                        -uid UID:查找属主指定UID的所有文件

                                        -gid GID:查找属组指定的GID的所有文件:

                                        -nouser:查找没有属主的文件

                                        -nogroup:查找没有属组的文件

                                根据文件的类型查找:

                                        -type TYPE:

                                        f:普通文件

                                        d:目录文件

                                        l:符号链接文件

                                        b:块设备文件

                                        c:字符设备文件

                                        p:管道文件

                                        s:套接字文件

                            组合测试:

                                    与:-a,默认组合逻辑,即多个条件同时满足

                                    或:-o,or,多个条件,满足其一即是符合条件

                                    非:-not,!表示

                             根据文件的大小查找: -size [+|-]#单位 单位常w位K,M,G                                      #UNIT:(#-1,#]这个区间的都会被查出来     -#UNIT:[0,#-1]      +#UNIT:(#,00) 00表示无穷大       根据时间戳查找: 以天为单位: -atime [+|-]  #:访问时间    #:[#,#-1) 表示过去第#天,             -#:[0,#)表示#天内  +#:[#,00)   find /etc/ -atime +7 -type f -ls查找访问七天前的文件             -mtime:改动时间     -ctime:最后一次对文件属性改变的时间,包括权限,大小,属性等等       以分钟为单位: -amin -min -cmin       根据权限查找: -perm [/-]mode: mode:精确权限匹配     find /etc/ -perm 666 查找权限位666的文件    /mode:任何一类用户(ugo)的权限中的任何一位(r,w,x)如何条件即满足 find /etc -perm /666 9位权限之间存在"或关系" -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足 9位权限之间存在与关系           处理动作: -print:输出至标准输出,默认的动作 -ls:类似于对查找到的文件执行ls -l命令,输出文件的详细信息              -delete:删除查找到的文件                -fls:/path/somefile:把查找到的所有文件的长格式信息保存至指定文件中                     -ok COMMAND {} \:对查找到的每个文件执行由COMMAND表示的命令:每次操作都由用户进行确认             -exec COMMAND {}\:对查找的每个文件执行由COMMAND表示的命令 find /etc/ -perm /002 -exec mv {} {}.dengerous \; 表示查找/etc下有w权限的other用户的文件对其进行改名操作,第一个{}表示查找的文件 注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令 但是有些命令不能接受过长的参数,此时命令执行会失败,另一种方式可规避此问题 find | xargs COMMAND


1.查找/var/目录下属主为root,且属组为mall的所有文件或目录

find /var/ -user root -group mall -ls

2.查找/usr目录下不属于root,bin或hadoop的所有文件或目录,用两种方法

find /usr -not  \( -user root -o -user bin -o -user hadoop \) -ls

find /usr -not -user root -a -not -user bin -a -not -user hadoop

3.查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录

find /etc/ -mtime -7 -not \( -user root -o -user hadoop \) -ls

4.查找当前系统是哪个没有属主或属组,且最近一周内曾被访问过的文件或目录

find / \( -nouser -o -nogroup \)  -atime -7 -ls

5.查找/etc目录下大于1M且类型为普通文件的所有文件

find /etc -size +1M -type f -ls

6.查找/etc目录下所有用户都没有写权限的文件

find /etc -not -perm /222 -type f -ls

7.查找/etc目录下至少有一类用户没有执行权限的文件

find /etc -not -perm -111 -type f -ls

8.查找/etc/init.d/目录下,所有用户都有执行权限,且其他用户有写权限的所有文件

find /etc/init.d -113 -type f -ls

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