Linux笔记 Day05---(history用法、命令别名、变量、特殊符号、文件描述符、管道及重定向)

这篇博客详细介绍了Linux shell中的`history`命令的-p和-s选项,以及相关变量的设置,如$HISTSIZE和$HISTCONTROL。接着,讨论了命令别名的创建、撤销和查看。此外,讲解了Linux bash变量的种类,如本地变量、局部变量和环境变量。最后,阐述了特殊符号的作用,如点号、双点号、分号等,并探讨了管道和重定向的概念,包括文件描述符的管理和限制。
摘要由CSDN通过智能技术生成

一、history用法(续):

[dxk@admin ~]$ help history
history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数...]
    显示或操纵历史列表。
    
    带行号显示历史列表,将每个被修改的条目加上前缀 `*'。
    参数 N 会仅列出最后的 N 个条目。
    
    选项:
      -c	删除所有条目从而清空历史列表。(保存历史命令的文件.bash_history中记录的历史命令并不会受到影响,而且仅对当前bash有效,重新登录后还会显示出之前的)
      -d 偏移量	删除历史列表中指定的历史命令。(仅删除历史列表中指定行号的,历史文件中相应的并不会删除,同样仅对当前bash有效)
    
      -a	将当前内存中的历史追加到历史文件中(本次登陆后所输入的命令【本次登录所输入的所有命令是存在内存中的】会在退出后才写入历史命令文件中,使用 history -a命令后直接手动将内存中的历史命令追加到.bash_history文件中)
      -n	从历史文件中读取所有未被读取的行(在历史列表中没有的命令将从历史文件中加载到当前历史列表中)
      -r	读取历史文件并将内容追加到历史列表中(将历史文件中的所有命令追加到当前历史列表中)
    	中
      -w	将当前历史写入到历史文件中并追加到历史列表中(相当于是将历史列表中的历史命令和历史文件中的历史命令全部整合同时写入到文件和当前历史列表中)
    
      -p	对每一个 ARG 参数展开历史并显示结果而不存储到历史列表中
      -s	以单条记录追加 ARG 到历史列表中
    
    如果给定了 FILENAME 文件名,则它将被作为历史文件。否则
    如果 $HISTFILE 变量有值的话使用之,不然使用 ~/.bash_history 文件。
    
    如果 $HISTTIMEFORMAT 变量被设定并且不为空,它的值会被用于
    strftime(3) 的格式字符串来打印与每一个显示的历史条目想关联的时
    间戳,否则不打印时间戳。
    
    退出状态:
    返回成功,除非使用了无效的选项或者发生错误

(一) -p 和 -s 选项

1.history -p 命令

相当于 echo命令,可以打印字符串和变量,同时可以显示输出到终端的命令的执行结果。但不会保存到历史列表和命令历史文件中。

#打印字符串效果如下:

 #history -p 后面的参数写什么就会原封不动的打印出什么(变量除外,但如果变量是用单引号强引用括起来也是一样 ),即使是命令
[root@admin ~]# history -p Welcome to my CSDN!  
Welcome
to
my
CSDN!
[root@admin ~]# history -p ls
ls
[root@admin ~]# history -p 'Welcome to my CSDN'
Welcome to my CSDN
[root@admin ~]# history -p "Welcome to my CSDN" 
Welcome to my CSDN

#打印变量效果如下:

[root@admin ~]# history -p $PS1
[\u@\h
\W]\$
[root@admin ~]#  history -p '$PS1'   #这里因为是单引号,为强引用(即所见即所得)
$PS1
[root@admin ~]#  history -p "$PS1"
[\u@\h \W]\$ 

如果history -p 后面的参数为使用反引号(反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。)括起来要执行的命令(注意:这里所说的命令必须是执行后输出结果输出到控制台的,例如:ls、pwd、cat等等,vi、vim等不行)
如果反引号中的命令是vim,那么就是这样的:

[root@admin ~]# history -p `vim test.sh`
Vim: 警告: 输出不是到终端(屏幕)
#这个情况下会死机,即使 Ctrl + c 也没用,只能关掉重启(无论是远程连接工具还是虚拟机)

看看输出是到终端的命令执行出来是什么样的:

[root@admin ~]#  history -p `echo Welcome to my CSDN`
Welcome
to
my
CSDN
[root@admin ~]# history -p `echo $PS1`
[\u@\h
\W]\$
[root@admin ~]# history -p `ls`
anaconda-ks.cfg
date.txt
error.txt
etc.tar.ga
file
file1
ip.txt
list.txt
test.sh
[root@admin ~]#  history -p `pwd`
/root
[root@admin ~]# history -p `cat test.sh`
name=zhangsan
echo
$name
[root@admin ~]# 

敲黑板划重点:只要是以history -p开始执行的命令,后面参数无论跟什么,都不会添加到历史列表和历史文件中

2.history -s 命令

请看实际操作:

[root@admin ~]# history -c
[root@admin ~]# history -s  hello world
[root@admin ~]# history -s 'hello world'
[root@admin ~]# history -s "hello world"
[root@admin ~]# history -s ls
[root@admin ~]# history -s 'ls'
[root@admin ~]# history -s "ls"
[root@admin ~]# history -s `ls`   #这个是反引号
[root@admin ~]# history -s $PS1
[root@admin ~]# history
    1  hello world
    2  ls
    3  anaconda-ks.cfg date.txt error.txt etc.tar.ga file file1 ip.txt list.txt test.sh
    4  [\u@\h \W]\$
    5  history

总结 :
在这里插入图片描述

3.有关历史命令的几个变量:

①$HISTSIZE

用于设置历史列表的显示数目,不会影响到文件中存储的历史命令数量

[root@admin ~]# echo $HISTSIZE
1000
[root@admin ~]# HISTSIZE=10     #这里对该变量进行临时修改,要想修改后一直有效必须写入环境变量文件中(下同)
[root@admin ~]# echo $HISTSIZE
10
[root@admin ~]# history  #对该变量设置为10,所以历史列表中显示的历史命令只有10条
  347  cat -n .bash_history
  348  echo $HISTSIZE
  349  vim .bash_history
  350  vim /etc/profile
  351  echo $HISTSIZE
  352  source /etc/profile
  353  echo $HISTSIZE
  354  HISTSIZE=10
  355  echo $HISTSIZE
  356  history
[root@admin ~]# 
②$HISTTIMEFORMAT

给历史命令打印时间戳

这里打印的时间只会在历史列表中显示,历史文件中并不会有

[root@admin ~]# echo $HISTTIMEFORMAT  #默认历史命令没有添加时间戳

[root@admin ~]# HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "   #这里我们进行临时修改,并指定要显式的时间格式
[root@admin ~]# echo $HISTTIMEFORMAT
%Y-%m-%d %H:%M:%S
[root@admin ~]# history     #查看效果
  355  2020-07-09 09:42:07 HISTTIMEFORMAT=""
  356  2020-07-09 09:42:18 echo HISTTIMEFORMAT
  357  2020-07-09 09:42:26 echo $HISTTIMEFORMAT
  358  2020-07-09 09:43:18 HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
  359  2020-07-09 09:43:24 echo $HISTTIMEFORMAT
  360  2020-07-09 09:43:34 history
③$HISTFILE

指定存放命令历史的目录文件

每个用户都会拥有各自的存放历史命令的文件,系统默认这个文件是各用户家目录下的.bash_history文件

[root@admin ~]# echo $HISTFILE
/root/.bash_history
[root@admin ~]# cd /etc
[root@admin etc]# touch histfile      #自行创建一个文件,目的是将历史命令保存到这个文件中去
[root@admin ~]# HISTFILE="/etc/historyfile"      #将次变量临时修改为我们刚创建的/etc/historyfile文件,这样后面的历史命令都会保存到这个文件中去
[root@admin ~]# echo $HISTFILE      #这里是为了查看我们修改是否成功
/etc/historyfile
[root@admin ~]# history -a     #将当前内存中的历史命令写入到我们指定的存储历史命令的文件中去
[root@admin ~]# cat -b /etc/historyfile        #查看效果
     1	#1594259004
     2	echo $HISTTIMEFORMAT
     3	#1594259014
     4	history
     5	#1594259204
     6	echo $HISTFILE
     7	#1594259229
     8	 cd /etc/file
     9	#1594259243
    10	cd /etc
    11	#1594259257
    12	touch histfile
    13	#1594259259
    14	cd
    15	#1594259292
    16	HISTFILE="/etc/historyfile"
    17	#1594259316
    18	echo $HISTFILE
    19	#1594259334
    20	history -w 
④$HISTFILESIZE

用于设置命令历史文件的大小;超出设置的数量会删除旧的

通俗地讲:用于设置在变量$HISTFIZE定义的文件(默认为.bash_history) 中保存命令的记录总数,可以理解为.bash_history文件中最多只有HISTFILESIZE行

[root@admin ~]# echo $HISTFILESIZE    #改变量系统默认设置为 1000
1000
[root@admin ~]# HISTFILESIZE=3      #这里临时修改大小为3
[root@admin ~]# cat -n .bash_history   #我们查看保存命令历史文件中的历史命令只剩下3条
     1	vim /etc/profile
     2	source /etc/profile
     3	exit
[root@admin ~]
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值