别名命令:alias
命令别名是一个很有趣的东西,特别是你的惯用指令特别长的时候!还有, 增设默认的选项在一些惯用的指令上面,可以预防一些不小心误杀文件的情况发生的时候! 举个例子来说,如果你要查询隐藏文件,并且需要长的列出与一页一页翻看,那么需要下达“ ls -al | more ”这个指令,鸟哥是觉得很烦啦! 要输入好几个单字!那可不可以使用 lm 来简化呢?当然可以,你可以在命令列下面下达:
[dmtsai@study ~]$ alias lm='ls -al | more'
立刻多出了一个可以执行的指令喔!这个指令名称为 lm ,且其实他是执行 ls -al | more 啊!真是方便。不过, 要注意的是:“alias 的定义规则与变量定义规则几乎相同”, 所以你只要在alias 后面加上你的 {“别名”='指令 选项...' }, 以后你只要输入 lm 就相当于输入了 ls -al|more这一串指令!很方便吧!另外,命令别名的设置还可以取代既有的指令喔!举例来说,我们知道 root 可以移除 (rm)任何数据!所以当你以 root 的身份在进行工作时,需要特别小心, 但是总有失手的时候,那么 rm 提供了一个选项来让我们确认是否要移除该文件,那就是 -i 这个选项!所以,你可以这样做:
[dmtsai@study ~]$ alias rm='rm -i'
那么以后使用 rm 的时候,就不用太担心会有错误删除的情况了!这也是命令别名的优点啰!那么如何知道目前有哪些的命令别名呢?就使用 alias
[dmtsai@study ~]$ aliasalias egrep='egrep --color=auto'alias fgrep='fgrep --color=auto'alias grep='grep --color=auto'alias l.='ls -d .* --color=auto'alias ll='ls -l --color=auto'alias lm='ls -al | more'alias ls='ls --color=auto'alias rm='rm -i'alias vi='vim'alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
由上面的数据当中,你也会发现一件事情啊,我们在第九章的 vim 程序编辑器里面提到 vi 与vim 是不太一样的,vim 可以多作一些额外的语法检验与颜色显示。一般用户会有 vi=vim 的命令别名,但是 root 则是单纯使用 vi 而已。 如果你想要使用 vi 就直接以 vim 来打开文件的话,使用“ alias vi='vim' ”这个设置即可。 至于如果要取消命令别名的话,那么就使用 unalias吧!例如要将刚刚的 lm 命令别名拿掉,就使用:
[dmtsai@study ~]$ unalias lm那么命令别名与变量有什么不同呢?命令别名是“新创一个新的指令, 你可以直接下达该指令”的,至于变量则需要使用类似“ echo ”指令才能够调用出变量的内容! 这两者当然不一
样! 历史命令:history bash 有提供指令历史的服务!那么如何查询我们曾经下达过的指令呢?就使用history
[dmtsai@study ~]$ history [n][dmtsai@study ~]$ history [-c][dmtsai@study ~]$ history [-raw] histfiles选项与参数:n :数字,意思是“要列出最近的 n 笔命令列表”的意思!-c :将目前的 shell 中的所有 history 内容全部消除-a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,则默认写入 ~/.bash_history-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;-w :将目前的 history 记忆内容写入 histfiles 中!范例一:列出目前内存内的所有 history 记忆[dmtsai@study ~]$ history# 前面省略1017 man bash1018 ll1019 history1020 history# 列出的信息当中,共分两栏,第一栏为该指令在这个 shell 当中的代码,# 另一个则是指令本身的内容喔!至于会秀出几笔指令记录,则与 HISTSIZE 有关!范例二:列出目前最近的 3 笔数据[dmtsai@study ~]$ history 31019 history1020 history1021 history 3范例三:立刻将目前的数据写入 histfile 当中[dmtsai@study ~]$ history -w# 在默认的情况下,会将历史纪录写入 ~/.bash_history 当中![dmtsai@study ~]$ echo ${HISTSIZE}1000
在正常的情况下,历史命令的读取与记录是这样的:
当我们以 bash 登陆 Linux 主机之后,系统会主动的由主文件夹的 ~/.bash_history 读取以前曾经下过的指令,那么 ~/.bash_history 会记录几笔数据呢?这就与你 bash 的HISTFILESIZE 这个变量设置值有关了!
假设我这次登陆主机后,共下达过 100 次指令,“等我登出时, 系统就会将 101~1100 这总共 1000 笔历史命令更新到 ~/.bash_history 当中。” 也就是说,历史命令在我登出时,会将最近的 HISTFILESIZE 笔记录到我的纪录档当中啦!
当然,也可以用 history -w 强制立刻写入的!那为何用“更新”两个字呢? 因为~/.bash_history 记录的笔数永远都是 HISTFILESIZE 那么多,旧的讯息会被主动的拿掉! 仅保留最新的!
那么 history 这个历史命令只可以让我查询命令而已吗?呵呵!当然不止啊! 我们可以利用相
关的功能来帮我们执行命令呢!举例来说啰:
[dmtsai@study ~]$ !number[dmtsai@study ~]$ !command[dmtsai@study ~]$ !!选项与参数:number :执行第几笔指令的意思;command :由最近的指令向前搜寻“指令串开头为 command”的那个指令,并执行;!! :就是执行上一个指令(相当于按↑按键后,按 Enter)[dmtsai@study ~]$ history66 man rm67 alias68 man history69 history[dmtsai@study ~]$ !66 <==执行第 66 笔指令[dmtsai@study ~]$ !! <==执行上一个指令,本例中亦即 !66[dmtsai@study ~]$ !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 所覆盖更新了) 。
Linux查看History记录加时间戳小技巧熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more6 ./test.sh 7 vim test.sh 8 ./test.sh 但是这里只显示了命令,并没有显示执行命令的时间,因为保存历史命令的~/.bash_history里并没有保存时间。通过设置环境变量 export HISTTIMEFORMAT="%F %T `whoami` " 给history加上时间戳[root@servyou_web ~]# export HISTTIMEFORMAT="%F %T `whoami` "[root@servyou_web ~]# history | tail1014 2011-06-22 19:17:29 root 15 2011-06-22 19:13:02 root ./test.sh 1015 2011-06-22 19:17:29 root 16 2011-06-22 19:13:02 root vim test.sh 1016 2011-06-22 19:17:29 root 17 2011-06-22 19:13:02 root ./test.sh 1017 2011-06-22 19:17:29 root 18 2011-06-22 19:13:02 root vim test.sh 1018 2011-06-22 19:17:29 root 19 2011-06-22 19:13:02 root ./test.sh 1019 2011-06-22 19:17:29 root 20 2011-06-22 19:13:02 root vim test.sh 1020 2011-06-22 19:17:29 root 21 2011-06-22 19:13:02 root ./test.sh 1021 2011-06-22 19:17:29 root 22 2011-06-22 19:13:02 root vim test.sh 1022 2011-06-22 19:25:22 root 22 2011-06-22 19:13:02 root vim test.sh 1023 2011-06-22 19:25:28 root history | tail可以看到,历史命令的时间戳已经加上了,但是.bash_history里并没有加上这个时间戳。其实这个时间记录是保存在当前shell进程内存里的,如果你logout并且重新登录的话会发现你上次登录时执行的那些命令的时间戳都为同一个值,即当时logout时的时间。尽管如此,对于加上screen的bash来说,这个时间戳仍然可以长时间有效的,毕竟只要你的server不重启,screen就不会退出,因而这些时间就能长时间保留。你也可以使用echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile 然后source一下就OK
来自:鸟哥私房菜
https://www.cnblogs.com/gaohong/p/4664214.html