zoukankan      html  css  js  c++  java
  • Linux 命令和工具学习笔记


           掌握一些 Linux 命令行及标准实用工具, 可以大大加强日常任务的处理效率,作为开发的有力辅佐。这篇文章将专注于有用的命令及组合, 记录我在日常生活与工作中遇到的问题及解法。 


            1.   Linux 强力工具:

                  find :   提供 N 多搜索选项, 在目录结构中寻找满足各种条件的文件集合;  --- 搜索文件

                  grep :  依靠强大的正则表达式,  在给定文件集合中搜索匹配模式的文本字符串; --- 搜索字符串

                  sed :   同样依靠强大的正则表达式及编辑命令,执行文本查找/替换; --- 文本查找与替换

                  awk :   特别适合于记录文件的数据处理; --- 记录文件处理

                  sort:  :  提供了很多选项对记录型文件和非记录型文件的排序;  --- 排序

                  man :  详细的可读性良好的帮助信息 ,  --help ,   info ;  --- 帮助


            2.   Linux 常用命令及Shell 重要元素:

                 (1)  常用命令: 

                            echo: 回现内容;

                            cat:    显示文件内容;  head:显示文件前若干行; tail: 显示文件末尾若干行;

                            pwd:  显示当前所在目录;

                            ls:      获取当前目录下文件与目录列表及详情; 

                            wc:    对文件进行单词、字符、行计数;

                            cut:   截取文件记录行的某列或某几列;

                            join:  连接多个文件的记录列;

                            tr:      字符串截取 ;    tee:  字符串转换;

                           uniq:  重复行处理;

                            cd:     切换目录;

                            cp :    复制文件或目录; mv ; 移动文件或目录; 重命名文件;  rm: 删除文件或目录; 

                           mkdir :  创建目录;

                           which: 定位命令所在路径; whereis : 找出命令相关的文件及路径;

                           who:    显示当前登录用户;

                           chmod:更改文件权限;

                           touch: 改变文件创建或修改时间, 可用于创建空文件;

                           file:     显示文件类型;eg.  ls | xargs file ;

                           xargs: 将前一个命令的输出转化为文件列表作为指定命令的输入, 常见形式是 cmdx | xargs cmdy

                           df :     磁盘使用情况;

                           md5sum: 获取 md5sum 值;

                           .  xx.sh,  sh xx.sh :  执行脚本 xx.sh ;

                           read:    从控制台读取输入;

                           export: 导出变量到当前 SHELL 环境;

                           env  :      显示或设置环境变量;

                           kill:      杀死进程, 一般使用 ps 命令找到相应进程的进程ID,然后使用 kill 干掉;  eg. kill -9 pid

                           ps:       显示进程信息, 一般使用 ps aux ;   

                           top:     系统最近一段时间的负载;

                           fc :      fc命令自动调用vi编辑器修改已有历史命令,当保存时立即执行修改后的命令,也可以用来显示历史命令;

                           fg:       将后台任务提到前端来执行;

                           crontab:  设置定时任务;

                           history :   显示历史命令; !n  执行历史命令中的第n条;

                  (2) 重要符号

                            cmdx | cmdy :  管道, 将 命令 cmdx 的输出作为 cmdy 的输入;

                            cmd < file: 重定向输入, 从指定文件 file 读取内容作为 cmd 的输入;

                            cmd > file :   重定向输出, 将命令 cmd 的输出到从控制台的内容重定向到指定文件 file 中(若 file 已存在则覆盖其内容);

                            cmd >>  file:  追加重定向输出, 与 > 类似, 但是输出是追加到 file 中, 而不是覆盖 file 已有内容;

                            cmdx &&  cmdy:  命令组合串行执行。 若 cmdx 执行成功,则执行 cmdy, 否则报错, 并且不执行 cmdy;

                            cat /dev/null > file  :  清空 file 文件内容  ;

                            cmd & : 将命令转入后台执行;

                  (3) 常用变量(可使用 echo $xxx 显示相关内容)

                             $HOME: 用户主目录, 一般是 /home/your_user_name , 同 ~ ;  env 命令可显示当前用户的环境变量设置。    

                             $IFS:  文件记录分隔符, 将文件中每行的记录使用 $IFS 定义的变量进行分割。

                             $PWD:  当前所在目录。

                             $PS1, $PS2: Shell 提示符定制, 一级提示符及二级提示符。

                             $((EXPR)): 表达式计算; eg. echo $((1+2)) 。

                             ${cmd-replacement}: eg. 命令行结果替换, 效果类似 cmd-replacement | cat | 。 

                             $#:  命令行参数数目

                             $@: 命令行参数

                             $* : 命令行参数

                             $1-$9, ${10-...}: 取出指定命令行参数; $0: 脚本名称;

                             $? :  上次命令执行的状态码, 可判断上次命令是否成功, 0 表示成功; eg.  ls ; echo $? ;  ls notExist ;  echo $?

                             $$ :  脚本运行的当前进程ID号

                             [ ]: 取索引的相应值 

                             &n: 在重定向中, n 是文件描述符。

                              .  当前目录 ;  ..  上级目录

                   (4) 控制结构

                             条件语句: if cond then statement elif cond2 then statement2 ...  else statement3 fi;      

                             for 循环:   for var in $@  do ... done  ;   

                             变量替换:  ${varname:-word}, ${varname:=word}, ${var#pattern} , ${var##pattern}, ${var%pattern}, ${var%%pattern} ,  

                             switch-case:   case $var in patt1-N)  dosome ;;  esac ;  

                   (5) 内置命令

                             任选一个使用  man 命令可查看所有内置命令的解释           

                             set/unset: 设置/取消变量值 ;

                             readonly: 设置变量值为只读 ;

                             printf: 打印内容到控制台 ;

                             getopts: 命令行解析 ;

                             exit: 退出程序 ;

                             test:条件测试 ;

                             eval: 计算表达式的值 ;

                             sleep:  休眠若干秒 ;

                             trap: 捕获信号 ;

                             type: 内置命令; 使用 man type 可以看到所有内置命令的权威解释;

                           shift: 数组移动 ;

                           exec ;   执行指定命令;

                           at:   任务延迟执行;

                (6)   重要文件:

                            /proc/pid :  进程相关信息;


            3.   命令组合: 


                   (1)   sed -i 's/@Override//g' $(find . -name '*.java')

                           find . -name '*.java' | xargs sed -i  's/@Override//g' 

            此命令用于将当前目录及其子目录下的所有 .java 文件中的 @Override 注解去掉。 $(find . -name '*.java') 使用了命令替换功能, Shell 会将该命令执行得到的结果作为 sed 的输入参数。 sed 是文本替换的重要工具, -i 是就地置换,直接在被编辑文件中置换,如果没有的话是不会修改原文件的,只会将修改输出到标准屏幕上。  's/oldtextpatt/newtext/g' 称为 sed 命令的编辑命令, 可以执行全局替换, 将所有匹配 oldtextpatt 的文本替换为 newtext . 还可以将多条编辑命令写在文件里,比如 pat_file , 然后用 -f pat_file 来调用。 

            由于命令行的长度有限, 而 find 找到的文件都将作为命令行参数,有可能超出限制, 因此, 更好的解决方案是使用 xargs , 它读取管道输入并转化为紧随其后的命令的参数, 从而不担心受到命令行字符长度限制。 

           扩展: *.java 是文件匹配形式, 可以换成 *.c , *.h , *.{c,java,h,deb,tar.{gz,bz2},js,php,html}(注意,中间不能有空格) 等; 

           重要工具: sed , find ,  

           重要概念: 正则表达式。 用来描述文本的模式,最重要最强大的 Unix 工具均建立其基础上 , find, sed, awk , grep 等。比如 a* 用来描述零个或多个a ; [1-9]*[0-9]+ 可以匹配任何整数。 推荐 《正则表达式必知必会》, 薄薄的100多页, 相当好的正则入门书籍。


                  (2)      while  IFS=: read   var1 var2 ... varN  do ... done   < inputfile  ;   

                            cmd  |   while IFS=: read var1var2 ... varN  do  ....   done

                           将输入文件或管道输出的每一行数据用 IFS 分割成多个字段然后赋值给 var1, var2, ..., varN 进行某种处理,

                           直到输入文件或管道输出的所有行都读完为止。

           

                  (3)      find . -name '*.java' | xargs awk ' $0 ~ /vm_monitor/ { printf "%s : Line %s :\n%s \n" , FILENAME, FNR, $0 } '

                                    | sed 's/^[[:space:]]\{1,\}/ /'

                            在当前目录及子目录下的所有 .java 文件中查找匹配模式 vm_monitor 的字符串,显示文件名,行号及匹配的行内容。 

                 (4)    grep 'inconsistency' log.txt | cut -f 3 -d":" | sed "s/ //g"   

                         从文本中截取感兴趣的文本(订单号)。 grep 先通过文本模式过滤出含有感兴趣文本的行; cut 剪切出指定的感兴趣的文本段; sed 去掉空格。

                         log.txt

                        日志概况: 2019-10-16 02:51:45 host/10.19.89.203 warn
                        日志内容: uuid  c.y.t.t.delay_compare-task - state-inconsistency: E20191016024042035800001

                         

                  引用: 

                      1.  《Linux特殊符号大全》

               

  • 相关阅读:
    财务统计
    Drupal 7 模 .info 文件描述
    怎么样MyEclipse配置Tomcat?
    QQ旅程server分析01-网关server
    UVa 988
    人工智能的策略,如果国家优先发展”梦想成真”?
    苹果公司的新的编程语言 Swift 高级语言(十一)--初始化类的析构函数的一个实例
    【剑指offer】两个队列实现堆栈
    证券从业改革
    Qt调用word 例子
  • 原文地址:https://www.cnblogs.com/lovesqcc/p/4037803.html
Copyright © 2011-2022 走看看