分号
cmd1;cmd2;cmd3
cmd1将首先运行,不管cmd1运行成功还是出现错误,cmd2都会在它之后运行,当cmd2命令完成时,cmd3将会运行
&&
先执行左边,只有左边为真,才会执行右边
有时候希望确保linux命令中,只有在前一个命令成功结束时,下一个命令才会运行。
cmd1 && cmd2 && cmd3
当第一个命令出现错误时,&&分隔的命令会停止执行后面的命令
&
放在启动参数后面表示设置此进程为后台进程
语法:command1 &
在CTF中,表示先执行右边再执行左边
eg.command1 & command2
||
左边为真时,则右边不执行;
左边为假时,才会继续执行右边
只有在前一个命令出现错误时才运行下一个命令:
cmd1 || cmd2 || cmd3
如果cmd1运行失败,则运行cmd2,如果cmd2运行成功,cmd3将不会运行
|
管道符
前一个命令的结果作为后一个命令的参数
cmd1 | cmd2
eg. echo xxx|base 64
换行符
%0a
%0d
{}与()
把几个命令合在一起执行,既可以在当前shell也可以在子shell
中执行一组命令
(command1;command2;command3....)
{ command1;command2;command3....} //第一条命令必须与左边的括号有一个空格,最后一条命令一定要有分号
{command.argument}
相同点:
()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
不同点:
()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行
()最后一个命令可以不用分号,{}最后一个命令要用分号
()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
()和{}中括号里的某个命令的重定向只影响该命令,但括号外的重定向则会影响到括号里的所有命令
输入/输出的重定向
n > file 将文件描述符为n的文件输出重定向到file
n < file 将文件描述符为n的文件输入重定向到file
n >> file 将文件描述符为n的文件以追加的方式重定向到file
n >& file 将输出文件m和n合并
n <& file 将输入文件m和n合并
<< tag 将开始标记tag和结束标记tag之间的内容作为输入
正则表达式
描述一种字符串匹配的模式,用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等
正则表达式中的字符簇含义
[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]