现在的位置: 首页 > 操作系统 > 正文

Linux shell常见指令

2014年11月23日 操作系统 ⁄ 共 2894字 暂无评论 ⁄ 阅读 1,875 次

在bash shell中,默认会记忆最近1000个操作过的指令,记录存储在家目录内.bash_history。不过该文件记录的是本次登录之前所执行过的命令,本次登录执行的命令被暂存在内存中,当注销系统后该指令记忆才会记录到.bash_history当中!

变量:

  • Linux中有很多变量,可以使用echo命令读取其值,如echo $HOME,echo $PATH等。
  • Linux中变量赋值使用=号,=号两边不能有空格,变量中若有空格需要使用单引号或双引号将变量内容括起来。
  • 若该变量为扩增变量内容时,则可用”$变量名称”累加内容,如:PATH=”$PATH”:/home/bin。
  • 通常我们可以约定,将系统变量都定义为大写,而自定义变量用小写。
  • 转义字符\可以将特殊符号变为一般字符,如Enter、空格、’等。当行过长,可以使用\然后直接Enter换行。此时,Enter前有\转义,将不再具有执行意义了,只是换行。
  • 取消变量设定,使用unset $var_name。

命令别名:

  • 使用alias可以将指令串命名为自定义字符,例如,想知道多个目录底下的所有档案(包含隐藏档)及所有的文件属性,那么就必须反复要下达ls -al这样的指令串。现在,利用alias就可以实现不需要每次都输入这样的指令串。指令语句:alias ll=’ls –al’,然后我们每次只要输入ll就相当于完全指令ls –al,需要注意的是,ll后没有空格,=后也没有空格。
  • 查看别名命令,直接输入alias然后Enter执行即可。
  • 取消别名命令,使用unalias后跟要取消别名的命令即可。

输入输出:

  • 标准输入(stdin):代码为0,使用<或<<,其中<<为结束输入字符设定,并不是追加输入,需要注意。
  • 标准输出(stdout):代码为1,使用>或>>。>的输出若文件不存在则新建,存在则先清空内容再写入;>>的输出若文件不存在则新建,存在则追加。
  • 标准错误输出(stderr):代码为2,使用2>或2>>;

指令传递:

  • &&:cmd1&&cmd2表示若cmd1执行完毕且正确,则执行cmd2;若cmd1执行完毕且错误则cmd2不执行。
  • ||:cmd1&&cmd2表示若cmd1执行完毕且正确,则cmd2不执行;若cmd1执行完毕且错误则执行cmd2。
  • |:管线命令,传递处理指令数据流。

cut】根据域分隔符取出行中指定域数据,使用语法:传入数据|cut [选项],常用选项:

  • -d:后面跟分隔字符,用单引号括起,跟-f一起使用;
  • -f:依据-d的分隔符将行切割,然后取出-f后指定域的字符;
  • -c:取出-c指定的字符区间,如12-20,12-;

grep】在输入中搜索指定内容,若含有该内容则取出行,使用语法:grep [选项] [着色] ‘搜索字符串’ fliename,常用选项:

  • -c:计算找到‘搜索字符串’的次数;
  • -i:忽略大小写;
  • -n:输出行号;
  • -v:反向选择,输出不包含‘搜索字符串’的行;

着色:

--color=auto,可以将找到的关键字部分着色显示。

sort】将输入进行排序,使用语法:sort [选项] file,常用选项:

  • -b:忽略最前面空格部分;
  • -f:忽略大小写;
  • -n:以纯数据形式排序(默认以文本形式);
  • -u:相同数据排序仅出现一行;
  • -r:反向排序;
  • -M:以月份排序;
  • -t:指定分隔符(默认tab);
  • -k:根据分隔域,以指定域排序;

uniq】对排序后的内容进行去重,常用选项:

  • -i,忽略大小写;
  • -c,对重复次数进行计算;

wc】统计行、字、字符,常用选项:

  • -l:仅统计行;
  • -w:仅统计单词数(英文);
  • -m:仅统计字符数;
  • 若不加任何选项则三项全统计;

tee】屏幕、文件双输出,选项,-a,以追加形式写入文件。

tr】删除或替换字符,常用选项:

  • -d:删除字符串;
  • -s:取代掉重复的字符;
  • 不加选项可用于替换,如tr ‘[a-z]’ ‘A-Z’,表示将所有小写替换为相应大写;

sed】数据替换、删除、新增、搜索等,语法:sed [选项] ‘[动作]’,常用选项:

  • -e:多个动作,则每个动作前要有-e。
  • -n:使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的数据一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
  • -f:执行指定文档的动作。直接将sed的动作写在一个档案内,-f filename则可以执行filename内的sed动作。
  • -r:sed的动作支持的是延伸型正则表示法的语法。(预设是基础正则表示法语法)
  • -i:直接修改读取的档案内容,而不是由屏幕输出。

动作可仅到指定行进行,如“[n1][,n2] action”,10,20 动作,是动作仅作用于10到20行。常用动作(注意前面没有-,动作整体用单引号):

  • a:新增。a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)。
  • i:插入。i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行),在新增多行时,可以用\然后换行继续输入。
  • c:全替换。c的后面可以接字符串,这些字符串可以取代n1,n2之间的行!
  • s:指定替换。通常搭配正则进行指定替换,如:1,20s/old/new/g。当然,若我们把new不写任何内容,这个句子就成删除指定字符了。
  • d:删除行。
  • p:输出。亦即将某个选择的数据印出,通常p会与参数sed –n搭配。

awk】sed常将数据作为行进行编辑处理,而awk则将行分成“字段”进行数据处理。语法:awk '条件类型1 {动作1} 条件类型2 {动作2}...' filename。

注意:

  • awk的条件判断及动作都在引号内;
  • awk的动作在大括号内,有几个大括号就是有几个动作;
  • 内置变量使用大写,且不需要$变量符号;

awk的处理流程:

  • 读入一行数据,依据分隔符将其填入变量$0、$1、$2…等中,其中$0是全行数据。
  • 依据“条件类型”的限制,判断是否需要进行后面的动作,若无条件类型则表示动作执行前不做判断。
  • 做为所有的条件判断及动作,然后重复执行下面的行。

awk内置变量:

  • NF:每一行拥有的字段总数;
  • NR:目前awk所处理的是第几行数据;
  • FS:目前的分隔符,默认为空格;

条件与赋值:

  • 条件比较可用,“>、<、>=、<=、==、!=”,需要注意的是等于是==,而一个=是赋值。
  • 设定分隔符就相当于一个动作,而设定就相当于一个赋值,如:awk '{FS=”:”} $3<10 {print $1 “\t” $3}',其中,第一个动作就是设定分隔符。需要注意的是,这种写法并不处理第一行,原因很简单,根据awk流程,先读入,采用默认分隔符分隔,然后赋给变量,再交给动作处理的。在读第二行时,分隔符才被在第一行修改为“:”。要想改变这种情况,就要利用初始化关键字BEGIN作为条件放在动作前。

若动作中有多个指令,则指令间使用“;”隔开。

关于指令举例及详细介绍参见“Linux shell脚本网站日志分析常用基础命令”。

关于正则表达式详细见“正则表达式语法进阶教程”。

声明:该笔记转载自《鸟哥的Linux私房菜》,仅用于个人学习,若侵犯到您的版权敬请告知!

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?