.bash文件 linux

2019-08-08 22:14:51 QI8811481 阅读数 2683
系统所输入的命令历史记录:
(1)history查看bash历史记录
(2).bash_history文件
.bash_history文件会让你 重用你 使用过的命令 (!+命令数字)
(1)每个用户的主目录下都定义了一个.bash_history文件
(2)许多发行版会记录用户前次输入的1000条命令
(3)可以使用cat ~/.bash_history 来查看历史记录
(4)shell能记住的命令的数目是定义在HISTSIZE变量中的。
“/etc/profile”文件中的“HISTFILESIZE”和“HISTSIZE”行确定所有用户的“.bash_history”文件中可以保 存的旧命令条数。强烈建议把把“/etc/profile”文件中的“HISTFILESIZE”和“HISTSIZE”行的值设为一个较小的数,比如 30。编辑profile文件(vi /etc/profile),把下面这行改为:
HISTFILESIZE=30
HISTSIZE=30
这表示每个用户的“.bash_history”文件只可以保存30条旧命令。 
网管还应该在"/etc/skel/.bash_logout" 文件中添加下面这行"rm -f $HOME/.bash_history" 。这样,当用户每次注销时,“.bash_history”文件都会被删除. 
history查看bash历史记录(把所有历史记录打印出来):
查看方法:
(1)!! (连续两个”!”),表示执行上一条命令; 扩展:sudo !!
	!- :执行上一条命令
	ctrl+P:执行上一条命令
(2)!n(n是数字),表示执行命令历史中第n条命令,例如”!10”表示执行历史命令中的第10条命令;
(3)!字符串(字符串大于等于1),例如!ta,表示执行历史命令中最近一次以ta为开头的命令。
(4)结合grep找历史命令 history|grep you_search
(5)结合tail查看最近运行的命令 history|tail -5
(6)!:运行上一个命令 	扩展:!-2:运行您运行的第二个到最后一个命令
(7)! 文本:(! pi)找到之前以pi开头的运行过的命令,立即运行
(8)命令 !$:运行一个新命令,但是使用上一个命令的最后一个参数
例如:假设你运行了这个命令
touch /home/chris/some_long_file_name_you_dont_want_to_type_again。
你现在想要运行命令
nano /home/chris/some_long_file_name_you_dont_want_to_type_again。
而不是从头开始打字,你可以运行:

nano !$
(9)命令 !^:运行一个新命令,但是使用上一个命令的第一个参数
如果你运行ping google.com -c 4
然后运行ping !$,这将扩展到“ ping 4”。


要解决这种情况,您可以使用以下技巧来展开第一个参数,而不是最后一个:

命令!^


所以,如果你跑了ping google.com -c 4 ,然后跑ping !^,
bash会把它扩展到“ ping google.com"
(10)命令 !*:要填写上一个命令中使用的所有参数,而不是单个参数,您可以使用以下命令:
命令 !*
所以,如果你运行ping !* ,bash会自动填写你在上一个命令中使用的所有参数
(11)命令 !abc:#
例如,我们sudo hostname ubuntu以前运行命令。
如果我们运行以下命令,bash将通过历史记录向后搜索,以从我们键入的字母开始找到最后一个命令,并填写我们指定的参数。
运行echo !su:2,bash将会搜索到以“ su” 开始的最后一个命令,并填写第二个参数,即“ ubuntu”。
(12)命令!abc:*
使用星号(称为通配符)替换数字会导致bash从命令中填入所有参数
(13)^ ^ ABC XYZ
重新运行上一个命令并修改它
Bash还允许您重新运行上一个命令并指定应该更改的内容。这可以用于纠正命令中的打字错误。例如,以下命令将重新运行上一个命令,将文本“ abc” 替换为文本“ xyz”。
例如,如果你不小心跑了ping gogle.com,你可以运行^gog^goog,bash会运行命令ping google.com。
(14)history -c :删除文件里的内容(因为操作过的命令都被保存,密码易泄露)
默认情况下,bash shell将您在用户帐户的历史记录文件中运行的命令的历史记录存储在〜/ .bash_history。例如,如果你的用户名是bob,你会在/home/bob/.bash_history找到这个文件。
由于您的历史记录存储在文件中,因此会在会话之间持续存在。您可以运行一些命令,退出,第二天回来,这些命令仍然可以在您的历史文件中准备查看和使用。每个用户帐户都有自己的具有单独命令历史的历史文件。
要清除您的bash历史记录,可以运行以下命令。这将擦除用户帐户的.bash_history文件的内容:
history-c
(15)Bash仅默认记住有限数量的命令,从而防止历史文件增长太大。历史条目bash记忆的数量由HISTSIZE变量控制。默认值通常为500或1000个条目。您可以运行以下命令来查看系统上bash历史记录的大小。
echo $ HISTSIZE
要将历史记录设置为零,请运行以下命令。
HISTSIZE = 0
对于当前会话,bash将不会存储任何历史记录条目,除非您运行命令HISTSIZE=1000将其设置回一定数量的条目
(16)操作的命令不显示在历史文件的办法:
Bash允许您忽略以空格开头的历史记录条目,
如果将HISTCONTROL变量设置为ignorespace.
HISTCONTROL = ignorespace
在命令行前输入一个空格,然后在bash shell中运行命令,命令将正常运行,但如果启用了此变量,则不会显示在历史记录中。这样可以让您的历史保持一点清洁,选择在没有出现在您的历史记录中的情况下运行命令。
(17)使得历史命令不存到.bash_profile文件里面
使用 HISTFILE 更改历史文件名称
默认情况下,命令历史存储在 ~/.bash_history 文件中。
添加下列内容到 .bash_profile 文件并重新登录 bash shell,
将使用 .commandline_warrior 来存储命令历史:

# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior
(18)Bash还允许您忽略可能会混淆您的历史记录的重复命令。
要这样做,设置HISTCONTROL 为ignoredups.
HISTCONTROL = ignoredups
例子:
#cd
#HISTCONTROL = ignoredups
#cd
#cd
#cd
#history|tail -4
cd 
HISTCONTROL = ignoredups
cd
history|tail -4
要使用ignorespace 和ignoredups 功能,请将HISTCONTROL变量设置为ignoreboth.
HISTCONTROL = ignoreboth
请注意,您设置的bash变量只会持续存在于当前会话中。您需要将这些添加到用户帐户的.bashrc文件,以便在您启动的每个bash会话中自动设置这些值,如果您愿意的话。

(19)使用 HISTTIMEFORMAT 显示时间戳
当你从命令行执行 history 命令后,通常只会显示已执行命令的序号和命令本身。如果你想要查看命令历史的时间戳,那么可以执行:

# export HISTTIMEFORMAT='%F %T '
# history | more
1 2008-08-05 19:02:39 service network restart
2 2008-08-05 19:02:39 exit
3 2008-08-05 19:02:39 id
4 2008-08-05 19:02:39 cat /etc/redhat-release

注意:这个功能只能用在当 HISTTIMEFORMAT 这个环境变量被设置之后,之后的那些新执行的 bash 命令才会被打上正确的时间戳。在此之前的所有命令,都将会显示成设置 HISTTIMEFORMAT 变量的时间。

(20)禁用history
使用 HISTSIZE 禁用 history
如果你想禁用 history,可以将 HISTSIZE 设置为 0:

# export HISTSIZE=0
# history
# [Note that history did not display anything]

(21)使用 HISTIGNORE 忽略历史中的特定命令
下面的例子,将忽略 pwd、ls、ls -ltr 等命令:

# export HISTIGNORE=”pwd:ls:ls -ltr:”
# pwd
# ls
# ls -ltr
# service httpd stop
# history | tail -3
79 export HISTIGNORE=”pwd:ls:ls -ltr:”
80 service httpd stop
81 history
[Note that history did not record pwd, ls and ls -ltr]
如果你经常使用Linux命令,那么使用history命令无疑会提升你的工作效率。
History命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 。
1>History命令语法:
[test@linux]# history [n]
[test@linux]# history [-c]
[test@linux]# history [-raw] histfiles
参数:
n   :数字,要列出最近的 n 笔命令列表
-c  :将目前的shell中的所有 history 内容全部消除
-a  :将目前新增的history 指令新增入 histfiles 中,若没有加 histfiles ,
则预设写入 ~/.bash_history
-r  :将 histfiles 的内容读到目前这个 shell 的 history 记忆中
-w  :将目前的 history 记忆内容写入 histfiles
Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,你也可以更改这个值。
如果你键入 history, history会向你显示你所使用的前1000个历史命令,并且给它们编了号,你会看到一个用数字编号的列表快速从屏幕上卷过。你可能不需要查看1000个命令中的所有项目, 当然你也可以加入数字来列出最近的 n 笔命令列表。
linux中history命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。
2>运行特定的历史命令
history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.
语法说明:
[test@linux]# [!number]  [!command] [!!]
参数说明:
number   :第几个指令的意思;
command  :指令的开头几个字母
!        :上一个指令的意思!
3>History命令实战
列出所有的历史记录:
[test@linux] # history
只列出最近10条记录:
[test@linux] # history 10 (注,history和10中间有空格)
使用命令记录号码执行命令,执行历史清单中的第99条命令
[test@linux] #!99 (!和99中间没有空格)
重复执行上一个命令
[test@linux] #!!
执行最后一次以rpm开头的命令(!?  ?代表的是字符串,这个String可以随便输,Shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。)
[test@linux] #!rpm
逐屏列出所有的历史记录:
[test@linux]# history | more
立即清空history当前所有历史命令的记录
[test@linux] #history -c
除了使用history命令,在 shell 或 GUI 终端提示下,你也可以使用上下方向键来翻阅命令历史(向下箭头会向前翻阅),直到你找到所需命令为止。这可以让我们很方便地编辑前面的某一条命令,而不用重复输入类似的命令。
History命令的用途确实很大!但需要小心安全的问题!尤其是 root 的历史纪录档案,这是黑客们的最爱!因为不小心的 root 会将很多的重要资料在执行的过程中会被纪录在 ~/.bash_history 当中,如果这个档案被解析的话,后果不堪设想!
快捷键来查看bash历史记录:
ctrl+P:转到历史记录中上一个命令
ctrl+N:转到历史记录中下一个命令
Alt+R:如果在当前行进行了编辑,将任何更改 还原为 从历史记录中提取的命令
bash 的召回模式:
Ctrl+R:调用与您提供的字符匹配的最后一个命令(按此快捷键,输入字符)
Ctrl+O:运行 Ctrl+R召回的命令
Ctrl+G:保留历史搜索模式,不运行命令
2016-07-31 23:30:17 paullinjie 阅读数 22201

.bash_profile文件存在于用户主目录下,绝对路径为/home/$name/.bash_profile
.bash_profile文件是隐藏文件,里面包含的是用户的用户的环境变量。

在/home下的用户文件夹下,查看一下隐藏文件

这个文件不一定存在,如果存在,就在 ~/ ,即 ~/.bash_profile但也很可能不存在,这时创建一个空文件,加入自己想要的内容就行。Linux中的配置文件很多都是这样,是要在需要时建立的,而程序在没有这些配置文件时,也可能正常运行。

2019-01-21 22:36:57 u011479200 阅读数 7775

每个用户的根目录下都有四个这样的bash文件,他们是隐藏文件,需要使用-a参数才会显示出来

[yveshe@yveshe ~]$ ll -a | grep bash
-rw-------   1 yveshe yveshe      2910 Jan 12 20:20 .bash_history
-rw-r--r--   1 yveshe yveshe        18 Oct 31 01:07 .bash_logout
-rw-r--r--   1 yveshe yveshe       337 Jan  2 10:53 .bash_profile
-rw-r--r--   1 yveshe yveshe       231 Oct 31 01:07 .bashrc


.bashrc 介绍

用途: 用户定义别名和函数

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

示例:

# User specific aliases and functions
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
LANG=zh_CN.GBK
export PATH LANG

alias rm='rm -i'
alias ls='/bin/ls -F --color=tty --show-control-chars'

例子中定义了路径,语言,命令别名(使用rm删除命令时总是加上-i参数需要用户确认,使用ls命令列出文件列表时加上颜色显示)。
每次修改.bashrc后,使用source ~/.bashrc(或者 . ~/.bashrc)就可以立刻加载修改后的设置,使之生效。

一般会在.bash_profile文件中显式调用.bashrc。登陆linux启动bash时首先会去读取~/.bash_profile文件,这样~/.bashrc也就得到执行了,你的个性化设置也就生效了。

关于环境变量的读取顺序:
用户登录 ->> 加载~/.bash_profile --> bash_profile中配置了首先是使~/.bashrc生效


.bash_profile 介绍

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH


# 用户自定义一些环境变量,以及添加查询路径到PATH中
export JAVA_HOME=/home/yveshe/jdk1.8
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

示例代码中为用户添加了2个环境变量(JAVA_HOME和CLASSPATH),并修改了已有环境变量PATH的值.(PATH的查找是从前开始查找,找到就返回)
CLASSPATH环境变量的值是在JAVA运行时查找加载类的默认classpath.


.bash_history 介绍

用途: 保存了当前用户使用过的历史命令,方便查找
详情参考: https://blog.csdn.net/caolaosanahnu/article/details/7601074


.bash_logout介绍

用途: 用户登出时执行的命令

# ~/.bash_logout

# 在当前用户登出时,打印出Logout 和当前的时间
echo "Logout, `date`" 

例子:
如果需要每个用户登出时都清除输入的命令历史记录,可以在/etc/skel/.bash_logout文件中添加下面这行rm -f $HOME/.bash_history 。这样,当用户每次注销时,.bash_history文件都会被删除.

2019-07-14 14:24:44 qq_36119192 阅读数 643

目录

.bash_history

.bash_logout

.bash_profile

.bashrc


每个用户的根目录下都有四个这样的 bash文件,他们是隐藏文件,需要使用-a参数才会显示出来

.bash_history

该文件保存了当前用户输入过的历史命令

history命令读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。

历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由 /etc/profile 中的 HISTSIZE 变量进行控制的默认是不显示命令的执行时间,命令的执行时间history 已经记录,只是没有显示。

如想查询某个用户在系统上执行了什么命令,可以使用 root 用户身份登录系统,检查Home目录下的用户主目录下的“.bash_history文件,该文件记录了用户所使用的命令和历史信息。

history命令显示的是 /~/.bash_history文件中的命令和当前shell下输入的缓存中的命令。

也就是说,/~/.bash_history文件记录的命令是上一次登录及其之前的命令。我们这次登录执行的命令并不会立即写入/~/.bash_history文件中,而是存在缓存中。只有我们注销后,该缓存中的命令才会写入 /~/.bash_history 文件中。

  • history 10 。显现最近10条命令
  • history -a:将当前终端缓存中的命令写入 /~/.bash_history 中(追加)
  • history -w:将当前终端缓存中的命令写入 /~/.bash_history 中(覆盖)
  • history -c:清除当前终端缓存中的所有命令
  • history -r : 将/~/.bash_history 文件中的命令读入到缓存中

当在终端执行以下命令时,该终端就不会记录历史命令

export HISTFILE=/dev/null export HISTSIZE=0

.bash_logout

该文件的用途是用户注销时执行的命令,默认是没有内容的

如果我们往该文件中写入 history -c ,则在每次注销时,会清除缓存中的命令。

.bash_profile

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 /etc/profile.d 目录的配置文件中搜集shell的设置。

我们也可以往该文件中增加新内容,环境变量啥的

.bashrc

此文件为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。我们也可以往该文件中增加新内容,可以定义别名和函数

每次修改 .bashrc 后,使用 source  ~/.bashrc(或者 . ~/.bashrc)就可以立刻加载修改后的设置,使之生效。

一般会在 .bash_profile 文件中显式调用.bashrc。登陆linux启动bash时首先会去读取~/.bash_profile文件,这样~/.bashrc也就得到执行了,你的个性化设置也就生效了。

关于环境变量的读取顺序:
用户登录 ->> 加载~/.bash_profile --> bash_profile中配置了首先是使~/.bashrc生效
 

参考文章:Linux| 用户目录下三个bash文件的作用(.bash_history,.bash_logout,.bash_profile,.bashrc)

                  /etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc ~/.bash_logout 说明及区别

2019-08-02 10:18:12 qq_42683219 阅读数 1127

不说过多的理论,说一下怎么用。
~/.bash_profile文件:只表示当前用户的个人设置,生效后只该用户可用。
应用场景:
例如 当你在php文件夹下编写完一个test.php文件,并想要运行时。如果没有在~/.bash_profile中进行相应的配置,那么你需要这样运行test.php文件
在这里插入图片描述
同样如果你在其他文件夹下创建了一个test2.php文件,如何你想要运行它,那么你就要加上相应的路径。
例如 在/download/software/下建立test2.php,并编写一个time()函数运行它
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可见 想要运行test2.php因该在前面要加上很长的路径。对于我们来说还需要记忆前面的路径,不方便。
为了解决这样的问题,我们可以在~/.bash_profile文件中进行相关的配置。具体操作如下

第一步:vim ~/.bash_profile
在这里插入图片描述
第二步:使用alias命令给/home/download/php/bin/php起别名
在这里插入图片描述
第三步:使用php 验证
在这里插入图片描述

注意:对于不同linux系统修改完~/.bash_profile文件可能不能马上使用别名命令, 你可以source /.bash_profile一下来读取/.bash_profile中的命令