“文件管理、命令别名、glob”和“IO重定向、管道及文本处理工具

文件管理:

       cp,mv,rm

复制命令:cp

       cp src(源)dest(目标)

            src是文件

                 如果目标不存在,新建dest,并将src中内容填充至dest中;

                 如果目录存在:

                        如果dest是文件,将src中的内容覆盖至dest中;

                               此时建议为cp命令使用-i选项;

                        如果dest是目录,在dest下新建与原文件同名的文件,并将src中内容填充至新文件中;

       cp src...dest

             src...:多个文件

                  dest必须存在,且为目录,其它情形均会出错;

       cp src dest

             src是目录:

                    此时使用选项:-r

                    如果dest不存在,则创建指定目录,复制src目录中所有文件至dest中;

                    如果dest存在:

                           如果dest是文件,报错

                           如果dest是目录

       常用选项:

               -i:交互式

               -r,-R:递归复制目录及内部的所有内容

               -a:归档,相当于-dR  --preserv=all

                      -d:--no-dereference  --preserv=links

                      --preserv=[-ATTR_LIST]

                            mode:权限

                            ownership:属主属组

                            timestamp

                            links

                            xattr

                            context

                            all

               -p:--preserv=mode,ownership,timestamp

               -v:--verbose

               -f:--force

 

mv:move,移动文件

        常用选项:

                   -i:交互式

                   -f:强制

 

rm: remove,删除

        rm [option]...file...

        常用选项:

               -i:交互式

               -f:强制删除

               -r:递归

               rm  -rf 

 

文本编辑器:nano

       全屏编辑器

 

bash的基础特性(2)

        1.命令别名(alias)

           通过alias命令实现:

                  (1)alias

                           显示当前shell进程所有可用的命令别名;

                  (2)alias  NAME='VALUE'

                           定义别名NAME,其相当于执行命令VALUE;

                   注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;

                           仅对当前用户:~/.bashrc

                           对所有用户有效:/etc/bashrc

 

                           Note:编辑配置给出的新配置不会立即生效

                           bash进程重新读取配置文件:

                                   source  /path/to/config_file

                                   .    /path/to/config_file

            撤销别名:unalias

                   unalias  [-a]  name  [name...]

            Note:如果别名同原命令的名称,则如果要执行原命令,可使用“\command”

 

          2.glob(globbing)

               bash中用于实现文件名“通配”

                       通配符:*,?,[ ]

                       (1):*,任意长度的任意字符;例如,a*b:aab,ab,abc

                       (2):?,任意单个字符;例如:a?b:aab,ab,a12b,abc

                       (3):[ ],匹配指定范围内的任意当个字符;例如:[0-9],[a-z](不区分字符大小写),[A-Z]

                       (4):[^],匹配指定范围外的任意单个字符,例如:[^0-9]

                       专用字符合集:[:digit:],任意数字,相当于0-9

                                               [:lower:],任意小写字母

                                               [:upper:],任意大写字母

                                               [:alpha:],任意大小写字母

                                               [:alnum:],任意数字或字母

                                               [:space:],空格符号

                                               [:punct:],标点符号 

                                           

练习:

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

touch  /tmp/labc8m;ls  -d  /tmp/1*[0-9]*[[:lower:]]

2.显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录

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

3.显示/etc目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录

ls  /etc/[^[:alpha:]][[:alpha:]]*

4.复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tem/mageedu目录中

ls  /etc/m*[^0-9];cp  -a  /etc/a*[^0-9]  /tmp/mageedu

5.复制/etc目录下,所有以.d结尾的文件或目录至/tem/magedu.com目录中

ls  -d  /etc/*.d;cp  -a  /etc/*.d  /tmp/magedu.com

6.复制/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/magedu.com目录中

ls  /etc/[snrp]*.conf;cp  -a  /etc/[mnrp]*.conf  /tmp/magedu.com

 

3.bash的快捷键

   Ctrl+l:清屏,相当于clear命令

   Ctrl+a:跳转至命令开始处

   Ctrl+e:跳转至命令结尾处

   Ctrl+c:取消命令的执行

   Ctrl+u:删除命令行首至光标所在处的所有内容

   Ctrl+k:删除光标所在处至命令行尾部的所有内容

 

4.bash的I/O重定向及管道

   程序:指令+数据

          读入数据:Input

          输出数据:Output

   打开的文件都有一个fd:file  descripter(文件描述符)

   标准输入:keyborad,0

   标准输出:monitor,1

   标准错误输出:monitor,2

 

   I/O重定向:改变标准位置

   输出重定向:command > new_pos,command >> new_pos

                   >:覆盖重定向,目标文件中的原有内容会被清除

                 >>:追加重定向,新内容会追加至目标文件尾部

   #set  -C:禁止将内容覆盖输出至已有文件中

         强制覆盖:>

   #set  +C:

   2>:覆盖重定向错误输出数据流

   2>>:追加重定向错误输出各自定向至不同位置

   标准输出和错误输出各自定向至不同位置:

          command > /path/to/file.out  2>  /path/to/error.out

   合并标准输出和错误输出为同一个数据流进行重定向

          &>:覆盖重定向

          &>>:追加重定向

          command > /path/to/file.out  2>  &1

          command >> /path/to/file.out  2>>  &1

       

   输入重定向: <

          tr命令:转换或删除字符

            tr  [option]...set1  [set2]

   hear documentation:<<

           #cat << eof

           #cat > /path/to/somefile << eof

 

   管道:

           command1 | command2 | command3 | ...

           Note:最后一个命令会在当前shell进程的子shell进程中执行

           tee命令:

                tee [option] ...[file]...

   练习:

           1.将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中

              head  -n  5  /etc/passwd  |  tr  'a-z'  'A-Z'  >  /tmp/passwd.out

           2.将登录至将前系统上用户信息中的后3行的信息转换为大写后保存至/tmp/who.out文件中        

              who  |  tail  -n  3  |  tr  'a-z'  'A-Z'  >  /tmp/who.out

 

文件处理工具:wc,cut,sort,uniq

       wc命令:

               wc [option]...[file]...

                       -l:lines

                       -w:words

                       -c:characters

       cut命令:

               cut [option]...[file]...

                       -d delimiter:指明分隔符

                       -f  fileds

                             #:第#个字符

                             #,#[,#]:离散的多个字符,例如1,3,6

                             #-#:连续的多个字符,例如1-6

                             混合使用:1-3,7

                       --output-delimiter=string

       sort命令:

             sort [option]...[file]...

                    -f:忽略字符大小写

                    -r:逆序

                    -t DELIMITER:字符分隔符

                    -k #:以指定字段为标准排序

                    -n:以数值大小进行排序

                    -u:uniq,排序后去重

       uniq命令:

              uniq [option]...[file]...

                    -c:显示每行重复出现的次数

                    -d:仅显示重复过的行

                    -u:仅显示不曾重复的行

              Note:连续且完全相同方为重复

练习:

       取出/etc/passwd文件的第6至第10行,并将这些信息按第3个字段的数值大小进行排序,最后仅显示各自的第一个字段               

 

         

posted @ 2018-06-02 16:24  axzq  阅读(199)  评论(0)    收藏  举报