Linux学习第4天
Linux内部命令和外部命令
内部命令:实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程
外部命令:是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin……等等。可通过“echo $PATH”命令查看外部命令的存储路径
type 可以用来查看一个命令是内部命令还是外部命令
语法
type(选项)(参数)
选项
-t:输出“file”、“alias”或者“builtin”,分别表示给定的指令为“外部指令”、“命令别名”或者“内部指令”;
-p:如果给出的指令为外部指令,则显示其绝对路径; -a:在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名
Hash缓存表
linux系统下会有一个hash表,当你刚开机时这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找
语法
hash [-l] [-r] [-p <path> <name>] [-t <command>]
选项
-l |
显示哈希表,包括路径 |
-r |
清除哈希表 |
-p <path> <name> |
向哈希表中增加内容 |
-t <command> |
显示指定命令的完整路径 |
alias别名命令
alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号''将原来的命令引起来,防止特殊字符导致错误。 alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件/etc/bashrc中
语法
alias(选项)(参数)
选项
-p:打印已经设置的命令别名
参数
命令别名设置:定义命令别名,格式为 命令别名=‘实际命令’
alias 的基本使用方法
alias 新的命令='原命令 –选项/参数
history命令
history命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件 该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令。例如,要执行第2个历史命令,则输入!2。历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量HISTSIZE进行控制
语法
history(选项)(参数)
选项
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中。
使用历史命令的一些快捷键
Ctrl+R 搜索历史
Ctrl+R 是我经常使用的一个快捷键。此快捷键让你对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键。
快速重复执行上一条命令
1. 使用上方向键,并回车执行。
2. 按 !! 并回车执行。
3. 输入 !-1 并回车执行。
4. 按 Ctrl+P 并回车执行
重复执行第 4 条命令,那么可以执行 !4
如:[root@localhost ~]# history
1 hisrory
2 history
3 cat
4 echo 1
5 haitort
6 history
[root@localhost ~]# !4
echo 1
1
HISTSIZE :控制命令历史记录的条数
如:[root@localhost ~]# HISTSIZE=10
[root@localhost ~]# history
1 hisrory
2 history
3 cat
4 echo 1
5 haitort
6 history
7 echo 1
8 HISTSIZE
9 HISTSIZE=10
10 history
使用HISTFILE更改历史文件存储
vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior
使用 HISTCONTROL 从命令历史中剔除连续重复的条目
[root@localhost ~]# export HISTCONTROL=ignoredups
[root@localhost ~]# pwd
/root
[root@localhost ~]# pwd
27 export HISTCONTROL=ignoredups
28 pwd
29 history
[root@localhost ~]# pwd
/root
[root@localhost ~]# history
使用 HISTCONTROL 清除整个命令历史中的重复条目上例中的 ignoredups 只能剔除连续的重复条目。要清除整个命令历史中的重复条目,可以将 HISTCONTROL 设置成 erasedups:
export HISTCONTROL=ignoredups
[root@localhost ~]# history
2 echo
3 history
[root@localhost ~]# echo
[root@localhost ~]# history
2 echo
3 history
使用 HISTIGNORE 忽略历史中的特定命令
# export HISTIGNORE=”pwd:ls:ls -ltr:”
# pwd
# ls
# ls -ltr
# service httpd stop
# history | tail -3
79 export HISTIGNORE=”pwd:ls:ls -ltr:”
80 service httpd stop
81 history
[Note that history did not record pwd, ls and ls -ltr]
原创文章,作者:mxl,如若转载,请注明出处:http://www.178linux.com/53510