【2024版】最新shell安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了_shell教程(1)

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

atan2(x,y) y,x 范围内的余切

cos(x) 余弦函数

exp(x) 求 幂
int(x) 取整
log(x) 自然对 数
rand() 随机数
sin(x) 正弦
sqrt(x) 平 方根
srand(x) x是rand()函数的种子
int(x) 取 整,过程没有舍入
rand() 产生一个大于等于0而小于1的随机数


#### 例子


##### 1、只查看 ett.txt 文件(共 100 行)内第 20 到第 30 行的内容



awk ‘NR>19&&NR<31’ ett.txt

awk ‘{ if (NR>19&&NR<31) print $0}’ ett.txt


##### 给文件内容加行号



awk ‘{print NR,$0}’ /etc/inittab


##### 输出第24行并且加行号



awk ‘NR==24 {print NR,$0}’ /etc/inittab4


##### 标准写法



awk -F ‘[ :]+’ ‘NR==2{print $(NF-1)}’ /etc/passwd

相当于

awk ‘BEGIN{FS=“[ :]+”}NR==2{print $(NF-1)}’ /etc/passwd

awk ‘BEGIN{RS=“/”} {print $0}’ /etc/passwd


##### 以一个或多个/为行的分割符,打印第二行的第二列,列的分隔符为默认的空格,并打印行号



awk ‘BEGIN{RS=“[/]+”} NR==2{print NR,$2}’ test


#### 正则:


##### 以:为分隔符,打印第5列以s开头的一整行awk -F “:” ‘$5~/^s/{print $0}’ /etc/passwd


##### 以/为分隔符,匹配倒数第二行的s或者没有s后面是bin的整行



awk -F “/” ‘$(NF-1)~/(s|)bin/’ /etc/passwd


##### 匹配第一列以ssh或者ftp或mysql开头或者结尾的行



awk ‘ 1   / ( s s h ∣ f t p ∣ m y s q l ) 1~/^(ssh|ftp|mysql) 1 /(sshftpmysql)/{print $1,$2}’ /etc/services


##### 输出结果6 0 1 2



echo “6@@@@@@@@@@@@@@@0=============1##############2” |awk -F ‘[@=#]+’ ‘{print $1,$2,$3,$4}’


#### awk统计百分比的问题


##### 日志样子举例如下:


http://youku.com 200 http://youku.com 302 http://youku.com 403 http://youku.com 502 http://baidu.com 302 http://baidu.com 404


现想使用awk命令按域名统计 返回码大于等于400的百分比,假如优酷总共有4行,大于等于400的返回码有两行,那占比就为50%



awk '{

count[$1]++;

if($2>400)above400[$1]++

}

END{

for(i in count){

print i, count[i], above400[i]/count[i]}

}’ < xxx.txt


#### 比较


##### if 中 [ -a --> -z ]



[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -d FILE ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。



[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
[ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。
[ -z STRING ] “STRING” 的长度为零则为真。
[ -n STRING ] or [ STRING ] “STRING” 的长度为非零 non-zero则为真。
[ STRING1 == STRING2 ] 如果2个字符串相同。 “=” may be used instead of “==” for strict POSIX compliance则为真。
[ STRING1 != STRING2 ] 如果字符串不相等则为真。
[ STRING1 < STRING2 ] 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale则为真。
[ STRING1 > STRING2 ] 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale则为真。
[ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers.


##### 字符串判断



str1 = str2      当两个串有相同内容、长度时为真
str1 != str2      当串str1和str2不等时为真
-n str1        当串的长度大于0时为真(串非空)
-z str1        当串的长度为0时为真(空串)
str1         当串str1为非空时为真


##### 数字的判断



int1 -eq int2    两数相等为真
int1 -ne int2    两数不等为真
int1 -gt int2    int1大于int2为真
int1 -ge int2    int1大于等于int2为真
int1 -lt int2    int1小于int2为真
int1 -le int2    int1小于等于int2为真


##### 文件的判断



-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真


##### 复杂逻辑判断



-a         与
-o        或
!        非


##### 统计一个文件的中所有的error的占比



awk ‘/error/{err++}END{print err,NR,err/NR*100"%" }’ < xxx.txt 12


#### 关联数组访问问题


##### a.txt和b.txt两个文件相同的两个字段(id|money),输出a和b文件中相同id并且b文件money值大的一行



cat >>a.txt <<EOF

1|13|35|57|79|9

ROF



cat >>b.txt<<EOF

1|12|23|304|45|56|67|708|89|910|10

EOF



awk -F ‘|’ 'BEGIN{ while(getline < “a.txt”) { user_map[$1] = $2; } }{

if ($1 in user_map) {if (user_map[$1] < $2) print $0; }}’ b.txt


注意:如果a.txt不存在,getline会返回-1,导致死循环。我以前曾经碰上过因为这个原因导致程序挂死,所以特别提出来让大家注意


##### tomcat并发数



netstat -an|grep 10050|awk ‘{count[$6]++} END{for (i in count) print(i,count[i])’


## sed


### sed功能



Sed是Strem Editor(流编辑器)缩写,是操作、过滤和转换文本内容的强大工具。常用功能有增删改查,过滤,取行。


### 参数



-n #取消默认输出
-r #使用扩展正则
-i #刷到磁盘
-e #执行多条sed指令
-f #指令放在文件里


### 指令



a 追加
i 插入
d 删除
c 替换指定的行
s 替换每一行匹配到的第一个字符
g 替换每一行的全部
p 输出
w 另存文件
e 执行bash命令
q 不继续往下读取


### 流程


sed 读取文件是逐行读取处理输出


### 增删改查


#### 增


##### 单行增加



sed ‘2a 106,dandan,CSO’ person.txt

sed ‘2i 106,dandan,CSO’ person.txt


##### 多行增加



sed ‘2a 106,dandan,CSOn107,bingbing,CCO’ person.txt


##### 例子



Port 52113

PermitRootLogin no

PermitEmptyPasswords no

UseDNS no

GSSAPIAuthentication no


现在想一条命令增加5行文本到第13行前(地址用逗号分隔的,n1,n2可以用数字、正则表达式、或二者的组合表示)



sed -ir ‘13 i zbcdnPort 52113nPermitRootLogin nonPermitEmptyPasswords nonUseDNS nonGSSAPIAuthentication non#####–end–#######n’ /etc/ssh/sshd_config


##### 其他例


* 10{sed-commands} 对第10行操作
* 10,20{sed-commands} 对10到20行操作,包括第10,20行
* 10,+20{sed-commands} 对10到30(10+20)行操作,包括第10,30行
* 1~2{sed-commands} 对1,3,5,7,……行操作
* 10, 
 
 
 
 
 
 s 
 
 
 e 
 
 
 d 
 
 
 − 
 
 
 c 
 
 
 o 
 
 
 m 
 
 
 m 
 
 
 a 
 
 
 n 
 
 
 d 
 
 
 s 
 
 
 
 对 
 
 
 10 
 
 
 到最后一行 
 
 
 ( 
 
 
 
 {sed-commands} 对10到最后一行( 
 
 
 sed−commands对10到最后一行(代表最后一行)操作,包括第10行
* /oldboy/{sed-commands} 对匹配oldboy的行操作
* /oldboy/,/Alex/{sed-commands} 对匹配oldboy的行到匹配Alex的行操作


\*


* /oldboy/,${sed-commands} 对匹配oldboy的行到最后一行操作
* /oldboy/,10{sed-commands} 对匹配oldboy的行到第10行操作,注意:如果前10行没有匹配到oldboy,sed软件会显示10行以后的匹配oldboy的行,如果有1,/Alex/{sed-commands} 对第1行到匹配Alex的行操作


\*


* /oldboy/,+2{sed-commands} 对匹配oldboy的行到其后的2行操作


#### 删除


##### 删除指定的行


* sed ‘d’ person.txt #删除全部
* sed ‘2d’ person.txt #删除第二行
* sed ‘2,5d’ person.txt #删除2到5行
* sed ‘3,$d’ person.txt #删除3到结尾
* sed ‘1~2d’ person.txt #删除1,3,5行
* sed ‘1,+2d’ person.txt #删除1,2,3
* sed ‘/zhangyao/d’ person.txt #删除匹配的zhangyao行
* sed ‘/oldboy/,/Alex/d’ person.txt #删除匹配oldboy到Alex行
* sed ‘/oldboy/,3d’ person.txt #删除从匹配oldboy的3行


###### 打印文件内容但不包含oldboy



sed ‘/oldboy/d’ person.txt #删除包含"oldboy"的行


#### 更改


##### 按行替换c 用新行取代旧行



sed ‘2c 106,dandan,CSO’ person.txt #替换第2行的内容


##### 文本替换s:单独使用,将每一行中第一处匹配的字符串进行替换


* g:每一行进行全部替换
* -i:修改文件内容


##### sed软件替换模型(方框▇被替换成三角▲)



sed -i ‘s/▇/▲/g’ oldboy.log

sed -i ‘s#▇#▲#g’ oldboy.log


##### 指定行修改配置文件


指定行精确修改配置文件,这样可以防止修改多了地方。



sed ‘3s#0#9#’ person.txt


##### 变量替换



x=a

y=b

echo $x $y

sed s#KaTeX parse error: Expected 'EOF', got '#' at position 2: x#̲y#g test.txt


##### 分组替换( )和1的使用说明


sed软件的( )的功能可以记住正则表达式的一部分,其中,**1为第一个记住的模式即第一个小括号中的匹配内容**,2第二记住的模式,即第二个小括号中的匹配内容,**sed最多可以记住9个。**


###### 例:echo I am oldboy teacher.如果想保留这一行的单词oldboy,删除剩下的部分,使用圆括号标记想保留的部分。



echo I am oldboy teacher. |sed ‘s#^.*am ([a-z].*) tea.*KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲1#g' echo I a…#1#g’
echo I am oldboy teacher. |sed -r ‘s#I (.*) (.*) teacher.#12#g’


命令说明


思路:用oldboy字符替换I am oldboy teacher.


下面解释用□代替空格



^.*am□ –>这句的意思是以任意字符开头到am□为止,匹配文件中的I am□字符串;
([a-z].*)□–>这句的外壳就是括号(),里面的[a-z]表示匹配26个字母的任何一个,[a-z].*合起来就是匹配任意多个字符,本题来说就是匹配oldboy字符串,由于oldboy字符串是需要保留的,因此用括号括起来匹配,后面通过1来取oldboy字符串。
□tea.*$–>表示以空格tea起始,任意字符结尾,实际就是匹配oldboy字符串后,紧接着的字符串□teacher.;
后面被替换的内容中的1就是取前面的括号里的内容了,也就是我们要的oldboy字符串。
()是扩展正则表达式的元字符,sed软件默认识别基本正则表达式,想要使用扩展正则需要使用转义,即()。
sed使用-r选项则可以识别扩展正则表达式,此时使用()反而会出错。


#####系统开机启动项优化



chkconfig --list|grep “3:on”|grep -vE “sshd|crond|network|rsyslog|sysstat”|awk ‘{print $1}’|sed -r ‘s#^(.*)#chkconfig 1 off#g’|bash

chkconfig --list|grep “3:on”


###### 特殊符号&代表被替换的内容#→将1到3行的C替换为–C–



sed ‘1,3s#C#–&–#g’ person.txt         #→此处&等于C

学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值