Linux基本命令解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基本命令解析相关的知识,希望对你有一定的参考价值。

  上篇博文为大家简单介绍了在Linux中的一些简单命令以及vi/vim的初步介绍,在此为大家在介绍一下关于vi/vim的一些操作以及Linux中一些命令的基本操作知识;

  vi/vim作为Linux中的默认编辑器它不仅仅只能编辑一个文本文件,而是能够同时编辑多个文本文件,在多个文本文件中可以相互转移,方便进行工作;对多个文本文件进行操作可以有编辑模式以及末行模式两种。

  在vim下创建多个文件: 

  $vim file1 file2 file3…

  在上述情况中创建多个文件需使用下述编辑模式下的调用方法转换文本文件;

  在编辑模式下:

  :next(可编辑下一个文件)

  :prev(返回上一个编辑文件)

  :first(查看或编辑第一个文档的内容)

  :last(查看或编辑最后一个文件)

  在vim下创建多个文件分布在同一个平面:

  vim –o|-O file1 file2 file 3

  -o:水平显示文件;

  -O:垂直显示文件;

  Ctrl+w:跳过窗口;

  #Ctrl+w:跳过多个窗口;

  Ctrl+w,s:将一个文件水平分屏显示;

  Ctrl+w,v:将一个文件垂直分屏显示;

  :qa:一次性退出所有编辑窗口;

  :wa:保存全部;

 

  在vim进行文本文件编辑时,还可以在vim界面下对shell命令进行交互,在敲击脚本时可以在vim下调用命令查看等;

  跟shell交互(末行模式)

  格式::!+命令

  例

  :!ifconfig(查看虚拟机IP)

  :!mkdir 。。。。(执行一次创建目录的命令)

  在将文件保存到所创建的路径下:

  格式::!w 。。。。

  例

  :w /PATH/TO/SOMEFILES(将文本文件另存在所定路径下)

  :m,nw /PATH/TO/SOMEFILES(保存文本m至n行的内容在所定路径下)

  :m,+nw /PATH/TO/SOMEFILES(保存文本以m行为起点往下的n行的内容在所定路径下)

  :.,$w /PATH/TO/SOMEFILES(保存文本所有内容在所定路径下)


  shell概述:

  UNIX的shell有很多种类,Linux系统继承了UNIX系统中shell的全部功能,现在默认使用的shell是bash;若需要更换shell则在终端中直接输入shell名,回车。如注销当前shell则输入exit,回车;

  shell具有如下突出特点:

  ①对已有的命令进行适当组合构成新的命令;

  ②提供文件名扩展字符[],*,^等;

  ③可以使用shell的内置命令,而勿需建立新的进程;

  ④允许灵活的使用数据流,通配符,输入/输出重定向,管道线等机制;

  ⑤提供顺序,条件,循环等控制流程;

  ⑥提供在后台(&)执行的能力;

  ⑦允许用户创建,修改命令,命令提示符和其他系统行为;

  ⑧提供一个高级命令语言,允许用户创建从简单到复杂的程序;

  Bash的特性:

  一.命令的别名:

  用户可以自定义命令,利用简单的方式来代替复杂的方式即命令别名的含义;

  例如

  alias cls=‘clear’(以cls字符串代替clear清空屏幕命令)

  注意:需要注意的是,当前所定义的别名只在dangqianshell运行的环境下可以使用,一旦退出shell的连接,再次登陆时就要重新定义别名;但是如果想让修改的别名永久生效,可以采用修改.bashrc配置文件的方法,其中保存的别名并不会立即生效,只有在重新加载该文件的内容后,才会生效,且永久生效;

  在修改.bashrc文件后如想在当前连接下立刻使用,可以即使加载.bashrc配置文件就可以不用退出连接使用设置的别名即

  . .bashrc(在当前的shell当中加载文件的内容)

 撤销别名的命令:

   unalias;

  unalias NAME;

  

  二.命令历史(一部分保存在bash历史缓冲区中,一部分保存在硬盘):

  BASH进程会保存其会话中用户曾经执行过的命令,以方便用户重复去执行某个命令;通过BASH提供的  历史命令文件来持久保存执行过的命令,每个用户都有其自己私有的历史文件;登陆shell的时候,  bash会自动读取~/.bash_history文件中所记录的所有命令;

 显示历史命令:

 history命令显示命令历史表中的命令,其语法格式是:

 history[option][arg...]

 $history:命令不带任何参数时,则history命令会显示历史命令清单;

 $history 14:最近执行的14条命令;

 $history –d 9:删除第九条命令;

 $history –c:清空历史缓冲区的历史命令;

 重复之前使用的命令:

 ①上下箭头,回车执行;

 ②Ctrl+p(等同于上方向键)

 ③!-1把之前执行过的命令在执行一次;

 ④!!执行上一次的命令;


 重复执行历史缓冲区的命令:

 !number:重复执行从历史缓冲区的第number个命令执行;

 !string:从历史缓冲区中查找最近一次执行过的以“string开头的命令;

 !?string:从历史缓冲区中查找最近一次执行的包含字符串的命令,并执行;”

 !-n:执行缓冲区倒数第n条;

 Ctrl+r:在历史缓冲区中实施搜索,回车执行即可;

 重复使用历史命令中的一部分:

 !$:表示最后一次命令中最后一个参数;

 ESC,.:按完ESC再按.可以把最后一次命令的最后一个参数补全;

 !^:表示上一个命令的第一个参数;

 !:number:表示上一个命令的第number个参数;

 ! SEQUENCE:NUMBER:表示在历史缓冲区中第“SEQUENCE”个命令的第NUMBER个参数;

 在默认情况下,bash使用用户主目录下的文件“.bash_history”来保存命令历史。但是,用户也可以通过重新赋值环境变量来改变存放历史命令的文件。如

  HISTSIZE;

  HISTFILESIZE(保存历史的文件的大小);

  HISTTIMEFORMAT(历史时间格式);

  HISTCONTROL(历史命令的记录方式);

  $HISTFILE="/home/mengqc/.myhistory"

  命令执行后,历史命令将存放在上述路径下;

  也可以通过HISTSIZE来修改历史文件中保留命令的个数;

  $HISTSIZE=400

  同理,可以修改HISTCONTROL的值

  HISTCONTROL:

  ignoredups:忽略连续且相同的命令的历史缓存;

  ignorespace:忽略以空白字符开头的命令;

  ignoreboth:以上两个功能都启用;


  

  三.快捷键

  C—>Ctrl

  M-->Alt

  E-->ESC

  DEL-->Backspace

  C-l:Ctrl+l,clear,清0;

  C-a:Ctrl+a,光标移到开头;

  C-e:Ctrl+e,光标移到编辑行末尾;

  C-k:Ctrl+k,删除光标所在位置至行尾的命令行信息;

  C-u:Ctrl+u,删除光标所在位置至行首的命令行信息;

  C-c:Ctrl+c,取消当前命令的执行;


  四.命令补全机制

  在bash命令行上输入目录或文件名时,如果记不清楚完整的目录名或文件名,则可以使用Tab键,Linux就会根据输入的字母查找以那些字母开头的目录或文件,并自动补全;

  使用Tab键可以完成命令补全如果给出的字符串不能作为唯一标识,则不予补全;在此敲击Tab键,bash会给出参考列表,如果参考列表中的内容过多则会询问是否列出这么多功能;“空格”+tab键能把当前工作目录的所有文件显示出来;根据提供的参数路径来进行补全,如果参数没有任何提示信息,则默认从工作目录进行查找;

  Shell命令的执行过程:

   1.shell会根据用户键入回车来判断用户的输入结束

   2.shell会将收集到的命令信息,根据空白字符分段(token)

   第一个分段被理解为命令字段;

   3.判断第一个字段是内部命令还是外部命令,如果是内部命令,则直接运行;如果是外部命令,     通过PATH变量所指示的路径信息,去查找相关位置,以确定是否存在同名文件,如果有,就执       行;否则就报错;

   4.判断选项是否正确,判断参数是否正确;


  五. Shell的命令行展开特性:

  ~:bash会自动将其展开为当前登录用户的家目录;

  ~STRING:bash会自动将其展开为以“STRING”为用户名的用户的家目录;

  ~+:调用shell变量“pwd”的值;

  ~-:调用shell变量“OLDPWD”的值;

  {}:在花括号中可以填充一个以“,”分割的路径列表,bash会将其展开为多个独立的路径;

  问题:创建a_a,a_b,b_a,b_b目录

  mkdir{a,b}_{b_a}


  六.命令的执行结果

  任何一个Linux命令都有两种执行结果,一是命令的正常输出结果;二是命令执行状态的返回值;

  其一:

  ``:反向单引号,反引号,可以执行在倒引号里的所有命令;

  $():标准的命令引用格式;

  如$ss=$(echo);即可以利用ss代替echo命令;

  wc:不加参数选项时,以标准输入接入,再Ctrl+d退出,显示行数,字数,字节数等;

  -c:只显示字节数

  -l:只显示行数

  -w:只显示字数

 其二:命令执行状态的返回值;

 跟命令执行成功与否相关的返回内容;

 保存在bash的一个特殊变量中:$?

 RETSTAT=$?将上一个命令的状态返回值永久保存下来;

 0:表示命令执行成功;

 1,2,127:bash的内置状态返回值;

 1:表示小问题;

 2:严重的问题;

 127:命令本身出现问题;

 3-126,128-255:用户自定义状态信息;


 七.引用

 ‘’(单引号):强引用

 凡是被单引号引用的内容,bash一律将其视为普通字符,即便其本身有特殊功能和作用也是如此。但  单引号本身是个例外。

 “”:弱引用

 被双引号引用的内容中,有一些特殊字符仍然会保留其特殊含义,比如说$,\,``;其他均作为普通字符对待;$表示变量替换,``倒引号表示命令替换,反斜线\仅当其后的字符是“$”,“`”,“"”,“\”或换行符之一时,“\”才是转义字符。转义字符告诉shell不要对其后面的那个字符进行特殊处理,只是当作普通字符;

 ``:倒引号

 倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并以他的标准输出结果取代整个倒引号部分;

 例如:

 $echo current directory is `pwd`

 $current directory is /home/m

 问题:备份/etc/整个目录的内容到/tmp,要求备份后的文件名为etc-系统时间;

 $cp -a /etc /tmp/etc-"date +%F%T"

 [[email protected]~]$ echo ‘(只输入一个单引号)

 >aaa

 >dfs

 >‘

 

 aaa

 dfs

 

 八.转义命令

 alias ls=’rm –rf’

 当对一些危险命令设置别名时可以通过转义命令“\”撤销别名,亦可通过转义命令对输入的命令进行换行输入;

 \ls(撤销别名)

 \:转义字符,让后面的一个字符失去某种意义;

 [[email protected]~]$ echo \(这样可以一行行输入)

 >w \

 >w \

 >w

 w ww

 

 九.Globbing文件名通配

 *:匹配任意长度的任意字符,某些特殊位置的“.”不能被匹配,路径名中的/只能显示匹配,空也可以匹配;例如,“f*”可以匹配f,fa,f1,模式*f不能匹配.profile而.*file可以;

 ?:匹配任意单个字符,必须且只有一个字符被匹配,无法匹配空字符;例如,“f?”可以匹配f1,fa等,但不能匹配f,fab;

 []:匹配任意指定范围内的任意单个字符,必须且只有一个字符被匹配;例如f[abcd]可以匹配fa,fb,fc,fd但不能匹配fab,fac之类的多个字符;

  注意: 

  [a-z]:a,A,b,B,c,C…z

  [A-Z]:A,b,B…z,Z

 字符集:[::]

 这些字符集,如果要用则必须把他放入中括号(通配符)中即两对括号

 [:lower:]表示所有的小写字母;

 [:upper:]表示所有的大写字母;

 [[:lower:]]通配任意单个小写字母;

 [:alpha:]表示所有字母字符;

 [:digit:]表示所有的十进制数字;

 [:alnum:]表示所以大小写字母以及十进制数字;

 [:space:]表示空白字符;

 [:punct:]所有的标点符号;

 ^:取反

 例:ls p[^a]d(不要小写字母a)

 问题:显示/etc/目录下,以非字母开头,且其后跟了一个字母

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


 

 十.输入出处重定向

 在使用计算机的时候,实现某种功能的主体是:程序;

 程序=指令+数据;

 数据:文件,一切皆文件;

 可以用来输入的设备:文件;键盘文件,文件系统中的常规文件,网卡设备,声卡设备等;

 可以用来输出的设备:文件,显示器,文件系统中常规文件,网卡设备,声卡设备等;

 

 每一种程序都会有三种形式的数据流

 输入的数据流:为程序获取数据流;默认的输入数据流的来源叫做键盘;

 输出的数据流:将程序处理的数据结果展示给用户的数据流;默认的输出数据流的终点是显示器;

 错误数据流:将程序无法处理或处理过程中出现问题的结果展示给用户的数据流;默认的错误数据流  的终点是显示器;

 

 从键盘输入的数据流称为标准输入;

 到显示器上的输出数据流成为标准输出;

 到显示器上的错误数据流称为标准错误输出,简称标准错误;

  

 IO重定向:采用非标准设备文件实现的IO操作;

 简单来说:

 不是从键盘设备完成的数据流输入就可以称为输入重定向或重定向输入;

 不是到显示器设备的正确输出数据流就被称为输出重定向或重定向输出;

 不是到显示器设备的错误输出数据流就被称为错误输出重定向或重定向错误输出;


  文件描述符:file Descriptor,FD(Linux用文件的方式来标识标准输入输出以及错误)

 0:标准输入,stdin

 1:标准输出,stdout

 2:标准错误,stderr

 

 输出重定向:

 输出重定向有两种

 一,输出重定向符“>”,其作用是,把命令的标准输出重定向到指定文件,覆盖文件的内容,这样该命令就不会在屏幕下显示,而是写入指定文件;“>”还可以直接创建文件如,>filename,可直接创建文件;

 输出重定向的一般格式:

 命令 > 文件

 例如

 $who > abc

 把命令who中输出重定向到abc文件中,在屏幕下看不到执行who的结果。查看abc文件的内容可以查看到who命令下的内容;

 二,输出附加定向符“>>”,其作用是,把命令的输出附加到指定文件后面,而该文件原有内容不被破坏;

 为了防止输出定向符“>”对文件的覆盖Linux中设定了一个命令,可以防止人们在无意识的情况下造成破坏性的操作;

 ~]#set–C   //开启防误覆盖开关;

 在此开关开启后可以使用“>|”符号继续覆盖重定向;

 ~]#set  +C  //关闭防误覆盖开关;


 错误重定向:

 其作用是,将命令执行系统所产生的错误提示输出到一个文件中;

 2>:覆盖错误重定向;

 2>>:追加错误重定向;


 合并标准输出和标准错误输出重定向:

 其作用是既可以输出标准输出的值到一个文件,又可以输出标准错误的值到文件;

 1)&>,&>>(方法新但不是所有bash都支持)

 2)COMMAND>|>> /PATH/to/SOMEFILE 2>&1(&1把错误标准输出也放入之前的标准输出路径中)

 

 /dev/null:BlackHole,BitBucket(位桶)

 ls/tmp/a.txt &> /dev/null

 ls/tmp/a.txt > /dev/null 2>&1(两者等价)


 输入重定向:

  <:唯一输入重定向符号;(对应路径的内容输入到命令进行操作)

 <<:Here Document此处文档;(在这个文档内当场添加内容,输入路径名退出)

 <<<:Here String此处字符串;

 输入重定向的一般格式:

 命令 < 文件名

 

 tr:具有转换,删除的功能;

 利用tr命令将小写字母转换成大写字母,将数字删除等,tr命令不破坏文件内容;

 关于tr命令的使用可以结合管道线和输入输出重定向操作结合使用

 选项:

 -d:删除指定字符串中的内容;

 -s:删除所有重复出现的字符序列,如空格tr -s "\n"

 例如:

 #cat file | tr -d "Snail" > new_file

 这里,凡是在file文件中出现的‘S‘,‘n‘,‘a‘,‘i‘,‘l‘字符都会被删除!而不是紧紧删除出现  的"Snail”字符串。

 # cat file | tr -d "\n\t" >new_file

 删除文件file中出现的换行‘\n‘、制表‘\t‘字符

 [[email protected]]# tr -d ‘0-9‘ < /etc/passwd

 (删除0-9的数字)

 [[email protected]]# tr ‘a-z‘ ‘A-Z‘ < /etc/passwd

 (将小写转换成大写)

 #cat file | tr -s "\n" > new_file

 删除空行

 [[email protected]~]$ wc << /etc/onit

 >hello

 >everyone

 >/etc/onit(以此为结尾)

 2  2 15

 [[email protected]~]$

 

 [[email protected]]# cat > /etc/aqq <<EOF

 >hell

 >aaa

 >EOF(以此结束)

 [[email protected]]# cat /etc/aqq

 hell

 aaa

 十一.管道(使用管道的命令必须要有标准输出,没有标准输出就没有下一个命令的输入数据流)

    前面一个命令的输出结果作为后面一个命令的输入;

   |:

  COMMAND|COMMAND2|COMMAND3|…

  注意:所有的用于管道连接的命令,都应该是能够有标注输出数据流的命令;

  head–n 9 /etc/passwd |tail –n 1

  tee:保存在文件里,同时标准输出;

  例

  [[email protected]]# echo hhhh | tee /tmp/tee.out

  hhhh               //先从echo输出,再保存在文件中

  [[email protected]]# cat /tmp/tee.out

  hhhh

  [[email protected]]#

 

  [[email protected]]# echo "wujunqi,wujunqi2" | tr ‘,‘ ‘\n‘

  wujunqi

  wujunqi2

  [[email protected]]#













 



















  


  







  


以上是关于Linux基本命令解析的主要内容,如果未能解决你的问题,请参考以下文章

Linux操作系统基础解析之——Linux基本命令剖析

Linux基本命令解析

Linux操作系统基础解析之——Linux基本命令剖析

Linux操作系统基础解析之——Linux基本命令剖析

linux基本命令操作-目录与文件的配置和管理

Linux基本命令