注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

谷搜互联网应用www.iguso.com

谷搜专注企业邮箱十二年

 
 
 

日志

 
 

命令别名与历史命令  

2014-05-28 14:33:49|  分类: 技术文章 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  在早期的 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 呀!asp.net空间

  [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 配合『 ! 』曾经使用过的指令下达是很有效率的一个指令下达方法!

  同一帐号同时多次登入的 history 写入问题

  有些朋友在练习 linux 的时候喜欢同时开好几个 bash 介面,这些 bash 的身份都是 root 。 这样会有 ~/.bash_history 的写入问题吗?想一想,因为这些 bash 在同时以 root 的身份登入, 因此所有的 bash 都有自己的 1000 笔记录在记忆体中。因为等到登出时才会更新记录档,所以啰, 最后登出的那个 bash 才会是最后写入的资料。唔!如此一来其他 bash 的指令操作就不会被记录下来了 (其实有被记录,只是被后来的最后一个 bash 所覆盖更新了) 。

  由于多重登入有这样的问题,所以很多朋友都习惯单一 bash 登入,再用工作控制 (job control, 第四篇会介绍) 来切换不同工作! 这样才能够将所有曾经下达过的指令记录下来,也才方便未来系统管理员进行指令的 debug 啊!

  无法记录时间

  历史命令还有一个问题,那就是无法记录指令下达的时间。由于这 1000 笔历史命令是依序记录的, 但是并没有记录时间,所以在查询方面会有一些不方便。如果读者们有兴趣,其实可以透过 ~/.bash_logout 来进行 history 的记录,并加上 date 来增加时间参数,也是一个可以应用的方向喔! 有兴趣的朋友可以先看看情境模拟题一吧!


文章源自谷搜企业邮箱服务商 命令别名与历史命令
  评论这张
 
阅读(7)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017