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啦,也就是每次的[email protected] : ~ $,上面的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

时间: 2024-08-18 16:34:53

history and its relevant variables in Linux/GNU and Mac OS history命令以及相关环境变量的相关文章

【转帖】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 youcharming 阅读数 14670 文章标签: linuxdate显示指定时区TZ环境变量 更多 分类专栏: linux系统 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/youcharming

alias function varibales in Linux/GNU and Mac alias命令细说

细说,在古文言中是”奸细佞臣的话“,现如今成了”详细说明“的缩略. alias是MS-DOC中cmds中doskey的counterpart,是”别名“或者”化名“的意思 alias强大之处在于可以化繁为简,化冗为略,化干戈为玉帛,化腐朽为神奇,简而言之,高手段偷懒. 默认的话所有的设置都是在.bashrc中进行,但是总结我们平时的修改,无外乎alias某个东西,添加PATH环境变量,或者写一个什么作用的函数,就这样,所以呢 写的多了,发现.bashrc文件很长,很不好操作,所以 我们把.bas

linux下用export命令临时设置环境变量

今天在执行flask命令的时候报了一个错误,RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment.很明显,是说python3的字符集有问题,同时也很人性化的给出了解决方案:This system supports the C.UTF-8 locale which is recommended.You

linux CentOS 系统下如何将php和mysql命令加入到环境变量中

在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时,则会提示命令不存在的错误,下面我们详细介绍一下在linux下将php和mysql加入到环境变量中的方法(假设php和mysql分别安装在/usr/local/webserver/php/和/usr/local/webserver/mysql/中). 方法一:直接运行命令export PATH=$PA

Linux下Weblogic相关环境变量设置

下文以Weblogic12c安装配置环境为例 1.查看JAVA版本与运行路径 (1)查看当前运行JAVA版本 #java -version (2)查看当前运行的JAVA路径 #which java 2.环境变量设置 export JAVA_HOME=/dba/soft/jdk1.6.0_34 export PATH=$JAVA_HOME/bin:$PATH export WLS_HOME=/dba/wls/Oracle/Middleware 3.输出环境变量值 [[email protected

Linux系统误修改/etc/profile;如何恢复环境变量

上午在公司的一台NGINX前端服务器上进行维护操作:想把nginx的命令path"/usr/local/nginx/sbin/"给加到/etc/profile上:编辑完毕:source /etc/profile:紧接着发现ls.vi等最常见的命令都没法使用:一开始把我吓坏了,此时才醒悟过来,是把原先的PATH变量值给覆盖了:面对这种情况最好的方法:就是执行echo"export PATH=/bin >> /etc/profile"先保证系统能使用最基本的

Linux系统下将php和MySQL命令加入到环境变量中的方法

修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下内容:export PATH="$PATH:/usr/local/redis/bin"export PATH="$PATH:/phpstudy/server/php/bin/php"export PATH="$PATH:/phpstudy/mysql/bin/"

linux mint(Ubuntu、Debian) 18修改环境变量

修改环境变量 [plain] view plain copy print? sudo gedit /etc/profile sudo gedit /etc/profile 在profile文件的末尾添加以下代码 [plain] view plain copy print? export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/

关于ASP .NET Core在跨平台的linux ubuntun,SUSE ,Mac OS的发布的相关平台操作

https://www.microsoft.com/net/learn/get-started/linuxopensuse 原文地址:https://www.cnblogs.com/1175429393wljblog/p/8295652.html