shell基础,命令历史,命令补全,别名alias,通配符,输入输出重定向_alias中使用通配符_langyue919的博客-程序员秘密

技术标签: 走进Linux世界---基础阶段  Linux  

shell基础

shell
是一个命令解释器,提供用户和机器之间的交互,支持特定语法,比如逻辑判断,循环等。
每个用户都可以有自己特性的shell,centos7默认shell为bash(bourne agin shell),还有zsh,ksh等,每种shell支持的特性不尽相同。

命令历史

history命令 查看命令历史。
~/.bash_history 用户命令历史记录文件
在正常退出终端,命令历史可保存在此文件,非正常退出终端,保存不全

/etc/profile history命令的配置文件

echo $HISTSIZE 查看命令历史最大记录值,默认HISTSIZE=1000
用history查看命令历史, 结果可能会大于设定的最大值,大于最大值的命令历史暂存在 内存中,未写入 .bash_history文件。
echo $HISTTIMEFORMAT 查看时间变量, 默认无此变量,需要添加

vim /etc/profile 进入配置文件
修改:
HISTSIZE=5000 修改变量HISTSIZE,设定最大值为5000
修改:
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 定义时间变量,记录每条命令的操作时间

source /etc/profile 加载配置文件,修改profile后需要加载使修改生效。

history -c 清空内存中的命令历史
不会删除 .bash_history文件中的命令历史。

chattr +a ~/.bash_history 永久保存命令历史,只许追加不许删不受HISTSIZE值限制

快捷用法:
!! 最后一条命令
!n n= 命令历史号,指定使用历史号为n的命令
!word 使用由后向前查找最后一条以word开头的命令

例:

[[email protected] ~]# history 查看命令历史
~
~
省略
999 cd /usr/local/src
1000 ls 可看到历史命令记录号大于默认的 1000 ,这些 记录暂存于内存未写入 .bash_history文件
~
~
省略
1011 history
1012 ls /home/
1013 ls /home/ELON/.bash_history
1014 cat /home/ELON/.bash_history
1015 echo $HISTSIZE 查看变量HISTSIZE最大值,此变量规定了最大记录号
1016 cat /root/.bash_history 查看root用户的命令历史记录文件
1017 history
[[email protected] ~] # !cat 使用最后一条已cat开头的历史命令= cat /root/.bash_history
cat /root/.bash_history
ls /home
init 0
mount /dev/cdrom /mnt
cd /mnt/Packages/
yum -qa |grep pcre
yum list |grep pcre
yum install -y pcre-devel.x86_64
[[email protected] ~]# !1015 指定使用记录号为1015的历史命令= echo $HISTSIZE
echo $HISTSIZE
1000 记录号为1000,默认值
[[email protected] ~]# echo $HISTTIMEFORMAT 查看变量HISTTIMEFORMAT的值,默认无此变量
所以此处变量值为空
[[email protected] ~]# vim /etc/profile 配置history命令的配置文件
找到: HISTSIZE= 1000,将其改为: HISTSIZE=5000,并在下一行插入: HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "

[[email protected] ~]# echo $HISTSIZE 再次查看HISTSIZE变量并未生效
1000
[[email protected] ~]# echo $HISTTIMEFORMAT 再次查看HISTTIMEFORMAT变量也未生效
[[email protected] ~]# source /etc/profile 加载配置文件,使修改和新增的变量生效
[[email protected] ~]# echo $HISTSIZE 查看HISTSIZE变量已生效
5000
[[email protected] ~]# echo $HISTTIMEFORMAT 查看HISTTIMEFORMAT变量已生效
%Y/%m/%d %H:%M:%S
[[email protected] ~]# history 再次查看命令历史,已经显示历史命令的操作时间
~
~
省略
1013 2018/04/21 01:51:37 ls /home/ELON/.bash_history
1014 2018/04/21 01:51:47 cat /home/ELON/.bash_history
1015 2018/04/21 01:53:38 echo $HISTSIZE
1016 2018/04/21 01:54:33 cat /root/.bash_history
1017 2018/04/21 03:18:22 history
1018 2018/04/21 03:25:03 cat /root/.bash_history
1019 2018/04/21 03:34:07 echo $HISTSIZE
1020 2018/04/21 03:49:09 echo $HISTTIMEFORMAT
1021 2018/04/21 03:53:09 vim /etc/profile
1022 2018/04/21 04:03:23 echo $HISTSIZE
1023 2018/04/21 04:04:01 echo $HISTTIMEFORMAT
1024 2018/04/21 04:07:03 source /etc/profile
1025 2018/04/21 04:07:15 echo $HISTSIZE
1026 2018/04/21 04:07:23 echo $HISTTIMEFORMAT
1027 2018/04/21 04:10:18 history
[[email protected] ~]# history -c 清空内存中的命令历史
[[email protected] ~]# history 查看命令历史,只剩此条命令的记录且有显示此命令的操作时间
25 2018/04/21 04:14:02 history
[[email protected] ~]# !! 使用最后一次命令
history
25 2018/04/21 04:14:02 history


命令补全及别名

tab键
输入命令或参数时按一次补全,按两次查看以前面内容为前缀的命令或参数,也可用于文件或目录
centos7,支持参数补全,centos6只支持命令补全

参数补全,需安装 bash-completion 默认未安装,安装完需要重启系统才生效
~/.bashrc 用户自定义的alias存于用户家目录下此文件
/etc/profile.d/ 系统自带的alias在此目录下
unalias aliasname 取消alias

例:
[[email protected] ~]# yum install -y bash-completion 安装参数补全工具包
已加载插件:fastestmirror
base | 3.6 kB 00:00:00
epel/x86_64/metalink | 8.1 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/2): epel/x86_64/updateinfo | 916 kB 00:00:00
(2/2): epel/x86_64/primary_db | 6.3 MB 00:00:01
Loading mirror speeds from cached hostfile
* epel: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 bash-completion.noarch.1.2.1-6.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
===================================================================================================================
Package 架构 版本 源 大小
===================================================================================================================
正在安装:
bash-completion noarch 1:2.1-6.el7 base 85 k
事务概要
===================================================================================================================
安装 1 软件包
总下载量:85 k
安装大小:259 k
Downloading packages:
bash-completion-2.1-6.el7.noarch.rpm | 85 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : 1:bash-completion-2.1-6.el7.noarch 1/1
验证中 : 1:bash-completion-2.1-6.el7.noarch 1/1
已安装:
bash-completion.noarch 1:2.1-6.el7
完毕!
安装完,重启服务器
[[email protected] ~]# alias restnet='systemctl restart network.service' 给此命令做restnet的别名
[[email protected] ~]# alias 查看所有有别名的命令
alias cp='cp -i'
alias 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 ls='ls --color=auto'
alias mv='mv -i'
alias restnet='systemctl restart network.service' 这是我们定义的别名为restnet的命令
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[[email protected] ~]# cat /root/.bashrc 查看root用户自定义的别名
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[[email protected] ~]# ls /etc/profile.d 查看其它命令的别名定义文件所在目录
256term.csh bash_completion.sh colorgrep.sh colorls.sh lang.csh less.csh PackageKit.sh vim.sh which2.csh
256term.sh colorgrep.csh colorls.csh flatpak.sh lang.sh less.sh vim.csh vte.sh which2.sh
[[email protected] ~]# unalias restnet 取消别名为restnet的命令
[[email protected] ~]# alias 再次查看,已无别名为restnet的命令
alias cp='cp -i'
alias 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 ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'


通配符
* 表示不分字符,不分数量
? 表示一个任意的字符
[ ] 表示范围中的每一个
{ ,} 表示指定的每一个

例:
1.txt 2.txt 3.txt.new anaconda-ks.cfg A.txt C.txt initial-setup-ks.cfg
1.txt.new 2.txt.new 456 a.txt c.txt home
[[email protected] ~]# ls *.txt 列出后缀为.txt的所有文件
1.txt 2.txt a.txt A.txt c.txt C.txt
[[email protected] ~]# ls *txt* 列出文件名或后缀中包含txt的所有文件
1.txt 1.txt.new 2.txt 2.txt.new 3.txt.new a.txt A.txt c.txt C.txt
[[email protected] ~]# ls 1* 列出以1开头的所有文件
1.txt 1.txt.new
[[email protected] ~]# ls ?.txt 列出文件名为单个字符的所有文件
1.txt 2.txt a.txt A.txt c.txt C.txt
[[email protected] ~]# ls [0-9].txt 列出处于0至9范围中的所有文件
1.txt 2.txt
[[email protected] ~]# ls [a-zA-Z0-9].txt 列出处于0至9,或A至Z,或a至z范围的所有文件
1.txt 2.txt a.txt A.txt c.txt C.txt
[[email protected] ~]# ls [12].txt 分别列出1.txt和 2.txt
1.txt 2.txt
[[email protected] ~]# ls {1,2,c,A}.txt 分别列出指定的每一个文件
1.txt 2.txt A.txt c.txt

输入输出重定向

> 正确输出 >> 正确追加 2> 错误输出 2>> 错误追加 < 输入重定向

>+2>== &> 正确输出,错误输出 >>+2>>==&>> 正确追加,错误追加

command [file1] >file2 用>前面命令输出的内容覆盖后面的文件内容
command [file1] >>file2 将>>前面命令输出的内容追加到后面的文件里
command [file1] > file2 2>file3 正确输出写入file2 错误输出写入file3
command < file 将<右边文件的内容输入到<左边命令里 , 只能用于命令

例:
[[email protected] ~]# echo "abdc " >> a.txt 追加abcd进a.txt文件
[[email protected] ~]# echo " 1234 " >> 1.txt 追加1234进1.txt文件
[[email protected] ~]# cat 1.txt >a.txt 用cat命令输出的内容覆盖后面的a.txt文件
[[email protected] ~]# cat a .txt 查看a.txt文件内容
1234 内容已被覆盖
[[email protected] ~]# cat 1.txt >>a.txt 将前面命令输出的内容追加进a.txt文件
[[email protected] ~]# cat a.txt
1234
1234
1.txt 2.txt 3.txt 456 anaconda-ks.cfg a.txt b.txt c.txt d.txt home initial-setup-ks.cfg
[[email protected] ~]# ls 1.txt A.txt >b.txt 2>c.txt
用前面命令的正确输出替换b.txt文件内容,用前面命令的错误输出替换c.txt文件内容
[[email protected] ~]# ls 1.txt A.txt &>d.txt 用前面命令的正确输出和错误输出替换d.txt文件内容
[[email protected] ~]# cat b.txt
1.txt
[[email protected] ~]# cat c.txt
ls: 无法访问A.txt: 没有那个文件或目录
[[email protected] ~]# cat d.txt
ls: 无法访问A.txt: 没有那个文件或目录
1.txt
[[email protected] ~]# ls 1.txt A.txt >>b.txt 2>>c.txt
将前面命令的正确输出追加进b.txt文件,将前面命令的错误输出追加进c.txt文件
[[email protected] ~]# ls 1.txt A.txt &>>d.txt 将前面命令的正确输出和错误输出追加进d.txt文件
[[email protected] ~]# cat b.txt
1.txt
1.txt
[[email protected] ~]# cat c.txt
ls: 无法访问A.txt: 没有那个文件或目录
ls: 无法访问A.txt: 没有那个文件或目录
[[email protected] ~]# cat d.txt
ls: 无法访问A.txt: 没有那个文件或目录
1.txt
ls: 无法访问A.txt: 没有那个文件或目录
1.txt
[[email protected] ~]# wc -l < d.txt 统计右边文件输入的内容行数
4



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/langyue919/article/details/80025957

智能推荐

torch.scatter_harry_tea的博客-程序员秘密

本文目录一、函数简介二、二维举例三、详解执行过程1. 第一步2. 第二步3. 第三步4. 问题一、函数简介torch.scatter(input, dim, index, src)dim ([int]) – the axis along which to indexindex (LongTensor) – the indices of elements to scatter, can be either empty or of the same dimensionality as src. Whe

VueRouter_命名路由-嵌套路由-重定向-别名_努力爬坑的小崔的博客-程序员秘密

VueRouter_命名路由-嵌套路由-重定向-别名命名路由可以通过一个名称标识一个路由,这样在某些时候会显得更方便一些,特别是在链接一个路由,或者是执行一些跳转时,可以在创建Router实例时,在routes配置中给某个路由设置名称:routes = [ { path: '/activity/personal', name: 'personal', component: Personal, }];要链接到一个命名路由,可以给 router-link 的 to 属

树梅派学习 5. RGB LED实验_编程圈子的博客-程序员秘密

接线: c语言程序:#include &amp;amp;amp;lt;wiringPi.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;softPwm.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;#define uchar unsigned char#define LedPinRed 0#define LedPinGreen 1#define LedPi

怎么解决springBoot整合Eureka启动失败的问题_eureka启动不起来_GoLang.fmt的博客-程序员秘密

这篇文章主要介绍“怎么解决springBoot整合Eureka启动失败的问题”,在日常操作中,相信很多人在怎么解决springBoot整合Eureka启动失败的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决springBoot整合Eureka启动失败的问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!其实springBoot 整合Eureka 是比较简单 ,可是我发现很多人整合后会启动不了,我这里列出比较常见的报错的原因报:A child containe

C++查找子串_分隔符_完全匹配_慎独5的博客-程序员秘密

有时候,一个集合以字符串的形式存在,以分隔符进行分隔。如: strGroupIP = "192.168.20.140,192.168.20.141,192.168.20.142,192.168.20.143";在上述IP集合中查找 strIP = "192.168.20.14";如果使用string.find()进行查找,可以找到, 但不是我们需要的ip, 属于不完全匹配。为了解决上述问题, 我编写了一个函数。如下:/* strElement: 元素, strCollection:

Ceph性能测试方案收集列表_ceph 性能测试生产方案_瓦哥架构实战的博客-程序员秘密

CephFS架构解读与测试分析(下)GitHub - get-set/fio-bench-disks-ceph: 使用fio进行磁盘和Ceph的性能测试的所有输出文件。磁盘测试的博客:https://blog.csdn.net/get_set/article/details/108001674 和Ceph测试的博客:https://blog.csdn.net/get_set/article/details/108092302Ceph测试系列(二):ceph性能测试fio工具(2 of 4)_Yannick_

随便推点

dubbo服务注册运行正常,zk也能看到服务注册但是dubbo-Admin看不到服务_超级大饭粒的博客-程序员秘密

参考:https://www.cnblogs.com/gossip/p/6021698.html 今天发现:Dubbo服务正常注册到ZooKeeper,客户端调用Dubbo服务正常,但是dubbo-admin看不到注册信息。 因为默认dubbo-admin默认未配置分组信息,所以需要我们手动去配置一下 ,因为我们默认用的是dubbo分组,具体查看方法:cd /usr/local/zo...

C语言:error: a label can only be part of a statement and a declaration is not a statement|_孔天逸的博客-程序员秘密

场景还原一个简单的switch语句Demo#include<stdio.h>int main(){ int a=1, b=2, re; char c; scanf("%c", &c); switch(c) { case '+': re = a + b; break; case '$': re = a - b; r

java 访问修饰符_programloverjack的博客-程序员秘密

privatepackage-private只可以在同一个包中访问,如果类中的属性,方法或者某一个类没有添加任何修饰符,那么默认就是package-private类型的!protected:如果是:其一:protected static int num = 0;那么这个抽象类的该成员可以在同一个package的其他类中访问,而其他的包中非子类则不可以访问!...

vue 循环tabs 标签页 组件_vue+tabs动态组件方案漫谈_Chongchong Zhang的博客-程序员秘密

这是一篇枯燥的笔记,很可能最后还没有demo demo地址。Tabs标签页大家应该很熟悉了,特别是在jQuery盛行时代,内容可以高效地集中。如果使用vue这种自身就偏单页应用的框架,如何实现tabs动态加载所需页面呢?以下是我在实现过程中遇到的问题,供参考。1. 核心方法是什么?在Vue内置组件中,有个名叫component的组件,提供:is属性用于决定渲染目标,并提供了keep-alive指令...

最长公共子序列(JAVA实现)_最长公共子序列java_咩哈哈丶的博客-程序员秘密

* 题目标题:* 计算两个字符串的最长公共子序列的长度,字符不区分大小写。* 输入描述:输入两个字符串,分两行输入。* 输出描述:输出一个整数。* 示例:* 输入:* 12asdfa* we2rasdaswer* 输出:6        LCS是Longest Common Subsequence的缩写,即最长公共子序列。一个序列,如果是两个或多个已知序列的子序列...

springboot中Excel文件导入导出_springboot导入导出excel_向前走别回头的博客-程序员秘密

Java学习大纲(持续更新):https://blog.csdn.net/weixin_39778570/article/details/94667501更多IT学习资源:https://blog.csdn.net/weixin_39778570/article/details/100052454Excel文件导入从前端传递excel文件到后端,通过ajax这里使用的是lay-ui的控件...

推荐文章

热门文章

相关标签