Linux shell命令
最后一节了,shell命令的一些用法,概念,完了就开始去弄linux服务器了
shell简介
1 什么是shell shell的中文含义是,外壳,通俗的讲,shell是一个交互编程接口,通过获得用户输入来驱动操作系统内核来完成指定工作,它本身在用户与操作系统之间起到桥梁的作用。shell本身是一种解释型语言,shell除了作为命令解释程序以外,还是一种高级程序设计语言,,他有变量,关键字,有各种控制语句,支持函数模块,有自己的语法结构,利用shell程序设计语言,可以编写出功能很强但很简单的程序,shell是系统核心的一个重要外延,他能够调用系统内核的大部分功能,因此可以说,shell是linux最重要的实用程序。
shell最重要的功能就是命令解释,从这种意义上说,shell是一个命令解释器,linux系统上可执行文件的分类如下:
linux命令 存放在/bin /sbin目录下的命令
内置命令 出于效率的考虑,将一些常用命令的解释程序构造在shell内部
实用程序 存放在 /usr/bin /usr/sbin /usr/local/bin 等目录下的使用程序或者工具
用户程序 用户程序经过编译生成可执行文件后,也可作为shell命令运行
shell脚本 由shell语言编写的批处理文件
2 shell类型 linux系统提供多种不同的shell以供选择,常用的有Bourne Shell(sh) C-shell(csh) Korn Shell (ksh) 和 Bourne Again Shell(bash)
Bourne Shell 是其他shell的开发基础,也是Unix默认的shell
Linux Shell的功能(shell最重要的功能是命令解释,从这种意义上说,shell是一个命令解释器,但除了命令外,shell还具有如下一些重要功能)
1 通配符 * 代表任意的字符串, *.txt 代表和所有以 .txt 结尾的文件相匹配 ,,不过,除了*,还有很多其他的通配符,当输入 ls *.txt 后 ,寻找那些文件的任务并不是通过 ls 命令来完成的,而是由shell自己完成的,
ls *.txt
rea.txt rec.txt
这个命令首先被分隔成一系列的单词,ls 、 *.txt 。如果shell在某个单词中发现了 *,它会将整个单词当做统配模式解析,并用所有相匹配的文件替换它,因此,该命令在执行前就变成了 ls rea.txt rec.txt,而这将得到期望的结果
其余通配符:
? 仅与一个任意字符串匹配
【....】 同方括号中的任意一个字符串相匹配,这些字符可以用字符范围(1-9),离散值或同时使用两者表示,例如【a-zBE5-7】,同所有a-z之间的字符和BE567相匹配
【!....】 与不和方括号中的某个字符匹配
{c1,c2} 同c1或者c2相匹配,其中c1 c2 也是通配符,
/etc/*conf: /etc目录中所有以conf结尾的文件,*也配空字符串
*【!a-z】 当前目录中不以小写字符结尾的全部文件
3 重定向 每个命令都是用标准输入流,标准输出流,和标准错误流,这些标准流被告分配给键盘和显示器,在需要的时候,可以使用重定向临时改变这些默认分配,重定向是这样的一种过程,我们借助它指定一个用于替代某个标准文件的文件,对于输入文件,称之为输入重定向;对于输出文件,称之为输出重定向,对于错误文件,称为错误重定向,。当shell运行一个新的应用程序或者命令的时候,他会为进程自动创建3个文件描述,即标准输入(stdin),标准输出(stdout),和标准错误输出(stderr),它们被分别赋值0,1,2,标准输入通常默认为终端的键盘,标准输出和标准错误输出通常默认为终端的屏幕,在默认情况下,应用程序会从stdin中取得输入数据,并把stdin中取得的数据,和出错信息分别传给stdout和stderr,重定向就是要改变这些stdin stdout stderr 默认的去向。
1.输出重定向 简单地说,输出重定向就是把应用程序的标准输入或者标准输出重定向到某个指定的文件,而不是原来默认的标准输出,比如屏幕。它的操作符是 > >> 运用输出重定向可以比较方便的生成编辑某些文件。比较容易的和系统中的某些设备进行交互。
列出home目录下的所有的csv文件,并把结果保存到文件csv.out中
find /home -name "*.csv" > csv.out
获取系统内存使用信息并追加到文件sysinfo.out文件中
cat /proc/meminfo >> sysinfo.out
如果不想让别人在网络上ping到自己的机器,可以:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
如果不想看到某个命令的执行结果,可以将其丢弃掉:
ls -aR /home/wei > /dev/null
2.输入重定向 输入重定向就是把应用程序的标准输入重定向到指定的文件,这就可以使程序的输入源不限于键盘,也可以来源于文件,输入重定向的操作符: < << ,与输出重定向相比,输入重定向运用的地方要少一些,不过某些情况下使用他们可以起到很好的效果,下面是输入重定向使用的一些实例:
在当前目录下快速创建一个空文档ra.dat
cat > ra.dat < /dev/null
在局域网上给其他人发消息
mail -s "xxxx" user1 user2 < ra.dat
统计文件text.out中的行数和字数
wc -l -w < test.out
<filename 将标准输入重定向到文件filename
>filename 除非文件filename已存在并被设置了noclobber,否则标准输出将被重定向到文件filename。如果文件filename不存在且没有设置noclobber标记,那么重定向操作将创建这个文件
3 管道 经常需要使用一系列的命令完成某项任务,例如,如果需要查看登录系统的用户的一个列表,可以使用who命令,然而,如果需要该列表的一个硬复制,则需要两个命令,首先使用who命令得到该列表,并且使用重定向将结果保存在一个文件中,然后使用lpr命令打印这个文件,通过使用管道,可以避免创建中间文件。管道是一种运算符,它将一个命令的输出临时保存在缓冲区中,与此同时保存在缓冲区的该输出又被用作下一个命令的输入,第一个命令必须能发送其输出到标准输出,第二个命令必须能够从标准输入读入其输入,管道符号是一个垂直的竖线 |
管道在某种程度上是输入和输出的重定向的结合,其原理和物理管道类似,一个进程向管道的一端发送数据,而另一个进程从该管道的另一端读取数据,管道符号是 | 假设想找出有多少对应的文件,而不想将它们保存到一个临时文件,可以使用: ls images/*.png | wc -1 表示将 ls 命令的标准输出重定向到 wc 命令的输入,这样就直接得到了想要的结果。也可以使用去除扩展名的文件列表 ls images/*.png | sed -e 's/\.png$//g' > the_list
或者,如果想要直接查看结果而不想保存到某个文件,可以使用 ls images/*.png | sed -e 's/\.png$//g' | less
别名 alias name = command-definition alias是命令关键字,name是要创建的别名的名称,command-definition是代码,在赋值运算符(=)的前后不能包含空格
命令行补全 这是一个十分有用的功能,它的作用是让用户尽量少操劳,tab键
命令替换 作用是将命令的输出结果赋给一个变量,或者将命令的输出结果带入字符串,所有的shell都是用反引号来执行命令替换
将awk命令的输出赋给变量name,并显示出来。 ls 'ls /etc' 反引号那里ls的命令的输出是/etc目录下的文件列表,这些文件名将成为第一个ls命令的参数,当前目录下在/etc里同名的文件都被列了出来 set ‘date’ set命令把date命令的输出赋给位置参量,
命令历史 shell提供一个由命令、环境变量和文件结合而成的大量命令历史记录的功能,
linux shell 元字符 在shell中有一些具有特殊意义的字符,称为元字符,如果不加以特殊的方式指明,shell并不会把他们当做普通文字来使用
/ 按字面意思解释它后面的那个字符
& 后台执行字符,在一个命令前加上字符&,这个命令就会在以后台方式执行
; 分隔命令
$ 替换变量
? 匹配单个字符
[abc] 匹配这组字符中的某个字符,a b c
[!abc] 匹配这组字符以外的某个字符
* 匹配0个或者多个字符
() 在子shell中执行命令
{} 在当前shell中执行命令
\<Enter> 续航符,可以使用续航符将命令行分写在多行上
| 管道字符
" 在.....中间的字符会被当做文字处理并允许变量值置换
' 在.....中间的字符会被当做文字处理,指令,文件名,保留字等都不再具有原来的意义
> 输出重定向字符
< 输入要重定向的字符
(cmds) 在子shell中执行命令
{cmds} 在当前shell中执行命令
shell变量和shell环境
变量是一个可以保存值得内存地址,每种shell都允许创建,保存和访问位于变量中的值。每个shell变量必须拥有一个名称,变量名必须以一个英文字母或者下划线字符开头,后接0个或者多个字母,数字或者下划线字符,存在两大类型变量。用户定义变量和与定义变量
了解shell的内置命令 shell有很多内置在源代码中的命令,这些命令都是内置的,所以shell不比到磁盘上搜索他们,执行速度快,bash提供的help功能,可以提供任何内置命令的在线帮助
完了0.0一本书看了2个月还没记住点什么,哎,真是失败。。