博客作业1

一、linux 常用文件管理命令有哪些?其常用使用方法及相关实例演示

1、文件操作命令

(1).pwd

      功能:显示当前目录

      实例:

    #pwd

(2).cd

          功能:改变当前目录

          实例:

           # cd  /usr/sbin (进入/usr/sbin)

            # cd   ../u1 (进入父目录下面的u1目录)

            # cd   ..(返回父目录)

            #cd    (进入用户主目录)

            #cd  ~ (进入用户主目录)

(3).mkdir 

          功能:建立目录

          格式:mkdir  [参数]  <目录名>

          参数: -m  属性值:指定目录的属性 (r、w、x或4、2、1)

                 -p        :循环建立目录

          实例:

       # mkdir   d1                 (在当前目录下建立d1子目录)

        # mkdir  -p /d1/d2  /d1/d3  /d1/d4(同时在/d1目录中建立d2,d3,d4子目录)

        # mkdir  –p  /d1/d2           (在/d1目录中建立d2子目录,先建d1)

(4).rmdir

              功能:删除空目录

              格式:rmdir  [参数]  <目录名>

              参数:-p:循环删除 

              实例:

            # rmdir  a1        (删除当前目录下的a1子目录)

            # rmdir  /etc/a2     (删除/etc下a2子目录)

            # rmdir  -p  /a1/a2  

(5).ls

               功能:显示目录中的文件及子目录的名称

               格式:ls     [参数]  [文件名]

               参数:-a:   显示所有文件(包括隐含文件,以“.”开头的文件为隐含文件)

                     -l:    以长格式显示文件名及目录名(显示文件的详细信息)

                     -F:    显示文件名,同时显示类型

                     -R:   显示目录中所有文件及子目录中的文件结构

                     -t:    按照修改时间排序显示

                     -s:    显示文件的大小,以block为单位

                     -S:    按照文件大小排序显示  

                     -m:   分列显示文件名

               实例:

                 # ls                 

                 # ls /bin/             

                 # ls grub.conf         查找当目录下是否存在grub.conf

                 # ls   -l             

                 # ls  –help          显示ls的详细的帮助信息

                 # ls  -a

(6).cp 

              功能:复制文件

              格式:cp   [参数]   <源路径>  <目标路径>  

              参数:-f:文件在目标路径中存在时,则直接覆盖

              -i:文件在目标路径中存在时, 提示是否覆盖

              -r:复制指定中所有内容和结构

              -b:生成覆盖文件的备份

              -a:保持文件原有属性

               实例:

            # cp  /etc/*   /a1/      把/etc下的所有文件复制到a1目录中

            #cp  /bin/ls   /dir1      /bin/ls文件到/目录取名为dir1

            #cp  -f  /sbin/*  /exe/   直接将/sbin下的所有文件到/exe目录中

           #cp  -r  /soft  /abc/ 

(7).rm 

          功能:删除文件

          格式:rm  [参数]   <文件名>

          参数:-f:                    不提示确认删除

                -i:                    提示确认删除

                -r:                    递归删除

          实例:

             # rm  /m1/f1          删除/m1目录下的f1

            # rm  –f   /m1/*       删除m1目录下的所有文件

            #rm  -rf  /m1        强制删除一个目录

(8).mv

          功能:移动文件、重命名文件

          格式:mv [参数] <源路径>  <目标路径>

          参数:-i:     如果存在文件重名则提示是否覆盖

                -b:     建立覆盖文件的备份

                -f:     如果存在文件重名则直接覆盖

    

          实例: 

            # mv   /m1/f1     /m2/   移动/m1目录下f1文件到/m2目录下

            # mv    f1   f2          将当前目录下的f1文件改名f2

            # mv   -f  /d1/*  /d2/    移动/d1中的所有文件到/d2目录中

(9).file

          功能:检测文件类型

          格式:file  [参数]  <文件名>

          参数: -z:检测压缩包文件

          -L:跟随符号链接

          实例:

           # file    /etc/lilo.conf

          #file    -z  1.gz

(10).显示文本文件内容

          1) cat

               格式:cat  [参数]  <文件名>

               参数:-n   显示行号

                     -b   显示行号,但空白行不显示行号

            实例:

                #cat   /etc/inittab

                #cat  -n  /d1/f1  /d1/f2 >txt1

         2)more

                 格式:more   [参数] <文件名>

                 实例:

                # ls|more                 将ls的显示结果输入到more中

                # more   /etc/rc.d/rc    显示/etc/rc.d/rc文件的内容

                   说明:可以用回车键向下换行,空格键向下换页

                    按Q键退出more

       3 )less

           实例:

               #ls|less                    将ls的显示结果输入到less中

               #less  /var/named/localhost.zore

                    说明:Page up /Page Down键上下滚动、Q键退出

      4)head、tail

                   实例: 

                  # head  -20     /a1    显示a1中前20行

                  # tail   -20     /a1   显示中a1后20行

      5)cut

                功能:显示文件中指定数目的字符、字节或字段

                格式:#cut  参数  数字  文件

                参数:-c   以字符为单位

                      -b  以字节为单位

                      -f   以字段为单位

                      -d  指定分隔符

                实例:

                     #cut  -c 3  /etc/passwd

                     #cut  -f  1-6  -d :/etc/passwd

                     #cut  -b  -8  /etc/passwd

(11).搜索文件

      1) find

               格式:find   查找路径   查找条件

               条件:-name “文件名”:查找指定名称文件

                     -lname “文件名”:查找指定文件所有的接文件

                     -user  用户名:查找指定用户拥有的文件

                     -group 组名:查找指定组拥有的文件

                     -links  n:查找拥有n个链接的文件

                     -mtime n:查找在N天前被修改过的文件

                     -atime  n:查找在N天前被访问过的文件

                     -type  d/f/b/l/p:查找指定类型的文件

                     -s n[bcwkMG]:查找指定大小的文件

                     -empty:查找为空的文件

                     -perm  mode:查找指定属性的文件

                     -exec command {}\; 查找指定的文件并执行指定的命令

                     -newer 文件名  查找比指定文件新的文件

               实例:

                 # find   /   -name   “named*”

                # find   /   -user   root

                #find   ./  -type d -exec chmod 755 {} \;

                #find . –empty

                #find . -perm 644

                #find . -newer oldfile  ! -newer newfile

          2) whereis

                 功能:查找二进制可执行、手册及源文件

                 实例:# whereis   umount

          3) locate

                 功能:在资料库中查找指定的文件

                 格式:#locate [参数] 文件名

                 参数:

                    – u /-U  建立资料库,-u 会由根目录开始,-U 则可以指定开始位置

                    -e  <目录1…>  排除指定目录在寻找范围之外

                    -l  <0/1>    设置安全级别,1启用安全模式,0关闭安全模式

                    -f  <文件类型> 在资料库中排除特定类型文件排除在外

                    -n 至多显示n个输出

                    -r 使用正规运算式做寻找的条件

                    -o 指定资料库存的名称。 

                    -d 指定资料库的路径

               实例:

                   #locate -u 

                   #locate chdrv 

                   #locate -n 100 a.out 

         4) which

               功能:查找指定命令文件

               格式:#which  文件名

               实例:#which  mount

(12).grep

               功能:在文本文件中查找匹配的字符串

               格式:#grep  [参数] “字符串”  文件

               参数: -?   同时显示匹配行上下的?行

                    -b   在匹配行前面打印该行所在的块号

                    -c   只打印匹配的行数,不显示匹配的内容

                    -f File 从文件中提取模板,空文件中包含0个模板,所以什么都不匹配

                    -h   当搜索多个文件时,不显示匹配文件名前缀

                    -I   忽略大小写差别

                    -q   取消显示,只返回退出状态。0则表示找到了匹配的行

                    -l   打印匹配模板的文件清单

                    -L   打印不匹配模板的文件清单

                    -n   在匹配的行前面打印行号

                    -s   不显示关于不存在或者无法读取文件的错误信息

                    -v   反检索,只显示不匹配的行

                    -w   如果被\<和\>引用,就把表达式做为一个单词搜索

              正则表达式元字符:

                              ^ 

                                锚定行的开始 如:'^grep'匹配所有以grep开头的行

                              $ 

                                锚定行的结束 如:'grep$'匹配所有以grep结尾的行

                              . 

                                匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p

                              * 

                                匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符

                             [] 

                                匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep 

                             [^] 

                                匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行

                            \(..\) 

                                标记匹配字符,如'\(love\)',love被标记为1

                            \< 

                              锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行 

                            \> 

                              锚定单词的结束,如:'grep\>'匹配包含以grep结尾的单词的行 

                           x\{m\} 

                              重复字符x,m次,如:'0\{5\}'匹配包含5个o的行

                           x\{m,\} 

                              重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行

                           x\{m,n\} 

                              重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5–10个o的行

                           \w 

                              匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p

                           \W 

                              \w的反置形式,匹配一个或多个非单词字符,如点号句号等

                           \b 

                              单词锁定符,如: '\bgrepb\'只匹配grep

                            + 

                            匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

                            ? 

                             匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。

                           a|b|c 

                              匹配a或b或c。如:grep|sed匹配grep或sed

                           () 

                             分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

                          x{m},x{m,},x{m,n} 

                             作用同x\{m\},x\{m,\},x\{m,n\}

                 实例:

                  # ls -l | grep '^a' 

                         通过管道过滤ls -l输出的内容,只显示以a开头的行。

                  # grep 'test' d* 

                         显示所有以d开头的文件中包含test的行。

                  # grep 'test' aa bb cc 

                         显示在aa,bb,cc文件中匹配test的行。

                  # grep '[a-z]\{5\}' aa 

                          显示所有包含每个字符串有5个连续小写字符的字符串的行。

                  # grep 'w\(es\)t.*\1' aa 

                          如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。

   (13).文件压缩操作

               1)gzip(*.gz)

                     功能:对单个文件压缩

                     格式:gzip  [参数]  压缩(解压缩)文件名

                     参数:  -d:用于解压缩

                             -t:检验压缩文件是否损坏

                             -l:显示压缩文件压缩比例

                             -r :递归式地查找指定目录并压缩其中的所有文件或者是解压缩

                            -num: 用指定的数字 num 调整压缩的速度,-1 或 –fast 表示最快压缩方法(低压缩比)    

                     实例:

                       # gzip    /a1

                       # gzip    -d  /a1.gz

                       # gzip    -dv   /*.gz

                       #gzip     -r  /www

               2)zip

                       功能:压缩文件

                       格式:#zip  [参数]  文件或目录名

                                -d   从压缩文件内删除指定的文件。

                                -F   尝试修复已损坏的压缩文件。

                                -t<mmddyy>   把压缩文件的日期设成指定的日期。

                                -u   更换较新的文件到压缩文件内。

                                -v   显示指令执行过程或显示版本信息。

                                -z   替压缩文件加上注释。

                                -<压缩效率>   压缩效率是一个介于1-9的数值。

                                -P 口令    利用指定口令加密压缩包

                                -m       添加文件到ZIP压缩包中

                        实例:

                              #zip  abc.zip  f1   f2  f3

                              #zip  -r –P 123  soft.zip  /soft/

                              #zip  -d  soft.zip  soft/wb

                              #zip  –u  soft.zip   abc.log

                              #zip  -m  soft.zip   install.log

                3)unzip

                      功能: 解压缩zip文件

                      格式: #unzip [.zip文件]

                           -l  显示压缩文件内所包含的文件。

                           -P   <密码>   

                           -d   <目录>指定文件解压缩后所要存储的目录。

                      实例:

                            #unzip  f1.zip  -d  /f1

                            #unzip –l  f1.zip

                4)tar(*.tar)

                        功能:为文件或目录创建备份 

                        格式:tar  [参数]   文件/目录名

                        参数:-t:列出压缩包中的文件(*.tar)

                              -x:解压缩(*.tar)

                               -z:使用gzip的压缩文件

                               -c:创建压缩包

                               -f:指定文件名

                               -j:使用bzip的压缩文件

                               -v:显示操作信息

                               -C:指定解压路径(默认路径为当前路径)

                               -r: 向压缩包添加文件

                               -u:更新压缩包中的文件

                               -k:还原文件过程中,遇到相同文件不覆盖

                               -m:还原文件过程中,修改文件的时间为当前时间

                       实例:

                           # tar -cvf  all.tar *.jpg

                           # tar -uvf all.tar logo.gif

                           # tar -rf all.tar *.gif

                           # tar  -cvfz    etc.tar.gz   /etc

                           #tar  -xvf  all.tar  

                           # tar  -xzvf    etc.tar.gz  -C /soft

                              注:除以上的压缩工具外,还有compress(uncompress)、bzip2(unbzip2)

     (14).ln

                   功能:建立链接文件

                   格式:ln  [参数]  <源文件>  <链接文件>

                   参数:-s:建立软链接文件

                         -i:提示是否覆盖目标文件

                         -f:直接覆盖已存在的目标文件

                   实例:

                   # ln  /etc/abc  /abc

                   # ln  -s  /a1     /etc/a1

     (15). touch

                   功能:创建空文件或修改文件的时间

                  格式:#touch  [参数]  文件名

                   参数:-r  修改文件的时间为指定文件的日期时间

                         -d <yymmdd>  指定文件日期时间为yymmdd

                         -t <yymmddhhmm> 指定文件日期时间为yymmddhhmm

                         -c  不创建指定的文件

                  实例:

                       #touch   /f1  /f2

                       #touch  -r  /f1  /f2

                       #touch -d "6:03pm 05/06/2000" file 

   (16). sort

                   功能:对文本文件进行排序

                   格式:sort  [参数]  [文件]

                   参数:-o  文件名  将排序结果保存到指定文件中

                         -u   去除重复行

                   实例:

                         #sort  /etc/passwd

                         #sort  –o  /etc/oldpass  /etc/passwd

  (17). paste

                 功能:合并文本文件

                 实例:#paste  f1  f2>f3

  (18). cmp

                功能:比较两个文件是否有差异

                格式:#cmp  [参数]  文件1 文件2

                参数:-l   显示不同的字节位置

                      -s   不显示不同之处,只显示返回状态

                实例:#cmp  f1  f2

                      #cmp  -l  f1  f2

   (19). diff

                功能:显示文件的不同之处

                格式:#diff  [参数]  文件1  文件2

                参数:-c   显示全文,并标出不同之处

                      -u   合并显示,并标出不同之处

                实例:#diff  f1   f2

                      #diff  -c  f1  f2

   (20). wc

                功能:统计文件中的行数、单词数、字符数

                格式:#wc  [参数]  文件名

                参数:-c  统计字符数

                      -w  统计单词数

                      -l  统计行数

                实例:#wc  /etc/passwd

                      #wc  -c  /etc/passwd 

                  注:1.命令自动补齐

                      按TAB键进行自动扩充

2.命令历史记录

   Linux系统采用.history文件存放命令历史记录,以下是与历史记录相关的操作:

    !  n:调用正序第n个命令

  !!  :调用上一条命令

  history:查看命令历史记录

    history  -c:清除历史记录

    history  -w 文件名:保存历史记录到指定的文件中

3.命令重定向

   “>”:将命令输出结果保存到指定文件中,如果文件不存在先建立,存在就覆盖

   “>>”:将命令输出结果保存到指定文件中,如果文件不在存先建立,存在就覆盖

   “<”:把文件内容输入指定命令

   “<<”:将一对分隔之间的正文输入给指定命令

       实例:#ls > abc.txt

             #ls /etc >>abc.txt

             #wc < /etc/passwd

             #wc <<!

4.命令管道(前一个命令的输出作为后一个命令的输入)

        实例:ls|more

5.命令替换(取指定命令的结果)

        实例:# cat   `ls abc`

6.多个命令执行顺序

   “;”:顺序执行多个命令

   “||”:前后命令的执行存在“逻辑或”关系,只有||前面的命令执行失败后,它后面的命令才被执行

   “&&”:前后命令的执行存在“逻辑与”关系,只有&&前面的命令执行成功后,它后面的命令才被执

   实例:# ls  /etc;cd  /etc

         #ls /d1/f1||touch  f1

7.命令别名

   实例:#alias  [别名=’命令’]

8.vi编辑器的使用

   (1).vi 定义

          Vi 是Unix/Linux系统中的一种文本编辑软件

    (2).vi三种模式

      命令模式:删除字符、排版

      插入模式:插入字符、删除、修改字符

     最后行模式:通过命令操作vi软件

               进入vi

 

     (3).vi的使用

         1)启动VI

             # vi  [参数]   [文件名]

          2)VI常用命令

              移动光标

                 左移一个字符:按h

                 右移一个字符:按l

                 下移一行:    按j

                 上移一行:    按k

                 移至行首:    按^

                 移至行尾:    按$

                移至文件顶部:按H

                 移至文件尾部:按L

                 移至文件中部:按M

                 前翻一屏:    按ctrl+f

                后翻一屏:    按ctrl+b

               前翻半屏:    按ctrl+d

               后翻半屏:    按ctrl+u

               移动光标到指定行:输入:数字

             插入文本

               在光标右边插入文本:          按a

               在一行的结尾处添加文本:      按A

               光标左边插入文本:            按i

               在行首插入文本:              按I

               在光标所在行的下一行插入新行:按o

                在光标所在行的上一行插入新行:按O

           撤消和重复操作

               撤消上一个操作:按u

                撤消光标所在行的更改:按U

           重复操作:输入”.”

           删除文本

                  删除当前字符:    按x

                 删除一词:        按dw

                  删除一行:        按dd(剪切)

                 删除行的部分内容:按D(删除光标右的内容)或按d0(删除光标左的内容)

                 删除到文件的结尾:按dG

                 dL :删除直到屏幕上最后一行的内容 

                 dH :删除直到屏幕上第一行的内容 

                 dG :删除直到工作缓存区结尾的内容(文尾)

                 d1G :删除直到工作缓存区开始的内容 (文头

                 :n,md: 从第n行开始删除m行

          复制和粘贴

               复制一行内容:按yy

               粘贴:   按p

        查找和替换命令 

                /string:向前查找字符串

                ?string:向后查找字符串

                      n:继续上一次查找

               shift+n:以与上一次相反的方向查找

                   :%s/字符串1/字符串2/g:在全文中替换字符串1为字符串2

               n,ms/字符串1/字符串2/g:替换n到m行中的字符串1为字符串2

       保存和退出命令

           :w:写缓冲区

           :w 文件名:把缓冲区写入指定文件

           :wq:保存退出

           :q!:不保存退出

           :wq!:保存退出,对拥有者忽略只读权限

           E!:取消自上次保存以来所做的修改

            ZZ:保存退出

        修改文本命令

            cl :更改当前字符

            cw :修改到某个单词的结尾位置

            c3w :修改到第三个单词的结尾位置

            cb :修改到某个单词的开始位置

            c0 :修改到某行的结尾位置

             c):修改到某个语句的结尾位置

           c4):修改到第四个语句的结尾位置 

            c} :修改到某个段落的结尾位置 

           c2{ :修改到当前段落起始位置之前的第2个段落位置 

           ctc :修改当前行直到下一个字符c所出现位置之间的内容

           C :修改到某一行的结尾

           cc :修改当前行

      会话定制命令

          :set: 显示vi变量

          :set all:显示所有可能的vi变量和它们当前的值

          :set nu:显示行号

          :set nonu:隐藏行号

          :set showmode:显示当前操作模式

          :set noshowmode:隐藏当前操作模式

           :set ai:自动对齐

          :set dir=目录:设置缓冲区的位置

                    注:-可以vi设置信息保存在用户主目录的.exrc文件中

     (4 ).VI的高级应用

    1)编辑多个文件

             #vi  [-o]文件1  文件2 ………

                 -o:同一窗口打开多个文件

                   :next:编辑下一个文件

                   :prev:编辑上一个文件

                   :args:显示所有打开的文件名称

                   Ctrl+ww :切换窗口

                   :e  文件名:读入另一文件

     2)高级复制

                  :start,end  cp  dest:将start到end行的内容复制到dest行以下

                   :start,end  m  dest:将start到end行的内容移动到dest行以下

                  nY:将从光标所在行开始的n行内容暂存

               :[m],[n]w<文件名>:把m到n内容另存到指定文件中

    3)其它高级应用

          :X 输入口令:以口令加密保存

          :ctrl+s:锁定VI(ctrl+q解锁)

          :r !<命令>:执行指定命令,并将命令结果插入到当前文件中

          :J:合并上下两行

9. 定义一个目录补全

        通过选项 -d,可以定义一个仅包含目录名的补全参数。在下面的例子中,为 ls 命令定义了补全。

              $ ls

               countfiles.sh dir1/ dir2/ dir3/

              $ complete -d ls

              $ ls[TAB][TAB]

                dir1/ dir2/ dir3/

               如上,连按下 TAB 仅会显示目录名。

10. 定义一个后台任务名补全

补全功能也能够以任务名作为补全参数。选项 -j 可以定义任务名作为传递给命令的参数,如下:

       $ jobs

        [1]-Stoppedcat

        [2]+Stoppedsed'p'

       $ complete -j ./list_job_attrib.sh

       $ ./list_job_attrib.sh [TAB][TAB]

     catsed

        关于后台任务,你可以参考 Linux 后台任务中的例子了解如何管理后台任务。

11. 带有前缀和后缀的补全

补全功能可以为实际的补全内容定义前缀和后缀。在下面的例子中,为 list_job_attrib.sh 定义了补全内容的前缀和后缀。

      $ jobs

         [1]+Stoppedcat

       $ complete -P '">'-S '<"'./list_job_attrib.sh

       $ ./list_job_attrib.sh [TAB][TAB]

       $ ./list_job_attrib.sh ">cat<"

12. 带有排除的文件名和目录名补全

假如脚本运行完成后,输出目录如下:

     $ cd output/

     $ ls

       all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt

      parser_mod.tmp extract.o

如上,如果你想要 ls 命令的补全忽略 .tmp 和 .o 文件:

      $ export FIGNORE='.tmp:.o'

      $ complete -f -d ls

       $ cd output

       $ ls[TAB][TAB]

           all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt

       FIGNORE 是一个环境变量,它包含了自动补全所需要排除的文件名后缀。

13. 通过 IFS 变量分割字符串得到补全值

    可以通过 -W 选项定义补全值列表,然后通过 IFS 环境变量进行切分。切分结果会展开变量并作为补全显示。

    $ export IFS=" "

    $ complete -W "bubble quick"./sort_numbers.sh

    $ ./sort_numbers.sh [TAB][TAB]

     bubble quick

  如上所述,字符串通过 IFS 分隔符进行切分后,内嵌的变量会被展开为变量值,所以可以如下使用变量:

    $ echo $SORT_TYPE1

      bubble

    $ echo $SORT_TYPE2

       quick

    $ complete -W "$SORT_TYPE1 $SORT_TYPE2"./sort_numbers.sh

    $ ./sort_numbers.sh [TAB][TAB]

      bubble quick

14. 写个函数来生成补全

    你可以引入一个函数来定义补全。使用 -F 选项将函数名传给 complete 命令,执行函数生成补全内容。例如,函数如下:

  _parser_options()

    {

        local curr_arg;

         curr_arg=${COMP_WORDS[COMP_CWORD]}

        COMPREPLY=( $(compgen -W '-i –incoming -o –outgoing -m –missed'– $curr_arg ));

     }

  在上述函数中:

     COMPREPLY : 该数组控制连按下 TAB 后显示的结果

      COMP_WORDS : 该数组包含命令行输入的单词

     COMP_CWORD : COMP_WORDS 数组的索引,使用它来区分命令行可以访问的单词位置

      compgen : -W 基于 $current_arg 提供可能的补全及其参数

      该函数放在 parser_option 文件中,并通过 source 命令引入:

 $ source parser_option

 将该函数和你的 parser.pl 脚本关联起来:

   $ complete -F _parser_options ./parser.pl

   $ ./parser.pl [TAB][TAB]

    -i –incoming -o –outgoing -m –missed

     如上,parser.pl 的选项是由函数 _parser_options() 生成的。

    提示: 查看/etc/bash_completion 来了解更多的可编程补全函数。

15. 当第一个规则没有生成结果时,就使用第二个

    如果定义的补全规则没有生成匹配时,可以使用 -o 选项生成补全。

     $ complete -F _count_files -o dirnames ./countfiles.sh

     如上,为 ./countfiles.sh 定义了 _count_files 补全函数。 如果 the _count_files() 函数没有生成任何匹配的话,就会触发目录补全。

     $ ls

         countfiles.sh dir1/ dir2/ dir3/

     $./countfiles.sh [TAB][TAB]

       dir1 dir2 dir3

二、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示

  bash命令执行状态可用命令echo $?获取,返回0表示执行成功,返回非0表示执行失败

三、

     (1)cd /tmp

       touch a_c,a_d,b_c,b_d

     (2)mkdir /tmp/mylinux

         cd /tmp/mylinux

         cd /tmp/mylinux

         mkdir -p ./bin,./boot/grub,./dev,./etc/rc.d/init.d,./etc/sysconfig/network-scripts,./lib/modules,./lib64,./proc,./sbin,./sys,./tmp,./usr/local/bin,./usr/local/sbin,./var/lock,/var/log,./var/run

四、

    元数据就是数据的数据。

    1、任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等。在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。

   2、元数据管理方式

   元数据管理有两种方式。集中式管理和分布式管理。集中式管理是指在系统中有一个节点专门司职元数据管理,所有元数据都存储在该节点的存储设备上。所有客户端对文件的请求前,都要先对该元数据管理器请求元数据。分布式管理是指将元数据存放在系统的任意节点并且能动态的迁移。对元数据管理的职责也分布到各个不同的节点上。大多数集群文件系统都采用集中式的元数据管理。因为集中式管理实现简单,一致性维护容易,在一定的操作频繁度内可以提供较满意的性能。缺点是单一失效点问题,若该服务器失效,整个系统将无法正常工作。而且,当对元数据的操作过于频繁时,集中的元数据管理成为整个系统的性能瓶颈。

         分布式元数据管理的好处是解决了集中式管理的单一失效点问题,而且性能不会随着操作频繁而出现瓶颈。其缺点是,实现复杂,一致性维护复杂,对性能有一定影响。

         查看文件的元数据信息可用命令:

                                    ll [options] file命令

          linux下修改为念的时间戳信息可使用touch命令

                   功能:创建空文件或修改文件的时间

                  格式:#touch  [参数]  文件名

                   参数:-r  修改文件的时间为指定文件的日期时间

                         -d <yymmdd>  指定文件日期时间为yymmdd

                         -t <yymmddhhmm> 指定文件日期时间为yymmddhhmm

                         -c  不创建指定的文件

                  实例:

                       #touch   /f1  /f2

                       #touch  -r  /f1  /f2

                       #touch -d "6:03pm 05/06/2000" file

 五,如何定义命令的别名?如何在命令中引用另一个命令的结果

         定义命令的别名可以用alias命令

         命令中引用其他命令的执行结果可有以下几种方式

         1. 符号:` `

            名称:反引号,上分隔符

            位置:反引号(`)这个字符一般在键盘的左上角,数字1的左边,不要将其同单引号(’)混淆

            作用:反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分

            举例:

              $ echo `date` 

              Thu Mar 7 21:31:11 CST 2013

        2. $() 

          效果同` `

        3. 命令:xargs

             xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。

        $ date | xargs echo

        Thu Mar 7 21:47:12 CST 2013

       管道与xargs的区别:

       管道是实现“将前面的标准输出作为后面的标准输入”

       xargs是实现“将标准输入作为命令的参数”

       4. find命令的-exec参数

           xargs:通过缓冲方式并以前面命令行的输出作为参数,随后的命令调用该参数

           若忽略 xargs 的 options 来看的话,

           cm1 | xargs cm2

      可以单纯看成: cm2 `cm1`

      因此, find …. | xargs rm 也可作 rm `find …` 来处理. 然而, 若 find 的结果太多, 可能会超过rm 可能接受的最大argument数量而失败.

            xargs优点:由于是批处理的,所以执行效率比较高(通过缓冲方式)

            xargs缺点:有可能由于参数数量过多(成千上万),导致后面的命令执行失败

            若换成 find …. -exec   rm {} \; 的话, 

            因为rm 是" 逐个 " item 去处理的, 则无此忧虑

六、显示/var目录下所有以1开头,以一个小写字母结尾,且中间至少出现一位数字的文件或目录

   cd /var 

   ls -d /var/l*[0-9]*[[:lower:]]

七、显示\etc目录下,以非字母开头,后面跟了一个字母以及其他任意长度的任意字符的文件或目录。

     cd /etc

      ls -d /etc/[0-9]*[^0-9]

八、显示/etc/目录下,以非字母后面跟了一个字母以及其他任意长度的任意字符的文件或目录

     cd /etc

     ls -d /etc/[^a-zA-Z][[:alpha:]]*

九、在/tmp目录下创建以tfile开头,后面跟当前日期时间的文件,文件名为file-2016-5-27-09-32-22

      touch /tmp/tfile-`date "+%Y-%d-%H-%M-%S"

十、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1中

      cp -r /etc/p*[^0-9] /tmp/mytest1

十一、复制/etc目录下所有以.d结尾的文件或目录到/tmp/mytest2目录中

     cp -r /etc/*.d /tmp/mytest2

十二、复制/etc目录下所有以l或m或n开头,以.conf结尾的文件到/tmp/mytest3目录中

     cp /etc/[l,m,n]*.conf /tmp/mytest3

原创文章,作者:moshangliu,如若转载,请注明出处:http://www.178linux.com/18805

(0)
上一篇 2016-06-23 11:00
下一篇 2016-06-23 11:00

相关推荐

  • bash编程初体验(三)

    bash编程初体验之for for while until 概述 本文将介绍以for为代表的循环语句在shell 脚本中的应用,常见的循环语句有for, while,until,作为循环语句,顾名思义,它就是重复地做一件事,直到满足某一条件而退出;另外,还有两个循环控制语句continue与break来配合循环语句,以实现临时中断或跳出循环的功能;以下为fo…

    Linux干货 2016-08-24
  • bash脚本编程class2

    bash脚本class2—循环语句的使用      一.三种循环语句以及其具体使用方法   我们知道,在shell脚本编程过程中,为了实现逻辑关系的运算,有三种执行命令的顺序:顺序执行,选择执行,循环执行。通过if,case这类语句可以实现条件筛选后执行命令,这次课程中所学的主要知识点为循环语句的三种使用方式:for,…

    Linux干货 2016-08-19
  • Linux下which、locate、find 命令查找文件

    在Linux下我们经常要查找某个文件,但是又不记得文件位置,可以使用一些命令来搜索,目前接触到的文件命令有以下几个 which 查看可执行文件的位置 locate 基于数据库查找文件位置 find 实时搜索文件 1、 Which   语法:which 可执行二进制文件名称   Which是通过PATH环境变量查找文件的,在PATH 指定的…

    2017-08-14
  • 在CentOS7.3上编译安装httpd-2.4.27

    在CentOS7.3上编译安装httpd-2.4.27     在实际生产中,软件厂商并不总会提供针对Linux平台的rpm软件包,有时会以源码的形式发布软件。源码,比如c语言的源码,可以跨平台运行。在只能获得源码的情况下,那么就需要用户根据自己的平台,进行手动的编译安装。此时,需要借助一些专门的编译工具,而Linux…

    Linux干货 2017-08-06
  • 02Linux上终端的类型

    一、终端的概念 所谓终端就是在一个连接主机的端子上面接入鼠标、键盘、显示器等所组成的一个组合。终端用于用户与主机之间的交互。早期的时候,在大型主机上,想使用主机的用户很多,但是主机却只有一个,也不能实现人手一台。于是为了让一台主机给多个用户使用,便产生了多个终端和多个用户,这样每个用户只要有一个终端变可以与主机交互了。 二、终端的种类 终端的类型有四类:物理…

    Linux干货 2016-10-14
  • 硬盘分区及挂载

    标签:文件系统、分区、挂载 一、Linux的基本原则    1、一切皆文件(包括硬件);这个原则会会在很多方面得到体现; 磁盘在Linux中也表现为文件,即/dev目录下:IDE,ATA:/dev/hd[a-z]    SATA,SCSI,USB,SAS:sd[a-z]。    &nbsp…

    Linux干货 2015-05-18

评论列表(1条)

  • 马哥教育
    马哥教育 2016-06-23 14:07

    写的很棒,可以关注一些排版的技巧,那样会更完美