Shell、内外部命令——Linux基本命令(2)

1.Shell

Shell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行.

shell也被称为LINUX的命令解释器(commandinterpreter).

vshell是一种高级程序设计语言.


2.bash shell

GNUBourne-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="[\[email protected]\H \w]\$ "命令添加到当前登录用户的~/.bashrc文件中的最后一行,然后使用$ source ~/.bashrc#使其生效。

(8)修改颜色

使用PS1="\[\e[33m\][\[email protected]\h\W]\\$ \[\e[0m\]"修改提示符颜色

颜色表如下:

如图,修改成功:


4.内部命令与外部命令

内部命令:由shell自带的,而且通过某命令形式提供

内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。

外部命令:在文件系统路径下有对应的可执行程序文件

外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。


5.命令类型

(1)判断命令类型

使用type可以判断一个命令是内部命令还是外部命令

如图,cd为内部命令,ifconfig为外部命令。

(2)enable显示所有启用的内部命令

(3)enable |wc -l 统计启用的内部命令数量(l是字母不是数字1)

统计出共61条

(4)enable -n COMMAND禁用命令

输入enable –n bg,就可以禁用bg。

输入enable |wc –l 查询发现只有60个

再用enable查询,发现果然没有bg了,即被禁用了。

输入enable –n可以查询所有被禁用的命令

同样,可以使用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

时间: 2024-12-28 00:36:57

Shell、内外部命令——Linux基本命令(2)的相关文章

Linux shell编程命令-Linux基础环境命令学习笔记

1.正则表达式 1)^开始 *前一个字符重复0次以上 + 1次以上 ? 0次或者1次 . 一个任意字符(.*连用) {m,n} m到n次 [0-9][a-z] 任意数字或字母 $结束字符 2)sed和awk命令 sed '匹配条件/执行的动作' /etc/passwd sed 's/old/new/g' awk -F: '{print $1}' /etc/passwd 1表示第一列,2表示第二列 -F:表示分隔符为: 2.变量 1)环境变量 系统环境变量(/etc/profile) 用户环境变量

shell linux基本命令实例

1. 在当前目录下,查找20分钟内,被访问过的文件, 并将文件的详情显示出来: find ./ -name '*.log' -mmin -20 -exec ls -l {} \; 注释:其中{}将会被文件名替换,而;冒号用于表示命令结束.而;由于用于ls命令,而非find命令,所以需要escaped by \或者用单引号包起来. 2014年6月23日19:02:25 2.关于如何查看隐藏文件: ls -a 2014年6月24日09:39:02 3.grep正则表达式: 何为转义:将特殊符号当普通

linux shell 管道命令(pipe)使用及与shell重定向区别

linux shell 管道命令(pipe)使用及与shell重定向区别 看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令操作符是:"|",它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力.然后,传递给下一个命令,作为标准的输入 st

linux 基础 shell脚本命令

#########shell脚本命令#### 1.diff diff      file file1             ####比较两个文件的不同 -c                         ####显示周围的行 -u                         ####按照一格式统一输出生成补丁 -r                         ####比较两个文件的不同 patch       file file.path       ####打补丁 -b      

Linux——note shell常用命令 cut 、sort、unqi、tee、tr、split和shell中连接符&& ||

1.cut 常用作将一个文件分段 cut -d'分隔符' [-cf] n -d 后面指定分隔符,用单引号引起来. -f 指定第几段 -c 后面只有一个数字表示截取第几个字符,后面跟一个数字区域,表示截取从几到几. [[email protected] ~]# cut -d: -f 3 /etc/passwd [[email protected] ~]# cut -d: -f 3,4 /etc/passwd [[email protected] ~]# cut -c 10 /etc/passwd

linux shell wc 命令

1. 语法与选项 Short Option Long Option Option Description -c –bytes print the byte counts -m –chars print the character counts -l –lines print the newline counts   –files0-from=F read input from the files specified by NUL-terminated names in file F -L –ma

Linux Shell常用命令总结

1.   find       find pathname -options [-print -exec -ok]       让我们来看看该命令的参数:       pathname find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系统根目录.       -print find命令将匹配的文件输出到标准输出.       -exec find命令对匹配的文件执行该参数所给出的shell命令.相应命令的形式为'command' {} \;,注意{}和\:之间的空格,同时两个{}

Linux Shell系列教程之(八)Shell printf命令详解

本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell printf命令有了一个简略的介绍,本篇给大家详细介绍下Shell中的printf命令. 一.Shell printf命令语法 printf format-string [arguments...] format-string为描述格式规格的字符串,用来描述输出的排列方式,最好为此字符串加上引号.此字

SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 和oracle 查询数据中文乱码问题

一.SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 linux 设置系统语言 修改 /etc/sysconfig/i18n 文件,如 LANG="en_US.UTF-8",xwindow会显示英文界面, LANG="zh_CN.GB18030",xwindow会显示中文界面. 还有一种方法 cp /etc/sysconfig/i18n $HOME/.i18n 修改 $HOME/.i18n 文件(vim  $HOME/.i18n)