1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,命令行基础知识,与,Linux,系统本身相比,其桌面环境提供的功能还是相当有限的,只能略尽部分辅助之力,桌面环境提供的任何工具实际上都是基于最基本的系统命令实现的,不管桌面环境怎样丰富和发展,都离不开命令行的支持,Linux,系统的强大功能完全表现在命令行中,Shell,是用户和,linux,内核之间的接口程序,用户在命令提示符下输入的每个命令都由,shell,先解释然后传给,linux,内核执行,Shell,是一个命令语言解释器,拥有自己内建的,shell,命令集,(,pwd,),其它命令是存在于文件
2、系统中某个目录下的单独程序,(,cp,rm,),“,内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件,主要内容,介绍,Shell,的命令行结构,标准输入与输出,输入输出重定向,管道,命令历史与命令别名,命令行结构,以空格或制表符隔开,命令选项通常以减号“,-,”开始,linux,还提供“,-,”为起始标志的命令选项(,GNU,选项),以“,-,”为起始标志的命令选项大多是单字符命令选项的同义词,具有相同的意义,命令选项和参数可以省略,采用默认值,man,显示系统当前日期和时间,列出系统的名字,以简单的输出形式列出指定目录下的文件,以长列表的输出形式列出指定目录下的文件
3、man uname,命令选项,命令选项主要用于限定命令的具体功能,同时也决定了命令的最终运行结果,每个命令通常提供大量的选项,因而具有丰富的功能,man ls,选项可以单独给出,也可以组合使用,选项本身也可带有参数,这样的选项及其参数必须单独列出,sort -k 5 -n -o sorted tobesorted,“,-k 5,”,:,5,是,-k,的参数,表示以第,5,个字段为关键字进行排序,“,-n,”,选项表示按数字的大小排序,“,-o sorted,”,:,sorted,是,-o,的参数,表示存储最终排序结果的输出文件,“,tobesorted,”,是命令参数,GNU,命令形式,so
4、rt -key=5 -n -o sorted tobesorted,组合命令,一次输入多个命令,命令之间用分号隔开,使用圆括号把若干命令合并在一起,使之构成一个组合命令,cd /etc/network;ls l,(cd /etc/network;ls l),组合命令,第一种形式:只是在一个逻辑行上并列输入多个命令,其效果同一次输入一个命令没有区别,第二种形式:把多个命令看做一个组合命令,所有命令的输出数据将会合并为一个输出流,两个并列命令的输出结果,使用管道把两个并列的命令与计算输入数据行数的,wc,命令连接起来,,wc,命令仅仅计数了,who,命令的输出结果,1,行,两个命令各自的输出数据已
5、合并到一起,,wc,命令计数的最终结果是,2,行,命令换行,如果命令较长,超出一个物理行的宽度,可以使用反斜线“,”把命令写到多个物理行上,继续输入,由系统自动延伸到后续行上,后台进程,在,linux,系统中,,Shell,通常以前台形式解释执行用户输入的命令。,在,Shell,的命令提示符,#,或,$,下,系统将会等待用户输入命令,直至用户按下,Enter,键,然后由,Shell,解释命令行,创建一个新的进程,执行用户提交的命令,最后给出命令的执行结果。,#,:超级用户,,$,:普通用户,在,Shell,解释执行命令期间,用户需要等待命令执行完成,中间不能做任何事情。,后台进程,Shell,
6、提供后台进程机制,以后台进程方式执行命令的同时,,Shell,将会立即输出命令提示符,等待用户输入新命令,从而并发地运行多个命令,命令后面增加一个“,&,”符号即为以后台方式运行命令,find /home -name core print&,在,/home,这个目录下查找名字为,core,的文件,并打印文件路径,给出作业号和进程,ID,1,:,1,是以后台作业方式运行的,find,进程的作业号,2771,:是,find,进程的,PID,为了跟踪和控制后台作业,使用作业控制命令,fg,把后台作业转为前台作业,使用进程控制命令,kill,利用进程,ID,杀死进程,如果后台进程有输出数据,其输出信息
7、将会随时出现在用户的终端屏幕上,可能会造成屏幕输出的混乱,标准输入、输出与错误输出,任何命令,包括,Shell,本身,通常总是读取来自终端键盘输入的数据,这个数据输入源称为标准输入(,stdin,),命令的运行结果通常总是输出到用户终端的屏幕上,这个输出目的地称作标准输出(,stdout,),在命令执行期间,如果出现问题,相应的错误信息也将输出到用户终端的屏幕上,这个输出目的通常称作标准错误输出(,stderr,),标准输入、输出与错误输出,程序加工处理,Shell,Linux,系统,标准输出,标准错误输出,标准输入,一旦注册到系统中,系统总是为用户打开三个默认的文件:标准输入(键盘)、标准输
8、出(终端屏幕)和标准错误输出(终端屏幕),终端屏幕,终端键盘,I/O,重定向,为了仔细分析命令的处理结果,有时需要把命令的标准输出保存到某个文件中,这就需要用到,Shell,的输出重定向机制,输出重定向符号,“”,“”,I/O,重定向,将,ls -l,命令的输出数据重定向并写到指定的文件,fname,中,若文件,fname,不存在,,Shell,会创建一个新文件,然后写入数据,若文件已存在,文件中原有内容将会被清除,代之以,ls -l,命令的输出数据,为了保留文件中原有数据,而把命令的输出数据追加到文件的后面,可以使用,”,”,ls -l fname,ls -l fname,I/O,重定向,任
9、何命令(包括,Shell,本身)的标准输入也可以重定向,使命令直接读取某个文件而不是键盘输入,输入重定向符号,“”,wc-l fname,wc,命令的功能是读取标准输入中的输入数据,分别计数输入数据中的字符数,字数和行数,使用重定向符号“,fname;wc -w fname,等价,管道,优点,当使用管道方式连接两个命令时,,Shell,将会把两个进程连接起来,利用管道的单向通信特征,把一个进程的标准输出传递到另一个进程的标准输入,Shell,将会协调两个进程的同步,使两个进程能够并发地运行,可以省略存储中间处理结果的临时文件,是一种特殊的,I/O,重定向,管道,常见用法,为滤通程序提供原始数据
10、ps -ef|grep cron,从,ps,命令输出的众多进程中找到某个特定的进程,(,cron,),ps,命令,查看在计算机系统中,有哪些程序正在执行及其执行情况,可以找出所有的,PID,和名称,可以列出所有程序占用内存的情况,grep,命令,最大的功能在于在一堆文件中查找一个特定的字串,管道,常见用法,利用管道把进程的输出数据传递给,sort,命令,使之按照一定的排序原则进行排序,最终输出排序后的结果,who|sort,who,命令,主要用于查看当前在线上的用户情况:登录用户名;使用终端设备;登录到系统的时间。,sort,命令,对文件中的各行进行排序。,sort,命令有许多非常实用的选项
11、这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。,管道,常见用法,把多个命令组合到一起,把命令的标准输出依次传递到下一个命令的标准输入,最终得到经过多个命令依次处理的结果,ps -ef|grep cron|grep v grep|gawk print$2,获取,cron,的进程,ID,ps-ef,:,获得进程列表,grep cron,:,提取与,cron,有关的进程信息,grep v grep,:,删除可能存在的“,grep cron”,进程,gawk print$2,:,截取位于第,2,个字段的进程,ID,管道,常见用法,复制和备份一个完整的目录,cd sourcedir,fi
12、nd.-print|cpio pduv newdir,把当前目录下的所有目录和文件按照原有的目录层次结构复制到一个新的目录位置,管道,常见用法,三通道的实用程序,tee,主要功能是通过标准输入接收并显示数据,同时把数据存储到指定的文件中,who|tee userlist,显示并保存当前所有注册用户的列表文件,who,tee,标准输出,userlist,管道,管道,元字符与文件名生成,在,linux,系统中,很多命令均使用文件作为命令参数,Shell,提供一种文件名生成机制,使用户能够利用元字符(或通配符)实行模式匹配,最终生成一个具有同一属性的文件列表,ls -l *.c,列出当前目录中的所有
13、C,程序文件,与文件名生成有关的元字符,字符,含义,实例,*,匹配,0,或多个字符,a*b,a,与,b,之间可以有任意长度的任意字符,也可以一个也没有,如,aabcb,axyzb,a012b,ab,?,匹配任意一个字符,a?b,a,与,b,之间必须也只能有一个字符,可以是任意字符,如,aab,abb,acb,a0b,list,匹配,list,字符集,中的任意单一字符,axyzb,a,与,b,之间必须也只能有一个字符,但只能是,x,或,y,或,z,如,:axb,ayb,azb,。,c1-c2,匹配,c1-c2,字符范围,中的任意单一字符 如:,0-9 a-z,a0-9b,0,与,9,之间必须也
14、只能取一个字符 如,a0b,a1b.a9b,!list,或,list,匹配 除,list,中的任意单一字符,a!0-9b,a,与,b,之间必须也只能有一个字符,但不能是阿拉伯数字,如,axb,aab,a-b,。,string1,string2,.,匹配,sring1,或,string2(,或更多,),其中一个字符串,aabc,xyz,123b,a,与,b,之间只能是,abc,或,xyz,或,123,这三个字符串之一,使用元字符匹配文件名,ls -l a-z*,列出任何以小写字母为起始字符的文件名,ls -l menu?,列出文件名前四个字符为,menu,,第五个字符为任何字符的所有文件,ls
15、l au*,列出以,s,或,u,为首字符的所有文件,ls -l a,*,u*,等价,ls -l A-Z*,ls -l !a-z*,ls -l a-z*,等价,列出以大写字母为首字符(或其他非小写字母)的所有文件,转义与引用,在,Shell,中,为了处理具有特殊意义的元字符,如,”,”*”,”?”,”|”,和,”&”,等,使之作为普通字符显示,可以使用,转义符号,”,、单引号或双引号,引用元字符,而被引用的元字符失去其特殊意义,对于某些普通字符,如果前面加上转义符号“,”,则具有特殊的意义,这些字符称作,转义字符,转义字符,简单说明,a,生成声音提示,b,退格符,e,Esc,字符,f,换页符,
16、n,换行符,r,回车符,t,制表符,v,竖向制表符,反斜线,单引号,Shell,支持的部分转义字符,可用于,echo,等命令中,以便控制输出数据的显示格式,echo,命令用于在显示器上输出字串,通常用来输出一些提示信息,转义与引用,$,echo “Hello”,Hello,$,echo “”Hello”,he said.”,“Hello”,he said.,$,echo “$var”,$var,$,echo “”,转义与引用,“”,可以转义单个字符,单、双引号之间的所有字符(包括元字符,-,非全部)均按普通文字本身解释,$,rm test file,删除名为,test file,的文件,$,e
17、cho *.c$var “testing”,*.c$var “testing”,$,ls -l Cc*,$,ls -l Cc*,转义与引用,$,echo “The current working directory of *$LOGNAME*”,The current working directory of *$LOGNAME*,$,echo,The current working directory of *$LOGNAME*,The current working directory of *ubuntu*,命令历史,Shell,的命令历史机制和编辑功能使用户能够重复利用先前输入的命令,
18、命令历史机制主要由,Shell,提供的一些内部命令和环境变量来实现,fc,命令,:列出,(-l,选项,),,编辑,(-e,选项,),或重新执行命令历史文件中记录的命令,history,命令,:列出命令历史缓冲区或文件中记录的命令,HISTFILE,变量,:指定命令历史文件,默认为,$HOME/.bash_history,HISTSIZE,变量,:指定命令历史文件的大小,默认值,500,命令历史,fc,命令,允许用户显示、不加编辑或稍加编辑地重新执行命令历史缓冲区或文件中保存的命令,$,fc-l 5 10,列出命令历史缓冲区或文件中序号为,510,的命令,命令历史,$,fc-l -3,列出最近输
19、入的,3,条命令,$,fc-l fc,列出最近输入的以,fc,为起始字符串的命令,$,fc-l echo,列出最近输入的以,echo,为起始字符串的命令,命令历史,$,fc -e vim 10 20,利用,vim,编辑并执行序号为,1020,之间的命令,$,fc -s,重复执行最近一次的命令,$,fc -s 115,重复执行先前的第,115,号命令,$,ls -l /home/inc1,列出,/home/inc1,目录中的文件,$,fc-s inc1=src,使用“,inc1=src,”修正先前的,ls,命令,然后再执行替换后的,ls,命令,命令历史,history,命令,是,fc,的一个特例
20、只是利用,fc,命令定义的一个命令别名,Alias history=fc -l,$,history,列出命令缓冲区或文件记录的命令,$,history 10,列出最近执行的,10,条命令,$history -c,清除命令历史缓冲区中的命令,命令历史,重复执行先前的命令,感叹号“,!,”表示引用命令历史缓冲区或文件中的命令,“,!,”表示不加修改地重复执行最近刚执行的命令,“,!string,”命令表示重复执行最近运行的,以给定的,string,为起始字符串的命令,“,!?string,?,”命令表示重复执行最近运行的,其中包含给定字符串,string,的命令,“,!n,”表示重复执行命令历史
21、缓冲区或文件中的第,n,号命令,“,!-n,”表示重复执行最近执行的倒数第,n,条命令,命令历史,命令行补充,当输入的命令名、文件名或变量名不完整时,可以使用制表符键“,Tab”,实现命令的补充,由,Bash,提供名字的剩余部分,节省用户的输入时间,可以利用这个机制查询和检索记不清的命令,命令历史,命令名补充,如果找不到以给定文字为起始字符串的命令,发出鸣叫声,如果恰好发现一个匹配,自动补齐剩下部分,如发现多个匹配,再按下,Tab,键,会显示一系列其前缀与用户输入部分匹配的命令,命令历史,文件名补充,当用户输入一个文件名的起始部分,按下,Tab,键,,Bash,会提供文件名的剩余部分,如发现一个匹配,会显示一个完整的文件名,如发现多个匹配,会尽可能地补充文件名的后续部分,直到遇到某个分界点需要由用户做出进一步的选择,连续两次按下,Tab,,会提供可选的文件名列表,变量名补充同文件名补充,命令别名,别名机制,使用户能够定义自己喜欢使用的命令名字,以便在输入别名时,,Shell,能够替换并执行实际的命令(包括选项),$,alias,cx,=,chmod,755,$,alias,ll,=,ls,-l,$,alias,cf,=,ls,|,wc,-w,$,alias,列出系统定义及用户设置的所有命令别名,$,unalias,cx,删除命令别名,$,unalias,-a,删除所有命令别名,






