5周第3次课 shell介绍 命令历史 命令补全和别名 通配符 输入输出重定向

1.shell介绍

shell 是一个命令解释器,提供用户和机器之间的交互。它支持特定语法,逻辑判断、循环。比如,我们登陆的终端,它其实就是一个 shell,供我们和机器交互。

Linux 下面有很多 shell,每个用户都可以有自己特定的 shell。
CentOS7默认shell是bash(Bourne Agin Shell),还有 zsh ksh 等 shell。


2.命令历史

history记录命令历史

2.1 具体存放位置:

/root/.bash_history默认1000条

2.2 查看当前 history 支持存储的数量:

echo $HISTSIZE

2.3 history记录的数量

vim /etc/profile修改HISTSIZE后面的数字即可
source /etc/profile更新系统变量或者重进终端

2.4 清空内存中的命令历史

内存中的历史命令只在退出终端时保存到.bash_history 中去
history -c

2.5 设置命令历史中加入运行时间

[root@centos701~]#HISTTIMEFORMAT="%Y/%m/%d%H:%M:%S"##设置history的格式变量[root@centos701~]#echo$HISTTIMEFORMAT##查看变量是否生效%Y/%m/%d%H:%M:%S
[root@centos701~]history##再次运行命令,发现多了时间信息,设置成功
10012017/11/1520:14:38HISTTIMEFORMAT="%Y/%m/%d%H:%M:%S"
10022017/11/1520:14:57echo$HISTTIMEFORMAT

永久生效:将HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"这条加入/etc/profile文件,最好和HISTSIZE放在一起,然后退出终端重进即可。

2.6 设置 history 记录防删除

通过设置隐藏权限(a权限),能让命令历史不被其他人删除,以便于以后排错和查找事件

[root@centos701~]#chattr+a~/.bash_history

这样设置后,所有用户的命令历史都会记录,其他用户只能追加,不能删除。
非正常退出终端,命令历史记录会不全

2.7 关于命令历史的技巧

!n!word 如:!echo
命令 作用
!! 执行命令历史中最后一条命令(即上一次的命令)
执行命令历史中指定条目的命令
执行命令历史中离当前时间最近的,以 echo 开头的命令。

3.命令补全和别名

Liunx 系统中可以利用 tab 键来进行命令补全,也可以进行路径的补全。同时,在 CentOS7中可以做到参数的补全,比较实用!

3.1 命令和参数补全

命令补全

次数12
场景与效果
不存在相同开头命令/文件,按1下就可以补齐
存在开头相同命令/文件,且大于2个时,需要按2下,才能出现待选例表,

参数补全

从 CentOS7开始,tab 键支持命令和参数双重补全,在补全参数时,用法和补全命令一样,但前提需要安装一个软件bash-completion

[root@centos701~]#yuminstall-ybash-completion
[root@centos701~]#init6或者reboot

重启完成后,就可以体验参数的补全了!

3.2 别名

Linux中支持将一组命令+参数的组合通过alias设置成特定字符组合,通过执行组合字符来达到输入对应正常命令和参数的目的,提高使用人员的效率。

3.2.1 当前用户已有别名查看

alias

[root@centos701~]#alias
aliascp='cp-i'aliasegrep='egrep--color=auto'aliasfgrep='fgrep--color=auto'aliasgrep='grep--color=auto'aliasl.='ls-d.*--color=auto'aliasll='ls-l--color=auto'aliasls='ls--color=auto'......................
......................
3.2.2 设置alias的几个常见位置
  1. 每个用户家目录的.bashrc文件

  2. 目录/etc/porfile.d/中也有很多特定 alias 的定义文件

3.2.3 设置和取消别名 alias

以重启网络systemctl restart network.service这条命令和参数来举例

设置别名

alias[自定义别名]=`正常执行命令+参数`

[root@centos701~]#aliassysrenet=`systemctlrestartnetwork.service`
[root@centos701~]#sysrenet##别名同样支持补全

取消别名

unalias[自定义别名]

[root@centos701~]#unaliassysrenet[root@centos701~]#sysrenet-bash:sysrenet:未找到命令

4. 通配符 符号*?[ ]{ }
作用 举例 说明
表示任意多个字符(0-多个) ls test* *表示后面不论接几个字符都接受(没有字符也匹配)
表示任意单个字符 ls test?;ls test??? ?表示后面当且仅当接1个字符时才匹配;???表示一定要接3个字符
中间为范围和组合字符 cp test[1~5] /tmp test1,test2,test3,test4,test5若存在,则复制到/tmp目录下
中间表示一个或多个字符,多个时用“,”隔开 ll {*.log,*.txt} 查询以.log和.txt结尾的文件。

5.输入输出重定向

说明:预先在当前目录创建1.txt文件,并在其中输入两行随机字符。
命令在左 文件在右

特点<单个输出重定向>>2>2>>合并输出重定向&>=>+2>&>>=>>+2>>拆分输出重定向>> 2>>
输入重定向

右侧内容输入到左边 wc -l < 1.txt 将右侧1.txt的内容输入到左边供命令调用,即计算1.txt文本内容的行数
> 正确输出重定向 覆盖原有内容 cat 1.txt>2.txt 将左侧正确的结果以覆盖的方式输出到2.txt中
正确输出追加重定向 保留原有内容 cat 1.txt>>2.txt 将左侧正确的结果以追加的方式输出到2.txt 中
错误输出重定向 lsaaa 2>2.txt 将左侧错误的结果以覆盖的方式输出到2.txt 中
错误输出追加重定向 lsaaa 2>>2.txt 将左侧错误的结果以追加的方式输出到2.txt 中

正确和错误输出重定向 ls [12].txt kkk.txt &>c.txt 将左侧正确和错误的结果都输出到 c.txt 文件
正确和错误输出追加重定向 ls [12].txt kkk.txt &>>c.txt 将左侧正确和错误的结果都追加输出到 c.txt 文件
> 2> ls [12].txt sasasa.txt>ab.txt 2>cd.txt 将左侧正确的结果重定向输出到 ab.txt 中,将错误的结果重定向输出到 cd.txt 中
ls [12].txt sasasa.txt>>ab.txt 2>>cd.txt 将左侧正确的结果以追加的方式输出到 ab.txt 中,将错误的结果以追加的方式输出到 cd.txt 中

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2280端口映射到公网,发现经常被暴力破解,自己写了个临时封禁ip功能的脚本,实现5分钟内同一个ip登录密码错误10次就封禁这个ip5分钟,并且进行邮件通知使用步骤openwrt为19.07.03版本,其他版本没有测试过安装bashmsmtpopkg
#!/bin/bashcommand1&command2&wait从Shell脚本并行运行多个程序–杨河老李(kviccn.github.io)
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/phpls-ls 2.编辑修改.bash_profile文件(没有.bash_profile文件的情况下回自动创建)sudovim~/.bash_profile在文件的最后输入以下信息,然后保存退出exportPATH="/Applications/MAMP/bin/php/php7.2.20/b
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如zh_CN之类的语言包,进行中文语言包装:apt-getinstalllanguage-pack-zh-hans3、安装好后我们可以进行临时修改:然后添加中文支持: locale-genzh_CN.UTF-8临时修改> export LC_ALL='zh_CN.utf8'> locale永久
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexadecimalbash2#[0~1]0[0~7]0x[0~f]or0X[0~f]perl0b[0~1]0[0~7]0x[0~f]tcl0b[0~1]0o[0~7]0x[0~f]bashdifferentbaserepresntationreference2.StringlengthLanguageStr
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全命令补全方法:yum-yinstallbash-completionsource/usr/share/bash-completion/bash_completionsource<(kubectlcompletionbash)echo"source<(kubectlcompletionbash)">>~/.bashrc 
参考这里启动jar包shell脚本修改过来的#!/bin/bash#默认应用名称defaultAppName='./gadmin'appName=''if[[$1&&$1!=0]]thenappName=$1elseappName=$defaultAppNamefiecho">>>>>>本次重启的应用:$appName<
#一个数字的行#!/bin/bashwhilereadlinedon=`echo$line|sed's/[^0-9]//g'|wc-L`if[$n-eq1]thenecho$linefidone<1.txt#日志切割归档#!/bin/bashcd/data/logslog=1.logmv_log(){[-f$1]&&mv$1$2
#文件增加内容#!/bin/bashn=0cat1.txt|whilereadlinedon=[$n+1]if[$n-eq5]thenecho$lineecho-e"#Thisisatestfile.\n#Testinsertlineintothisfile."elseecho$linefidone#备份/etc目录#
# su - oraclesu: /usr/bin/ksh: No such file or directory根据报错信息:显示无法找到文件 /usr/bin/ksh果然没有该文件,但是发现存在文件/bin/ksh,于是创建了一个软连接,可以规避问题,可以成功切换到用户下,但无法执行系统自带命令。$. .bash_profile-ksh: .: .b
history显示历史指令记录内容,下达历史纪录中的指令主要的使用方法如果你想禁用history,可以将HISTSIZE设置为0:#exportHISTSIZE=0使用HISTIGNORE忽略历史中的特定命令下面的例子,将忽略pwd、ls、ls-ltr等命令:#exportHISTIGNORE=”pwd:ls:ls-ltr:”使用HIS
一.命令历史  1.history环境变量:    HISTSIZE:输出的命令历史条数,如history的记录数    HISTFILESIZE:~/.bash_history保存的命令历史记录数    HISTFILLE:历史记录的文件路径    HISTCONTROL:     ignorespace:忽略以空格开头的命令
之前在网上看到很多师傅们总结的linux反弹shell的一些方法,为了更熟练的去运用这些技术,于是自己花精力查了很多资料去理解这些命令的含义,将研究的成果记录在这里,所谓的反弹shell,指的是我们在自己的机器上开启监听,然后在被攻击者的机器上发送连接请求去连接我们的机器,将被攻击者的she
BashOne-LinersExplained,PartI:Workingwithfileshttps://catonmat.net/bash-one-liners-explained-part-oneBashOne-LinersExplained,PartII:Workingwithstringshttps://catonmat.net/bash-one-liners-explained-part-twoBashOne-LinersExplained,PartII
Shell中变量的作用域:在当前Shell会话中使用,全局变量。在函数内部使用,局部变量。可以在其他Shell会话中使用,环境变量。局部变量:默认情况下函数内的变量也是全局变量#!/bin/bashfunctionfunc(){a=99}funcecho$a输出>>99为了让全局变量变成局部变量
1、多命令顺序执行;  命令1;命令2  多个命令顺序执行,命令之间没有任何逻辑联系&&  命令1&&命令2  逻辑与,当命令1正确执行,才会执行命令2||  命令1||命令2  逻辑或,当命令1执行不正确,才会执行命令2例如:ls;date;cd/home/lsx;pwd;who ddif=输入文件of=输
原博文使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?首先,这个符号(#!)的名称,叫做"Shebang"或者"Sha-bang"。Linux执行文件时发现这个格式,会把!后的内容提取出来拼接在脚本文件或路径之前,当作实际执行的命令。 Shebang这个符号通常在Unix系统的脚本
1、历史命令history[选项][历史命令保存文件]选项:-c:  清空历史命令-w:  把缓存中的历史命令写入历史命令保存文件 ~/.bash_historyvim/etc/profile中的Histsize可改存储历史命令数量历史命令的调用使用上、下箭头调用以前的历史命令使用“!n”重复执行第n条历史
目录1.Shell脚本规范2.Shell脚本执行3.Shell脚本变量3.1环境变量3.1.1自定义环境变量3.1.2显示与取消环境变量3.1.3环境变量初始化与对应文件的生效顺序3.2普通变量3.2.1定义本地变量3.2.2shell调用变量3.2.3grep调用变量3.2.4awk调用变量3.3
   http://www.voidcn.com/blog/wszzdanm/article/p-6145895.html命令功能:显示登录用户的信息命令格式:常用选项:举例:w显示已经登录的用户及正在进行的操作[root@localhost~]#w 11:22:01up4days,21:22, 3users, loadaverage:0.00,0.00,0.00USER