常识:
- 当用户登录后,“#”表示用户登录的是超级用户,“*”表示登录到系统的是普通用户。
- cd、pwd、exit和echo命令,都属于bash的内置命令,当用户登录系统后,shell以及内置命令就会被系统载入到内存中,一直运行,知道用户退出系统。Linux的发行版一般使用bash作为默认的shell。
- 除了内置命令外,Linux系统内还有很多可执行文件,例如ls是一个可执行文件,存放在/bin/ls目录下。这些命令与shell内置命名不同,只有他们被调用时,才被载入内存执行。
一、shell命令语法分析:
- shell命令的一般格式:
command [options] [arguments]
- command:表示命令的名称;
- options: 表示命令的选项,用于改变命令行的执行方式,一般选项前面有一个“-”符号,用户区别于参数;
- arguments:表示命令的参数,命令的操作对象,如文件或是目录。
eg:
> ls -a -l //显示所有文件的即信息
> ls -al //和上面的指令效果相同
> ls -a -l /etc //显示/etc目录下的所有文件的所有信息
- 有的命令可以不带参数,如ls命令,但是有的命令必须带有参数,如mv 命令至少带有两个参数,当参数不够时,shell就会给出错误提示。
> mv myLinux1.txt myLinux.txt
- shell在一个命令行中,还可以输入多个命令,用分号将各个命令分开,例如:
> ls -al;cp myLinux1.text myLinux2.txt
4.相反,也可以在多行中输入一个命令,用“\”将一个命令执行到下一行,如:
> cp -i \
> myLinux1.txt \
> myLinux2.txt
二、通配符
各个版本的shell都有通配符,用户可以在命令的参数中使用通配符,进行文件名或是路径名的匹配。
- bash中常用的通配符有“*”、“?”、“[]”。
- “*” ,匹配任意一个或多个字符
> ls *.txt //列出所有以.txt结尾的文件(除去以“.”开头的文件)
> cp doc/* /opt //将doc目录下的所有文件复制到opt目录下
- “?”,匹配任意一个单一字符
> ls ab?.txt //列出匹配ab开头,紧跟一个任意字符,并且以.txt结尾的文件
- “[]”,匹配任何包含在方括号内的单字符
> ls dov/sda3[12345] //匹配dov目录下,以sda3开头,第五个字符是1、2、3、4、5结尾的文件
// dov/sda31 dov/sda32 dov/sda33 dov/sda34 dov/sda35
上面的效果也可以这么写:
> ls dov/sda3[1-5]
- 通配符组合使用
> ls [1-9]?.txt //列出以数字开头,后面跟着一个任意字符,并且以.txt结尾的文件
> ls [xyz]*.txt //列出以x或y或z开头,以.txt结尾的文件
三、shell的重定向
Linux下,系统打开三个文件,即标准输入、标准输出、标准错误输出。用户的shell键盘将设置为标准输入,默认的标准输出和标准错误输出为屏幕。也就是说,用户从键盘输入,将结果和错误输出到屏幕上。
所谓重定向,就是不使用系统默认的标准 输入/ 输出,而是重新指定。因此重定向分为输入重构定向、输出重构定向和错误重定向。
-
输入重定向,用于改变命令行的输入源,利用输入重定向,可以将一个文件作为命令的输入源,而不从键盘输入。
输入重定向的操作符友“<”、“<<”
“<”使用如下:
> wc<anoconda-ks.cfg //用wc命令来统计输入给它的文件anoconda-ks.cfg的行数、单词数和字符数
“<<”操作符,告诉shell当前命令的标准输入来自 命令行中 一对分割号之间的内容。
如以下操作,讲一对分隔号aa之间的内容作为wc命令的输入:
分隔号可以时任意字符。shell将在第一个分割号后开始读取内容,直到出现另一个分割号读取结束,然后将内容送给wc命令处理。
-
输出重定向不是讲命令的输出结果输出在屏幕上,而是输出到一个指定的文件中。
用于输出重定向的操作符有“>”,“>>”。例如:
> ps -ef >ps.txt //这条命令讲ps -ef输出的系统运行的进程信息全部输出到ps.txt中,而不是输出到屏幕
>more file1 file2 file3 > file //more命令用于查看文件的内容,将file1、file2、file1文件合的内容全部输出到file文件中,类似于文件的合并。
注意:如果再“>”指定的文件不存在,shell就会自动创建一个;如果文件存在,那么文件原来的内容将被覆盖。如果不想文件类容被覆盖,可以使用“>>”操作符。
> ls -al /etc/* >>/root/install.log //将etc下的所有文件内容,追加到/root/install.log 文件后面。/root/install.log 原来的内容仍然存在。
-
错误重定向
使用操作符“2>”、“2>>”,实现对错误日志的重定向。
> tar zxvf text.tar.gz 2> error.log
tar 是打包命令,如果text.tar.gz是个损坏的文件,就会把错误信息输出到error.log文件中。
四、shell管道
管道可以把多个指令连接起来,把第一个指令的输出当成第二个指令的输入,第二个指令的输出当成第三个指令的输入,以此类推。因此,管道就是将一个命令的输出,当作另一个指令的输入,不经过任何中间件。
通过管道符 “|” ,可以进行指令的连接。如下:
> ls -al /etc/* | more //将/etc目录及其子目录的所有文件 分屏显示
五、shell中的引用
bash中有很多特殊意义的字符,如果再shell命令的参数中使用,就会抛错,Linux使用“引用”来忽略这些特殊字符的特殊意义,引用技术就是通知shell将这些字符当作普通字符处理。
shell 中,用于引用的字符有 转义字符“\”、单引号“ ' ”、双引号“ "" ”。
- 转义字符“\”,将“\”放在特殊字符的前面,shell就会忽略这些字符在bash中原有的含义,把他们当作普通字符对待。
> mv abc\?\* abc //讲 abc\?\* 重命名为 abc
> mv c\:\\backup backup //将 c\:\\backup 重命名为 backup ,因为文件包含特殊字符,所以用\转义字符。
- 单引号“ ' ”
如果将字符串放进一对单引号之间,那么该字符串所有特殊字符的特殊含义将被忽略。
> mv c\:\\backup backup //将 c\:\\backup 重命名为 backup ,因为文件包含特殊字符,所以用\转义字符。
> mv 'c:\backup' backup //与上面的命令等效
- 双引号“ '" ”
包含在双引号的字符都被shell看作时普通字符,除了“$”、“\”和“__”。如下,
”。如下,``仍然保持原有的意义。