咱们必需要经过“shell”将咱们输入的命令与内核通讯,好让内核能够控制硬件来正确无误地工做。shell
操做系统实际上是一组软件,因为这组软件在控制整个硬件与管理系统的活动监测,若是这组软件随意被用户操做,若用户应用不当,将会使整个系统崩溃。编程
只要可以操做应用程序的接口都可以称为shell。狭义的shell指的是命令行方面的软件。广义的shell则包括图形界面的软件。数组
目前的Linux可使用的shell(/etc/shells文件):bash
用户什么时候取得shell工做以及用户默认的shell记录在/etc/passwd文件内ui
了解命令是来自于外部命令(指的是其余非bash所提供的命令)或是内置在bash当中操作系统
type [-tpa] name命令行
参数:设计
type:不加任何参数时,type会显示出name是外部命令仍是bash内置命令排序
-t:type将name如下面这些字眼显示出它的意义:继承
file:表示位外部命令
alias:表示该命令为命令别名所设置的名称
builtin:表示内置命令
-p:若是后面接的name为外部命令时,才会显示完整文件名
-a:会有PATH变量定义的路径中,将全部含name的命令都列出来,包含alias
反斜杠(\)转移字符
只须要在变量名称前面加上$,或者是以${变量}的方式来显示均可以。
设置或者修改变量的内容:用“等号(=)”链接变量与它的内容
在bash中,当一个变量名称还没有被设置时,默认的内容是“空”的。
子进程:在目前这儿shell的状况下,其打开另外一个新的shell,新的shell就是子进程。在通常状态下,父进程的自定义变量是没法在子进程内是使用的。但经过export将变量编程环境变量之后,就可以在子进程下面使用了。
HOSTNAME:这台主机的主机名
TERM=这个终端机使用的环境是什么类型
SHELL=目前这个环境下使用的shell是哪个程序
HISTSIZE=记录命令的条数,在CentOS中默承认记录1000笔
USER=用户的名称
LS_COLORS=一些颜色显示
MAIL=和这个用户取用的mailbox位置
PATH:执行文件命令查找路径
INOUTERC=与键盘功能有关,能够设置特殊按键
PWD=目前用户所在的工做目录
LANG=这个与语系相关
HOME=这个用户的主文件夹
_=上一次使用的命令的最后一个参数(或命令自己)
RANDOM:“随机数”变量,内容介于0~32767之间
HISTFILE=历史命令记录的放置文件,隐藏文件
MAILCHECK=每60秒去扫描一次信箱有无新信
PS1=命令提示符的设置值
PS2=使用转义符号第二行之后的提示符
$目前这个shell所使用的PID
?刚才执行完命令的回传码
通常来讲,不管是否为环境变量,只要跟目前这个shell的接口操做有关的变量,一般都会被设置为大写字符,也就是说,基本上,在Linux默认的状况中,使用{大写字符}来设置的变量通常为系统内定须要的变量。
PS1(提示符的设置)
$(关于本shell的PID)
?(关于上个执行命令的回传码)
通常来讲,若是成功执行命令,则会回传一个0值,若是执行过程当中发生错误,就会回传“错误代码”,通常就是以非0的数值来替代
环境变量与自定义变量的差别:该变量是否会被子进程所继续使用
子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量
locale
环境变量能够被子进程所引用,可是其余的自定义变量内容就不会存在于子进程中
read:读取来自键盘输入的变量
参数:
-p:接提示信息
-t:接等待的“秒数”
declare/typeset:声明变量类型
参数:
-a:数组类型
-i:整型
-x:环境变量
-r:readonly类型,该变量不可被更改内容,也不能重设
在默认的状况下,bash对于变量有几个基本的定义:
ulimit [-SHacdfltu] [配额]
参数:
-H:hard limit,严格的设置,一定不能超过这个设置的数值
-S:soft limit,警告的设置,能够超过这个数值,可是若超过则有警告信息
-a:列出全部的限制额度
-c:当某些进程发生错误时,系统会将该进程在内存中的信息写成文件(排错用),这种文件就被称为内核文件(core file),此为限制每一个内核文件的最大容量
-f:此shell能够建立的最大文件容量(通常为2GB)单位为KB
-d:进程可以使用的最大断裂内存(segment)容量
-l:用于锁定(lock)的内存量
-t:可以使用的最大CPU时间
-u:单一用户可使用的最大进程(process)数量
命令别名设置:alias,unalias
历史命令:history 【n】
history 【-c】
history 【-raw】 histfiles
参数:
n:数字,是要列出最近的n条命令行
-c:将目前的shell全部的history内容所有消除
-a:将目前新增的history命令新增入histfiles中,若没有加histfiles,则默认写入~/.bash_history
-r:将histfiles的内容读到目前这个shell的history记忆中
-w:将目前的history记忆内容写入histfiles中(默认为~/.bash_history)
历史命令在注销时,会将最近的HISTSIZE条记录到记录文件当中
!number:执行第几条命令
!command:有最近的命令向前搜寻命令串开头为command的那个命令,并执行
!!:执行上一个命令
login shell:取得bash时须要完整的登录流程,读取/etc/profile(系统总体设置),~/.bash_profile或~/.bash_login或~/.profile(属于用户我的设置)
no-login shell:取得bash接口的方法不须要重复登陆的举动,读取~/.bashrc
其余相关配置文件
/etc/man.config:规定了使用man的时候man page的路径到那里去寻找
~/.bash_history:历史命令记录
~/.bash_logout:记录注销bash后系统完成的操做
执行一个命令的时候,这个命令可能会由文件读入数据,再将数据输出到屏幕上。
standard output:标准输出,命令执行所回传的正确信息
standard error output:标准错误输出,命令执行失败后,所回传的错误信息
数据流重定向能够将standard output(简称stdout)与standard error output(简称stderr)分别传送到其余的文件或设备去,分别传送所用的特殊字符以下:
1>:以覆盖的方法将正确的数据输出到指定的文件或设备上
1>>:以累加的方法将正确的数据输出到制定的文件或设备上
若是知道错误将要发生,将错误信息忽略掉而不显示或存储
将错误和正确的数据统统写入一个文件:2>&1也能够是&>
将本来须要由键盘输入的数据改由文件内容替代
<<表明结束输入的意思
使用命令输出重定向的缘由:
cmd;cmd(不考虑命令相关性的连续命令执行)
$? (命令回传码)与&&或||
cmd1 && cmd2:若cmd1执行完毕且正确执行($?=0),则开始执行cmd2
cmd1 || cmd2:若cmd1执行完毕且正确执行($?=0),则cmd2不执行
通常来书,假设判断式有三个:cmd1 && cmd2 || cmd3,cmd2和cmd3会放置确定能够执行成功的命令
管道命令(pipe)
管道命令“|”仅能处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于standard error output并无直接的处理能力。
在每一个管道后面接的第一个数据一定是“命令”,并且这个命令必需要能接受standard input的数据才行
cut:将一段信息的某一段“切”出来,处理的信息是以“行”为单位
cut –d ‘分隔字符’ –f fields(取出第几段)
cut –c 字符范围(以字符的单位去除固定字符区间)
grep:分析一行信息,若当中有须要的信息,就将该行拿出来
grep [-acinv] [—color=auto] ‘查找字符串’filename
参数:
-a:将binary文件以text文件的方式查找数据
-c:计算找到‘查找字符串’的次数
-i:忽略大小写
-n:输出行号
-v:反向选择,即显示没有‘查找字符串’内容的哪一行
--color=auto:将找到的关键字部分加上颜色显示
sort:排序命令,依据不一样的数据类型排序
uniq:将重复的数据仅列出一个显示
wc:文件里面的字数,行数和字符数
同时将数据流送与文件与屏幕(screen);而输出到标准屏幕的,其实就是stdout,可让下个命令继续处理
tee –a file:以累加的方式,将数据加入file中
字符转换命令:
tr:删除一段信息当中的文字,或者是进行文字信息的转换
tr [-ds] set1
参数;
-d:删除信息当中的set1这个字符串
-s:替换掉重复的字符
col [-xb]
参数:
-x:将tab键换成对等的空格键
-b:在文字内有反斜杠(/)
col常常被利用于将man page转存为纯文本文件以方便查阅的功能
join,将两个文件当中有相同数据的那一行加在一块儿
join [-ti12] file1 file2
参数:
-t:join默认以空格符分隔数据,而且对比“第一个字段”的数据
-i:忽略大小写
-1:表明第一个文件要用哪一个字段来分析
-2:表明第二个文件要用哪一个字段来分析