lgxqf  

第十章 VI文字处理


    vi 常用命令:
        !command        暂进离开VI 执行command命令。  !ls /dev
        :w filename     将文件另存为filename
        :e              恢复文件到状态
        ctrl+r          重复上个动作
        .               重复上个操作 如删除、粘贴
        
    vim 常用命令
           块选择 v,V,ctrl+v   块复制/删除 y,d
           多功能窗口   :sp filename   窗口切换: ctrl+wj  ctrl+wjk
           常用设置参数  set nu, set hlsearch, set ruler, set all
           配置文件: /etc/vimrc (全局的) ~/.vimrc 当前用户的

    DOS与Linux换行符
        Linux中的换行符为LF($)        DOS中的换行符为CRLF(^M$)
           可以通过dos2unix和unix2dos 命令使两种格式互转

   给每一行开头加入字母Y    :1,s/^/Y/g

 

第十一章 认识Bash Shell


    Shell
            查看当前文件系统中有哪些shell可用   cat /etc/shells
          ~/.bash_history 中记录的是前一次登录之前所用过的shell命令。而至于这一次登录所执行的命令都被暂存在临时内存中
            成功注销后那些命令才会记录到bash_history中。
        
    type
            用于判断一个命令是内部命令还是外部命令。 type -a ls

    Shell中的变量
            显示变量的内容 echo $varaible   echo ${varaible}
            单引号和双引号的区别  
            双引号中的特殊字符可以保持变量特性,单引号只是将它看做一般字符
            word=abc    wordA="$word d" wordB='$word d'   
            echo $wordA  结果: abc d   
            echo $wordB  结果: $word d
            `符号用于获取其它命令提供的信息 如: cd /lib/modules/`uname -r'/kernel
            取消变量的方法 unset 变量名称
            \ 是转义字符 它可将特殊符号转义为一般字符 如 ' 空格Enter $ `等            
          shell中命令的执行都是通过子程序来完成的。 父程序中的自定义变量无法在子程序中使用,除非通过export将自定义变量转变成环境变量。

    环境变量
            env仅显示环境变量
            set显示环境变量及用户自定义的变量
            export 将自定义变量 变成环境变量。 父进程的自定义变量在子进程中无效 只有将其变成环境变量 子进程才能访问。

    declare/read/数组
            read通过用户的输入设置变量的值。p=prompt t=time            
                read -p "input name:" -t 30 GuestName            
            declare 声明变量
                     变量默认的类型是字符型 decalre -i 设置变量为整型  decalre -i sum=100+100  ; echo $sum;结果为200
             数组
                var[1]="abc" var[2]="def"      

    ulimit -a 显示用户所受的限制:可用的最大进程数量、可锁定的内存量、可用的管理处理数量等

     附加的变量设置功能
            # ## % %%   
            echo ${HOME##/*/};   expr="abc"; var=${str-expr}

    alias/unalias

    history命令
            !! 执行上一个命令  
            !number  执行第number个命令
            !cmd 执行最近的今有cmd命令的命令            
            
    Bash shell使用环境
                不要将当前路径. 放在PATH中。这样做是不安全的。假/tmp目录有个恶意程序 名字为ls
                那么当在tmp中执行ls时 恶意程序ls 就会被执行 而不是/bin/ls

     登录消息显示数据
            /etc/issue 用户登录时显示的信息
            /etc/issue.net telent登录时显示的信息

    环境设置文件:全局的profile和用户个性化的profile
                全局 profile bashrc
                /etc/bashrc /etc/profile 设置总体的一信息如umask值,PATH,它会影响到所有的用户。
                个性化profile bashrc bash_logout
                ~/.bash_profile, ~/.bash_login, ~/.profile   在文件中定义个性化的PATH与环境变量
                            这三个文件通常只要一个即可 之所以有三个是历史遗留问题。执行顺序 .bash_profile-->.bash_login-->.profile
                ~/.bashrc 个性化的设置,如设置alias PATH等
                ~/.bash_logout  用户在注销后需要执行的一些命令 如 sync
    执行顺序
                用户在登录时先执行/etc/profile及/etc/profile.d中的文件
                然后再执行~/.bash_profile或~/.bash_login或~/.profile

    登录shell与非登录shell
               登录shell是指用户登录linux时所获得的shell 在此之后所获得的shell叫非登录shell.
               如:在我们登录Linux X Widnow时输入用户名和密码后 登录成功就获得了登录shell,
               之后当我们用x-term打开终端时所用的都是非登录shell.
               也可以理解成登录成功并获取登录shell后,又新打开的shell。
               区别:
                   登录shell会读取~/.bash_profile或 ~/.bash_login或 ~/.profile
                   非登录shell只读取 .bashrc文件
               简单的理解为 在用户登录时profile文件只读取一次,而每当用户打开新的shell时都会读取bashrc文件。
        
    终端环境的设置
            stty -a 显示所有按键内容 如 intr(中断)=^c
            stty intr ^b 把中断命令由ctrl+c 改成 ctrl+b
            set -x 显示执行的shell命令

    数据流重定向
                标准输入0 标准输出1 标准错误输出 2
            >  1>  2> 2>>   重定向输出或错误到一个文件或设备  find / name testing > output.txt 2>error.txt
            <               重定向输入到一个文件或设备         cat < abc.txt
            << abc          以abc做为标准输入的结束符 当输入遇到abc时终止读取    cat > output << abc   
            2>&1            将标准错误和标准输出重定向到同一个文件   find / name testing 2>&1 output.txt
            /dev/null       垃圾箱 可以将不需要的输出重定向到这个设备中
            find / name testing > output.txt 2> /dev/null

    命令执行的判断根据 && ||
            && 当前一个命令执行成功后才执行下一个命令  || 恰与之相反
                如:判断一个根目是否存在 如存在则显示 exist 否则显示 not exist
            ls /dev/ma && echo "exist" || echo "Not exist"

    管道命令
            cut  对文件中每一行里的数据进行分解,主要用于log文件分析
                cut -d 'delimiter' -f number
                    -d 分隔符  只可为一个字符
                    -f 根所分隔符将消息分成几段, 用-f 取出第几段的意思。              
                echo $PATH | cut -d ':' -f 1,3

            grep 搜索字符串            
                grep [-acinv] '搜索字符串'  filename
                    -n 显示行号
                    -v 显示没有找到搜索字符的行的内容                         

            sort 排序
                sort [-fbMnrtuk] [file or stdin]                  
                    -f 忽略大小写差异
                    -b 忽略最前面的空格
                    -u uniq 相同的数据中仅出现一行表示
                    -t 分隔符 常与-k一起使用
                    -k 以分隔符将数据分解行 以哪段来进行排序
                cat /etc/passwd | cut -d ":" -f 3 | sort -n

            uniq 若数据已排序,将重复的数据仅显示一次
                uniq [-ic]
                    -c 进行计数
                last | cut -d " " -f 1 | sort | uniq -c
               
            wc 对文件的字符进行统计
                wc [-lwm]
                    -l 多少行
                    -w 多少单词
                    -m 多少字符                        
                last | wc -m

           tee 双重定向 将输入写到文件和输出
                tee [-a]  -a 代表累加
                export | tee tmp | cut -d "="  -f 1

    字符转换命令 tr col join paste expand
            tr 删除一段消息中的文字或进行文字替换
                tr [-d] 字符 ...
                    -d 删除指定的字符
                last | tr "[a-z]" "[A-Z]"
                cat /etc/passwd | tr -d ":"
                cat ~/dosfile | tr -d "\-r"   #same as dos2unix     
    xargs
            可以读入标准输入的数据,并且以空格符或换行符作为标识,将stdin的数据分隔成为参数。
            因为以空格作为分隔,所以一些文件名含有空格时,xargs就会误判
            xargs -[0epn] command
                0: 若输入的stdin含有特殊字符如, \ 则将其变成一般字符
                e: EOF(end of file),后面紧跟一个字符串,当xargs 分析到这个字符串时就会停止工作
                p: 在执行每个命令的参数都询问用户
                n: 接次数 当执行command时要使用几个参数。
            cat /etc/passwd | cut -d ":" -f1 |head 10 | xargs finger
            cat /etc/passwd | cut -d ":" -f1 |head 10 | xargs -n 5 finger
            cat /etc/passwd | cut -d ":" -f1 |head 10 | xargs -e"lp" finger
                    
   -减号的用途
            在管线命令当中,常常会使用到前一个指令的 stdout 作为这次的 stdin , 某些指令需要用到档案名称 (例如 tar) 来进行处理时,
            该 stdin 与 stdout 可以利用减号 "-" 来替代
            举例来说:       [root@linux ~]# tar -cvf - /home | tar -xvf -
            上面这个例子是说:‘我将 /home 里面的档案给他打包,但打包的资料不是纪录到档案,
            而是传送到 stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - ’。后面的这个 - 则是        
            取用前一个指令的 stdout, 因此,我们就不需要使用 file 了!

 第十二章 正则表达式

        []  来搜索集合字符
            []中不论有几个字符 都只代表某“一个”字符  如:[abc]a 代表 aa ba ca
            [A-Z]代表从A到Z的所有大写字母 [A-Z0-9]代表所有大定字母和数字 注:中间无空格
             如:grep -n [A-Z0-9] reg.txt   选出有大写字母或数字的行
        [^] 来搜索不含有某字符的行
             如:grep -n [^0-9] reg.txt 选出不含有数字的行

       ^ $ 行首与行尾字符
            字符^在[]内代表反选,否则代表行首 如:^[abc] 以a或b或c开头的行
            字符$代表行尾 如: km$ 代表以km结尾的行
         ^$代表空白行 即没有任何字符的行

            如: grep -v ^$ reg.txt | grep ^# 删除文件中的空白行或注释的行 -v 代表反选

            等价于 egrep "^$|^#"  reg.txt


        任意字符. 与重复字符* 它与通配符中的*完全不同
            字符. 代表“绝对有一个字符”                                如:g.d  可以代表god
            字符* 代表重复0个或任意多个前面的字符               如:g*d 代表 d前面有0个或多个g的字符串     d  gd ggggd  但gad就不符合要求,因为a不是g的重复
            g.*d  代表所有以g开头以d结尾的字符串               可以代表gxxxxd gd   
            g*d 代表含有d或开头有g的字符串                       g.*d代表以g开头以d结尾的字符
            注意 d*g 与g.*d的区别                                    dg* 代表 d后面有0个或多个g的字符串  dg dgg dgggg  但dga就不符合要求。
        
        {}限定重复字符范围
            因为{为特殊字符 所以它必须加\     
            如:o\{2\}  代表oo  o\{2,5\} 代表2到五个o  oo ooo oooo ooooo
            o\{2,\} 代表两个o以上的重复字符
         
      正则表达式与通配符的不同
        正则        .代表单个字符  *代表0-n个重复字符              以a开头的文件 ls | grep ^a.*

        通配符    ?代表单个字符  *代表任意字符组合                以a开头的文件 ls a*

 

      扩展正则表达式
      命令egrep 是grep -E的别名 它支持扩展正则表达式
      + 代表重复一个或以上前面的字符  g+d : ggd gggggd
      ? 代表0或一个字符                g?d : gd  gxd
      | 同时搜索多个字符               go|come : go 或 come
      () 同时搜索多种组合字符          g(xy)o : gxo gyo
      echo "AxyxyxyM"   | egrep "A(xy)+M"
    
     printf 格式输出
        printff "打印格式" 实际内容

     sed/AWK工具简介
     
     diff与cmp不同: diff是以“行”为单位进行比较的,cmp是以位为单位进行比较的。

     使用grep或其他工具进行正则表达式的字符串比较时,因为编码问题会有不同的状态,                                                                                                                因此,最好将LANG及LANGUAGE等变量设置为C或en等英文语系  


posted on 2009-06-03 23:11  Justin_Ma  阅读(376)  评论(0)    收藏  举报