history and its relevant variables in Linux/GNU and Mac OS history命令以及相关环境变量
对于Terminalor们,history命令并不陌生,什么!n, !!更是很常用的,而且您在命令行敲的cmds是默认保存在/home/$USER/.bash_history(linux)
/Users/$USER/.bash_history(Mac)下的。
但是history不只是这个样子:存了命令然后可以查看调用。
先介绍几个与history相关的变量,控制history的行为和size
HISTIGNORE (hist-ignore) 告诉history哪些命令不需要保存,直接把它们忽略掉。
例如我的是:
HISTIGNORE="ls *:ll:ls:l:ll *:freq*:cd *:*.log:dl:dc:des:bi:pic:sublime:brackets:open*"
就是把常用的ls命令们忽略掉,这些都是很常用但是很少被再利用的“废料“,cd到哪哪哪也没用,还有就是查看log文件的也没用,freq*是我把常用的目录alias的
例如 alias freq1="cd ~/Edge/dl/GSE38600/NEW"
还有 dl dc des pic bi都对应一个alias, alias dl="cd ~/Downloads"这样的
还有 sublime brackets是我常用的editor,在Mac中是alias sublime="open -a sublime\ text",linux下直接用subl就好了
open*也是Mac下的
对于在Debian类的Linux系统的,常用的apt-get类命令可以alias
alias update="sudo apt-get update"
alias upgrade="sudo apt-get upgrade | tee ~/Documents/`date +%F_%H:%M:%S`-upgrade.log"
alias dist-upgrade="sudo apt-get dist-upgrade | tee ~/Documents/`date +%F_%H:%M:%S`-dupgrade.log"
alias remove="sudo apt-get remove"
alias install="sudo apt-get install"
alias purge="sudo apt-get purge"
...
然后把update,upgrade,dist-upgrade等添加到HISTIGNORE中
HISTSIZE 表示最多可以存多少条命令,默认的你可以看.bashrc或者.bash_profile里面一般把这个变量定义为1000
超过这个数字会自动把原来的命令挤出去,相当于一个隧道一样的。
但是真的很不够用的,我把HISTSIZE定义为1,000,000反正暂时也达不到这个要求,一般100,000也要很久才能达到
一般可以文件到了一定的大小把它备份了,再重新开始一个文件存,备份的可以写个bash函数并结合history来一起查看新旧文件
HISTFILESIZE 表示文件的最大大小,默认也是1000,自己按照自己的实际cmd量,DIY
HISTTIMEFORMAT (hist-time-format)当然是记录你敲的这条命令的时间,格式和·date·是一样的
我的是定义为:
HISTTIMEFORMAT="%F#%H:%M:%S " >>>>> 2015-04-08#04:27:32
HISTTIMEFORMAT="%F#%T " >>>>> 2015-04-08#04:27:32
[注意这个时间不会存到.bash_history中的,只是你用history查看的时候显示]
HISTCONTROL 相当于是.bash_history的质量(品质)控制,有ignoredups,erasedups (就是ignore duplicates,和 erase duplicates)
假如选择ignoreredups,就是忽略连续的重复,不连续的没作用。
假如你在调试一个程序,不停地 perl bowtie2_all.pl,假如尝试20次后最终成功的,但是history中就有了20条命令,
当然你可以应HISTIGNORE把这条命令忽略掉,但是很不明智,HISTCONTROL就可以啦,它会在存入时检查要存的命令是否合上一条一样
重复的话就忽略,也就是不存入
假如选择erasedups,当然会在存入时把要存入的命令和以后的所有命令比对一次,如果有重复的话,就会把这条命令不存入
还有一个trick:可以选择 ignorespace,意思就是,你在输入命令的时候如果最开始有一个空格,那么就会不存入这条命令,所以
你就可以把不想存入的命令前面加一个或者多个空格来忽略它。
HISTFILE当然就是自定义你要把命令存到哪里,默认是~/.bash_history,当然如果你不想存这儿,就指定要存的地方,OK。
例如 HISTFILE="/home/$USER/Backup/bash_2015_history"
[注意最好用绝对路径]
注意,这些变量的定义存入.bashrc,然后再命令行 source ~/.bashrc,意思就是把我修改过的.bashrc中的设置覆盖已经读到内存中的设置(以后打开的terminal都会用这个设置,在source之间打开的,除了这个窗口,都保持原来的设置)
很讨厌用export来导入,因为在你关掉这个Terminal或者重启之后这个设置就没有了,因为每次打开Terminal都会重读.bashrc
当然我直接把export VARIABLE=CONTENT写入.bashrc不就好了,但是直接用VARIABLE=CONTENT就好了,何必再多敲7个字符呢
还有就是,所有的你在这个窗口中敲的命令会在这个窗口exit或者close后才写入.bash_history中,(缓存机制),如果想敲一条写一条的话,呵呵,来一个trick
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
PROMPT_COMMAND就是.bash_rc中定义的PS1啦,也就是每次的admin@Ubuntu : ~ $,上面的trick就是在每次Prompt前将命令存入,-a可以指定其他文件名,
但默认是.bash_profile
由于bash的history文件默认是覆盖,如果存在多个终端,最后退出的会覆盖以前历史记录,改为追加形式:shopt -s histappend,不过默认在.bashrc中是有的,无需再填
history N 查看最新存入的N条命令: 相当于 history | tail -n N
!N 查看并运行存入的第N条命令: history | sed -n 'Np'(只查看的话)
!! 查看并运行上一条命令
!STR 查看以STR打头的命令
但是我更喜欢 : alias hist="history | grep "
-w / -r/ -c 分别是 write to / read from / clear
Ctrl + R 也是常用的history搜索
Reference:
1. http://www.jb51.net/LINUXjishu/157030.html
2. http://blog.csdn.net/dyllove98/article/details/9412805
history and its relevant variables in Linux/GNU and Mac OS history命令以及相关环境变量的更多相关文章
- linux命令 - export - 设置环境变量
linux命令 - export - 设置环境变量 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供 ...
- ***LINUX添加PHP环境变量:CentOS下将php和mysql命令加入到环境变量中
CentOS系统下如何将PHP和mysql命令加入到环境变量中,在Linux CentOS系统上 安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到 ...
- 【转帖】linux date 显示指定时区的时间 借助TZ 环境变量 export TZ=Asia/Shanghai 或 America/New_York
linux date 显示指定时区的时间 借助TZ 环境变量 export TZ=Asia/Shanghai 或 America/New_York 2015-02-10 10:58:22 youcha ...
- alias function varibales in Linux/GNU and Mac alias命令细说
细说,在古文言中是”奸细佞臣的话“,现如今成了”详细说明“的缩略. alias是MS-DOC中cmds中doskey的counterpart,是”别名“或者”化名“的意思 alias强大之处在于可以化 ...
- Linux学习Day4:管道符、重定向与环境变量
仅仅是学习Linux系统的命令还不够,只有把多个命令按照自己想要的方式进行组合使用,才能提高工作效率.今天的内容主要是关于如何把命令组合在一起使用,使得输入的命令更准确.更高效,也为接下来的Shell ...
- linux系统下将php和mysql命令加入到环境变量中的方法
在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行 “php -v”命令查看当前php版本信息时时 ...
- linux CentOS 系统下如何将php和mysql命令加入到环境变量中
在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时, ...
- Linux 下 boost 库的安装,配置个人环境变量
部分引自: https://blog.csdn.net/this_capslock/article/details/47170313 1. 下载boost安装包并解压缩到http://www.boos ...
- Linux命令行设置环境变量
参考 Linux命令行--使用linux环境变量 Linux命令行—使用Linux环境变量
随机推荐
- iOS: 讯飞语音的使用
一.介绍: 讯飞语音做的相当不错,容错率达到90%多,如果需要做语音方面的功能,它绝对是一个不错的选择.讯飞语音的功能很多:语音听写.语音识别.语音合成等,但我们最常用的还是语音听写.讯飞语音中包含界 ...
- Centos7关闭防火墙与selinux
CentOS 7.0默认使用的是firewall作为防火墙 直接关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable ...
- 开发者必知的8款App快速开发工具
开发者必知的8款App快速开发工具 “我有一个好创意,就差一个CTO……” “原生APP开发难度大,周期长,成本高,还没上线市场已经被占领了.” “APP版本迭代更新,都是企业的一道难关,没有一个一劳 ...
- php 配置本地自定义域名
一.设置host文件 二.设置httpd.conf # Virtual hosts Include conf/extra/httpd-vhosts.conf 三.设置httpd-vhosts.conf ...
- 项目管理利器——Maven
假设公司要开发一个新的Web项目,使用目前流行的struts2.spring.MyBatis进行新项目开发.那么接下来首先要进行的工作就是各个框架的jar包的下载.大家通常的做法是先到struts2的 ...
- Java基础之创建窗口——创建应用程序窗口(TryWindow)
控制台程序. 准备好应用程序窗口及其包含的组件并显示,这称为实现窗口.调用应用程序窗口对象的setVisible()方法就会实现窗口.实现了应用程序的GUI之后,在主线程中修改或查询GUI可能会导致死 ...
- LinkedHashMap 和 LRU算法实现
个人觉得LinkedHashMap 存在的意义就是为了实现 LRU 算法. public class LinkedHashMap<K,V> extends HashMap<K,V&g ...
- 生成arff文件,csv转为arff
一.什么是arff格式文件 1.arff是Attribute-Relation File Format缩写,从英文字面也能大概看出什么意思.它是weka数据挖掘开源程序使用的一种文件模式.由于weka ...
- c#:拖动功能
需求:放在图层上一个图片,要实现鼠标可以选中,并实现拖放功能. 需求分析: 1.采用winform方式实现: 2.需要一个PictureBox对象,对该PictureBox添加MouseMove,Mo ...
- gson使用注意事项
public static Object toBean(String jsonString, Class<?> beanclass) { GsonBuilder gsonb = new G ...