`

第十一章 命令别名与历史命令

 
阅读更多
我们知道在早期的 DOS 年代,清除屏幕上的信息可以使用 cls 来清除,但是在 Linux 里面, 我们则是使用 clear 来清除画面的。那么可否让 cls 等于 clear 呢?可以啊!用啥方法? link file 还是什么的?别急!底下我们介绍不用 link file 的命令别名来达成。那么什么又是历史命令? 曾经做过的举动我们可以将他记录下来喔!那就是历史命令啰~底下分别来谈一谈这两个玩意儿。

命令别名配置: alias, unalias

命令别名是一个很有趣的东西,特别是你的惯用命令特别长的时候!还有, 增设默认的选项在一些惯用的命令上面,可以预防一些不小心误杀文件的情况发生的时候! 举个例子来说,如果你要查询隐藏档,并且需要长的列出与一页一页翻看,那么需要下达『 ls -al | more 』这个命令,我是觉得很烦啦! 要输入好几个单字!那可不可以使用 lm 来简化呢?当然可以,你可以在命令行下面下达:

[root@www ~]# alias lm='ls -al | more'


立刻多出了一个可以运行的命令喔!这个命令名称为 lm ,且其实他是运行 ls -al | more 啊!真是方便。不过, 要注意的是:『alias 的定义守则与变量定义守则几乎相同』, 所以你只要在 alias 后面加上你的 {『别名』='命令 选项...' }, 以后你只要输入 lm 就相当于输入了 ls -al|more 这一串命令!很方便吧!

另外,命令别名的配置还可以取代既有的命令喔!举例来说,我们知道 root 可以移除 (rm) 任何数据!所以当你以 root 的身份在进行工作时,需要特别小心, 但是总有失手的时候,那么 rm 提供了一个选项来让我们确认是否要移除该文件,那就是 -i 这个选项!所以,你可以这样做:

[root@www ~]# alias rm='rm -i'


那么以后使用 rm 的时候,就不用太担心会有错误删除的情况了!这也是命令别名的优点啰! 那么如何知道目前有哪些的命令别名呢?就使用 alias 呀!

[root@www ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias lm='ls -l | more'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --show-dot --show-tilde'


由上面的数据当中,你也会发现一件事情啊,我们在第十章的 vim 程序编辑器里面提到 vi 与 vim 是不太一样的,vim 可以多作一些额外的语法检验与颜色显示,默认的 root 是单纯使用 vi 而已。 如果你想要使用 vi 就直接以 vim 来开启文件的话,使用『 alias vi='vim' 』这个配置即可。 至于如果要取消命令别名的话,那么就使用 unalias 吧!例如要将刚刚的 lm 命令别名拿掉,就使用:

[root@www ~]# unalias lm


那么命令别名与变量有什么不同呢?命令别名是『新创一个新的命令, 你可以直接下达该命令』的,至于变量则需要使用类似『 echo 』命令才能够呼叫出变量的内容! 这两者当然不一样!很多初学者在这里老是搞不清楚!要注意啊! ^_^

例题:
DOS 年代,列出目录与文件就是 dir ,而清除屏幕就是 cls ,那么如果我想要在 linux 里面也使用相同的命令呢?
答:
很简单,透过 clear 与 ls 来进行命令别名的建置:
alias cls='clear'
alias dir='ls -l'

历史命令:history

前面我们提过 bash 有提供命令历史的服务!那么如何查询我们曾经下达过的命令呢?就使用 history 啰!当然,如果觉得 histsory 要输入的字符太多太麻烦,可以使用命令别名来配置呢! 不要跟我说还不会配置呦! ^_^

[root@www ~]# alias h='history'


如此则输入 h 等于输入 history 啰!好了,我们来谈一谈 history 的用法吧!

[root@www ~]# history [n]
[root@www ~]# history [-c]
[root@www ~]# history [-raw] histfiles
选项与参数:
n   :数字,意思是『要列出最近的 n 笔命令行表』的意思!
-c  :将目前的 shell 中的所有 history 内容全部消除
-a  :将目前新增的 history 命令新增入 histfiles 中,若没有加 histfiles ,
      则默认写入 ~/.bash_history
-r  :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w  :将目前的 history 记忆内容写入 histfiles 中!

范例一:列出目前内存内的所有 history 记忆
[root@www ~]# history
# 前面省略
 1017  man bash
 1018  ll
 1019  history 
 1020  history
# 列出的信息当中,共分两栏,第一栏为该命令在这个 shell 当中的代码,
# 另一个则是命令本身的内容喔!至于会秀出几笔命令记录,则与 HISTSIZE 有关!

范例二:列出目前最近的 3 笔数据
[root@www ~]# history 3
 1019  history 
 1020  history
 1021  history 3

范例三:立刻将目前的数据写入 histfile 当中
[root@www ~]# history -w
# 在默认的情况下,会将历史纪录写入 ~/.bash_history 当中!
[root@www ~]# echo $HISTSIZE
1000


在正常的情况下,历史命令的读取与记录是这样的:

当我们以 bash 登陆 Linux 主机之后,系统会主动的由家目录的 ~/.bash_history 读取以前曾经下过的命令,那么 ~/.bash_history 会记录几笔数据呢?这就与你 bash 的 HISTFILESIZE 这个变量配置值有关了!

假设我这次登陆主机后,共下达过 100 次命令,『等我注销时, 系统就会将 101~1100 这总共 1000 笔历史命令升级到 ~/.bash_history 当中。』 也就是说,历史命令在我注销时,会将最近的 HISTFILESIZE 笔记录到我的纪录文件当中啦!

当然,也可以用 history -w 强制立刻写入的!那为何用『升级』两个字呢? 因为 ~/.bash_history 记录的笔数永远都是 HISTFILESIZE 那么多,旧的信息会被主动的拿掉! 仅保留最新的!
那么 history 这个历史命令只可以让我查询命令而已吗?呵呵!当然不止啊! 我们可以利用相关的功能来帮我们运行命令呢!举例来说啰:

[root@www ~]# !number
[root@www ~]# !command
[root@www ~]# !!
选项与参数:
number  :运行第几笔命令的意思;
command :由最近的命令向前搜寻『命令串开头为 command』的那个命令,并运行;
!!      :就是运行上一个命令(相当于按↑按键后,按 Enter)

[root@www ~]# history
   66  man rm
   67  alias
   68  man history
   69  history 
[root@www ~]# !66  <==运行第 66 笔命令
[root@www ~]# !!   <==运行上一个命令,本例中亦即 !66 
[root@www ~]# !al  <==运行最近以 al 为开头的命令(上头列出的第 67 个)


经过上面的介绍,瞭乎?历史命令用法可多了!如果我想要运行上一个命令, 除了使用上下键之外,我可以直接以『 !! 』 来下达上个命令的内容,此外, 我也可以直接选择下达第 n 个命令,『 !n 』来运行,也可以使用命令标头,例如 『 !vi 』来运行最近命令开头是 vi 的命令列!相当的方便而好用!

基本上 history 的用途很大的!但是需要小心安全的问题!尤其是 root 的历史纪录文件,这是 Cracker 的最爱!因为不小心的 root 会将很多的重要数据在运行的过程中会被纪录在 ~/.bash_history 当中,如果这个文件被解析的话,后果不堪吶!无论如何,使用 history 配合『 ! 』曾经使用过的命令下达是很有效率的一个命令下达方法!

转自:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_3.php
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    鸟哥的 Linux 私房菜第11章-认识与学习 BASH1

    在Linux中,Shell不仅是一个命令执行环境,它还提供了丰富的功能,如变量设定、数据流重定向、命令别名、历史命令记录等。 1. **硬件、核心与 Shell** 在计算机系统中,硬件执行实际的物理操作,而内核(Kernel)...

    鸟哥Linux私房菜

    11. **bash**:在第十一章全面介绍。bash(Bourne-Again Shell)是最常用的Linux shell之一,提供了丰富的功能和脚本支持。 12. **bashrc**:在第十一章第4.3节中描述。bashrc文件包含用户的shell配置选项和默认值...

    IBM AIX系列培训\IBM AIX系列培训 - 16 AU13第十五章 其他shell特点.zip

    在第十五章“其他shell特点”中,我们将会了解到shell作为用户与系统交互的界面,其在AIX环境中的独特特性和使用技巧。 shell是Unix和类Unix系统中的一种命令解释器,它允许用户通过文本命令来执行系统操作。在AIX...

    shell命令1-15pdf

    8. **脚本编写**:第十一章(11.pdf)可能教授如何编写Shell脚本,包括变量、函数、错误处理和脚本的执行权限。 9. **高级话题**:第十四章(14.pdf)和第十五章(15.pdf)可能包含更复杂的话题,如环境变量、别名...

    鸟哥linux私房菜

    - **alias**:用于创建自定义命令别名,详情见第十一章3.1节。 - **anacron**:用于管理非周期性的后台任务,详情参阅第十六章4.1节。 - **apropos**:用于搜索命令的手册页,详情见第五章3.1节。 - **array**:数组...

    TCK/TK组合教程

    第11章 规则表达式 11.1 规则表达式语法 11.2 regexp命令 11.3 常用的规则表达式 11.4 regsub命令 11.5 使用regsub给tcl转换数据 11.6 其他使用规则表达式的命令 第12章 脚本库和程序包 12.1 定位...

    shell快捷命令,shell快捷命令

    2. **历史命令**:通过`上下箭头`键,可以快速浏览并重复使用之前输入过的命令,无需重新输入,这对于频繁执行相同操作的用户非常有用。 3. **管道符 (|)**:管道符用于连接两个命令,将前一个命令的输出作为后一个...

    计算机软件基础:06第一章UNIX-Cshell.doc

    * 命令别名:用于将长命令简化为短命令。 * 目录别名:用于将长目录路径简化为短路径。 九、命令史机制 C shell提供了命令史机制,用于记录用户输入的命令,包括: * 命令历史记录:用于记录用户输入的命令。 * ...

    Linux常用命令大全.pdf

    字符串`:搜索并执行最近一个以该字符串开头的历史命令。 #### 十六、`alias` 命令 - **用途**:定义命令别名。 - **语法**: - `alias`:列出当前定义的所有别名。 - `alias &lt;定义的别名&gt;=&lt;实际的命令&gt;`:定义新...

    linux命令行大全.pdf

    12. 第十一章“正则表达式”虽然在给定文件内容中未直接提及,但通常作为Linux高级用户必须掌握的技能,其允许用户在文本处理中进行复杂和灵活的模式匹配和查找。 整体而言,这本书覆盖了Linux命令行的多个方面,从...

    Linux命令使用技巧集锦

    11. **awk命令**:强大的文本分析工具,可以处理复杂的文本格式,如`awk '{print $1}' file.txt`打印file.txt每行的第一个字段。 12. **vi/vim编辑器**:Linux下的文本编辑器,熟练使用它可以进行高效文本操作,如...

    计算机软件基础:06第一章UNIX_Cshell.doc

    《计算机软件基础》第六讲第一章主要讲解了操作系统中的Unix Shell,特别是C Shell的特点和使用。C Shell是一种Unix和类Unix系统中的命令解释器,它扩展了原始的B Shell功能,提供了更多的用户交互特性。 C Shell的...

    unix命令大全,txt格式文本,方便实用

    管道(`|`)用来连接两个命令,第一个命令的输出作为第二个命令的输入: - `command1 | command2` (使用管道连接命令) #### 十三、I/O 控制 ##### 13.1 重定向标准输出 重定向标准输出可以使用`&gt;`符号: - `command ...

    linux必须学的60个命令

    46. **alias**:创建命令别名,简化常用命令的输入。 47. **unalias**:取消命令别名。 48. **man**:查看命令的帮助文档。 49. **help**:查看Bash内置命令的帮助。 50. **history -c**:清除命令历史。 51. **exit...

    CISCO-IOS中文命令手册

    - **2.1 创建命令别名** - **用途**:简化常用命令的输入过程。 - **命令**: - `line vty 0 4` - `alias command aliasname` - 例如:`alias show int show interface` - **2.2 管理路由器ARP缓存** - **...

Global site tag (gtag.js) - Google Analytics