Shell、内外部命令――Linux基本命令(2)
1.ShellShell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行. shell也被称为LINUX的命令解释器(commandinterpreter). vshell是一种高级程序设计语言.
2.bash shellGNUBourne-AgainShell(bash)是GNU计划中重要的工具软件之一,目前也是Linux标准的shell,与sh兼容. (1)查询当前系统使用哪个Shell使用echo$SHELL echo的作用是输入什么就输出什么,因此,echo一个变量值就是把变量引用出来,即可以显示当前系统的Shell为bash。 PS:一定要输入$,否则系统会不识别它是个变量,仅仅把它当做一个字符串显示。 (2)查询当前系统已安装的所有shell使用cat/etc/shells 3.Shell提示符(1)提示符格式bash最原本格式为: 显示名称和版本号。 但是这种提示符格式不是很实用,因此centos6将提示符默认值改成如下格式: 此格式可以直观地显示出当前用户名root和主机名centos6和目录~和用户类型#。 (2)查询主机名查询主机名的命令为hostname 可以发现,提示符显示的主机名并不是完整的主机名,只是显示最前面部分,为了方便区分。 (3)目录显示~表示当前目录。如果没有进入时默认为~。 当进入一个目录时,会显示路径的最后一截。 可以发现,提示符显示的路径也不是完整的路径,只是显示最后一部分,为了方便确认用户确实已经进入这个目录下。
(4)查询当前的目录使用命令pwd 如图,显示当前目录。
(5)用户类型#表示root用户,$表示普通用户。 (6)修改提示符PS1是提示符格式的变量名,因此可以使用echo查看提示符格式 可以看出格式就是提示符的格式。 一些提示符格式如下: u: 当前用户 h: 主机名简称 H: 完整主机名 w: 完整的工作目录名称,家目录会以 ~代替 W: 最后一个目录 t: 24小时时间格式 T: 12小时时间格式 !: 命令历史数 #: 开机后命令历史数
如果想要修改格式,可以将PS1重新赋值,使用=赋值。 我们将h改为大写H,W改为小写w,注意要在$后面敲一个空格,使格式美观。 我们发现,主机名和用户名都显示为完整的了。 PS:$前面应输入两个,因为$本身是一个特殊字符,$才可以可以使它转译为普通字符。
(7)永久修改提示符我们发现,仅仅用上面的方法,exit退出再登陆之后又恢复为原始默认的状态。因此,我们有一个方法使其永久修改。 将export PS1="[u@H w]$ "命令添加到当前登录用户的~/.bashrc文件中的最后一行,然后使用$ source ~/.bashrc#使其生效。
(8)修改颜色使用PS1="[e[33m][u@hW]$ [e[0m]"修改提示符颜色 颜色表如下: 如图,修改成功: 4.内部命令与外部命令内部命令:由shell自带的,而且通过某命令形式提供 内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。
外部命令:在文件系统路径下有对应的可执行程序文件 外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。 5.命令类型(1)判断命令类型使用type可以判断一个命令是内部命令还是外部命令 如图,cd为内部命令,ifconfig为外部命令。
(2)enable显示所有启用的内部命令(3)enable |wc -l 统计启用的内部命令数量(l是字母不是数字1)统计出共61条 (4)enable -n COMMAND禁用命令输入enable ?Cn bg,就可以禁用bg。 输入enable |wc ?Cl 查询发现只有60个 再用enable查询,发现果然没有bg了,即被禁用了。 输入enable ?Cn可以查询所有被禁用的命令 同样,可以使用enable-n |wc -l统计被禁用的内部命令数量 (5)enable COMMAND启动命令使用enable可以使被禁用的命令重新启动 将那三条命令重新启动,查询被禁用里面为空,且启动命令数又恢复到61个了。 (6)关于禁用禁用内部命令并不是说不能使用,而是需要从硬盘当中去寻找所对应的外部命令。 6. hash(1)缓存路径系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去变量PATH路径下寻找。 使用 echo 查看PATH的路径: 以冒号为间隔符,从左到右依次寻找。 利用hash缓存表可大大提高命令的调用速率。 如图,fdisk是一个外部命令,当运行过后,这个命令就多了一个hash,即将路径缓存了下来。 缓存过后就不用去PATH路径依次去找了。
※这里举一个例子。分别运行pwd和ifconfig,使其缓存到hash里,可以看到ifconfig的路径在pwd之前。然后我们使用cp命令,将ifconfig复制到pwd之前的路径并且也命名为pwd。从理论上来说,应该通过路径按照顺序从左到右去寻找,会先找到/usr/local/sbin/pwd,内容应该为ifconfig的内容,但是我们执行pwd之后发现仍然是pwd的结果,并且查询pwd的路径仍然为/bin/pwd。 这就说明,在之前运行的时候就已经将pwd的路径缓存到/bin/pwd中了,所以再次运行时不需要在PATH路径中依次寻找,而是调用hash缓存中的路径。 (2)hash 显示当前被hash的所有外部命令hash -l 显示当前被hash的外部命令,包含别名 (3)hash -d name删除hash现在我们将hash中的缓存的pwd删除,删除时需要输入的name就是用hash -l查到的别名。 可以看出列表中没有了pwd。 然后我们查看一下pwd的类型,发现地址变成之前复制过去的地址了,因为缓存被删除了。 所以此时执行pwd,应该是ifconfig的内容了。 PS:也可以使用hash -r 清空所有的hash。 hash -p /.../.... name 可以手动增加一个hash缓存。
总结:当执行一个命令时,它的优先级为:内部命令> hash> PATH (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |