Bash基础特性 -- 卷一

Linux Bash的基础特性

一、history(命令历史记录)

1、语法与常用参数

history

列出当前shell的所有history

history [-c]

将当前shell的所有 history 清除

history [n]

n为数字,列出最近的n条记录

history [-raw] histfiles

-a [HISTFILES] :手动追加当前会话缓冲区的命令历史至文件中,如果histfiles事先不存在,则创建,如果不指定histfiles文件,则默认写入~/.bash_history中

-r HISTFILES : 将histfiles中的内容读取到当前shell的history中

-w HISTFILES : 将当前shell 的history写入之histfiles文件中


2、环境变量

HISTSIZE:命令历史记录的条数,默认为1000条

HISTFILE~/.bash_history

HISTFILESIZE:命令历史文件记录历史的条数

[root@Nginx~]#echo$HISTFILE
/root/.bash_history
[root@Nginx~]#echo$HISTSIZE
1000
[root@Nginx~]#echo$HISTFILESIZE
1000



3、history的调用

!#:重复执行第#条命令

!!:执行上一条命令

!string:执行最近一条包含指定字符串的命令

!$:调用上一条命令的最后一个参数

[root@Nginx~]#history10
1019history-a11.txt
1020cat11.txt
1021echo$HISTSIZE
1022ls
1023echo$HISTFILESIZE
1024history
1025pingbaidu.com
1026alias
1027ls
1028history10
#####!#
[root@Nginx~]#!1026
alias
aliascdnet='cd/etc/sysconfig/network-scripts'
aliascp='cp-i'
aliasl.='ls-d.*--color=auto'
aliasll='ls-l--color=auto'
aliasls='ls--color=auto'
aliasmv='mv-i'
aliasrm='rm-i'
aliaswhich='alias|/usr/bin/which--tty-only--read-alias--show-dot--show-tilde'
#####!!
[root@Nginx~]#!!
alias
aliascdnet='cd/etc/sysconfig/network-scripts'
aliascp='cp-i'
aliasl.='ls-d.*--color=auto'
aliasll='ls-l--color=auto'
aliasls='ls--color=auto'
aliasmv='mv-i'
aliasrm='rm-i'
aliaswhich='alias|/usr/bin/which--tty-only--read-alias--show-dot--show-tilde'
#####!string
[root@Nginx~]#!ping
pingbaidu.com
PINGbaidu.com(111.13.101.208)56(84)bytesofdata.
64bytesfrom111.13.101.208:icmp_seq=1ttl=128time=66.8ms
64bytesfrom111.13.101.208:icmp_seq=2ttl=128time=66.9ms
64bytesfrom111.13.101.208:icmp_seq=3ttl=128time=66.9ms
64bytesfrom111.13.101.208:icmp_seq=4ttl=128time=67.4ms
^C
---baidu.compingstatistics---
4packetstransmitted,4received,0%packetloss,time7408ms
rttmin/avg/max/mdev=66.844/67.046/67.480/0.253ms
#####!$
[root@Nginx~]#ping-c1!$
ping-c1baidu.com
PINGbaidu.com(111.13.101.208)56(84)bytesofdata.
64bytesfrom111.13.101.208:icmp_seq=1ttl=128time=67.4ms

---baidu.compingstatistics---
1packetstransmitted,1received,time4071ms
rttmin/avg/max/mdev=67.433/67.433/67.433/0.000ms

4、控制命令历史的记录方式

环境变量:HISTCONTROL

ignoredups:忽略重复的命令,连续且相同的命令

ignorespace:忽略所有以空白开头的命令

ignoreboth:以上两条均生效

修改环境变量:

[root@Nginx~]#exportHISTCONTROL=ignoreboth
[root@Nginx~]#echo$HISTCONTROL
ignoreboth


二、命令与路径补全

1、命令补全

bash执行命令,在用户给定的字符串只有唯一对应的命令时,直接Tab补全;如果不唯一,则再次Tab会给出匹配到的命令列表。bash根据PATH变量中定义的路径自左向右寻找唯一匹配字符串的命令,第一次找到的即为要执行的命令

2、路径补全

把用户给出的字符串当作路径开头,并在其指定的上级目录下搜索以指定的字符串开头的文件名,如果唯一,直接补全;否则再次Tab,给出列表


三、命令行展开

~:展开为用户的主目录

~USERNAME:展开为指定用户的主目录

{}:可承载一个以逗号分隔的列表,并将其展开为多个路径

[root@Nginx~]#mkdir-pv/tmp/{1{1.1,1.2},2}/{a,b}
mkdir:已创建目录"/tmp/11.1"
mkdir:已创建目录"/tmp/11.1/a"
mkdir:已创建目录"/tmp/11.1/b"
mkdir:已创建目录"/tmp/11.2"
mkdir:已创建目录"/tmp/11.2/a"
mkdir:已创建目录"/tmp/11.2/b"
mkdir:已创建目录"/tmp/2"
mkdir:已创建目录"/tmp/2/a"
mkdir:已创建目录"/tmp/2/b"


四、命令的执行状态结果

程序执行有两类结果;一类是返回值,一类是执行状态结果

bash的特色标量$?,保存最近一条命令的执行状态结果

0:成功

1-255:失败

[root@Nginx~]#date
2017年07月09日星期日17:39:35CST
[root@Nginx~]#echo$?
0
[root@Nginx~]#data
-bash:data:commandnotfound
[root@Nginx~]#echo$?
127

五、alias(命令别名)

1、语法与常用参数

alias[-p][name[=value]...]
-p:打印已设置的命令别名

alias:显示当前shell进程所有可用的命令别名

alias NAME='VALUE':定义别名NAME,相当于执行VALUE。

注意:VALUE中有空格等要带引号


2、alias配置

(1)在命令行中定义的别名,仅对当前shell有用

(2)定义在~/.bashrc中对当前用户有效

(3)定义在/etc/bashrc中对所有用户有效

(4)配置完成后,重读配置文件可立即生效

source /etc/bashrc

3、unalias(撤销别名)

unalias[-a]name[name...]
-a:撤销所有别名
注意:如果别名同原命令的名称,则如果要执行原命令,可使用"\COMMAND":

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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