linux特殊符号
1.特殊符号
***********************************#********************************** # : 注释、备注、批注,系统自动忽略,不执行。 # 系统不执行被#号注释的内容 [root@localhost html]# # [root@localhost html]# ***********************************;********************************** # ;命令的分隔符,通过它可以连接多条指令,一起执行 # 查看youxi下的所有文件及其内容&打印123 ll youxi;echo 123 ***********************************..********************************** # ..代表上级目录 # 返回上级目录 cd .. ***********************************.********************************** # .代表当前目录 # 将man_db.conf文件在当前目录复制一份 cp /data/man_db.conf . ***********************************环境变量********************************** # 查看系统内置的环境变量 env # 查看某个变量的值 # $符号+变量名称 eg:echo $LANG # 修改(声明)环境变量 # export 变量名称=值 export LANG=en_US.UTF-8 ***********************************双引号与单引号********************************** # 双引号 用于换行,解析变量 # 用于换行 [root@localhost html]# echo "小王 > 小高 > 小张 > " 小王 小高 小张 # 解析变量 [root@localhost html]# echo "$LANG" zh_CN.UTF-8 # 单引号,换行,不解析变量 # 用于换行 [root@localhost html]# echo '小王 > 小张 > 小李 > ' 小王 小张 小李 # 不解析变量 [root@localhost html]# echo '$LANG' $LANG ***********************************\和/********************************** # \ 转义符,反斜杠 # / 路径分隔符 # 转义符案例 date +%F\ %T ***********************************history********************************** # 历史命令调用 ——> 使用! # 查看历史命令 history # 执行某条历史指令 !历史指令序号 # ########################################### * ########################################### # 通配符 # 查看所有.txt结尾的文件 ls *.txt # ********************************** $ ********************************** # 调用变量 export LANG='en_US.UTF-8' echo $LANG 注意:使用变量的时候要小心,比如有些人操作变量的时候,删除了根目录,如下 # 定义变量 [root@localhost html]# wz=/tmp # 查看变量值 [root@localhost html]# echo $wz /tmp # 删除/tmp目录下的所有内容 [root@localhost html]# rm -rf $wz/* # 但是如果变量值写错了,系统做删除的时候,找不到这个变量,那么会变成如下效果 [root@localhost html]# rm -rf /* # 就删除根目录了,系统崩溃了就 # ********************************** 输入输出重定向,即< > ********************************** # 输出重定向 # 输出重定向【将services中前五行的数据写入到data.txt文件中】 head -5 /etc/services > data.txt # 标准错误输出重定向 head -5 /etc/services 1>right.txt 2>error.txt # 清空文件内容 > data.txt # 输入重定向 # 输入重定向【直接把data.txt文件内容传递给cat命令,即cat 仅接收到了内容,而不是文件本身】 cat < data.txt # 将data.txt中的数据输入过来并写入data1.txt中【写入data1.txt先将里面的数据清除掉】 cat < data.txt > data1.txt # 基于cat实现不断的输出值【值都是打印到屏幕上】 直到0停止 cat << 0 # 基于cat实现不断的输出值并保存到data3.txt中【值都是打印到屏幕上】 直到0停止 cat << 0 > data3.txt # ********************************** | 管道 ********************************** # 将前面的输出当后面的结果 # 查看ip地址 ip a|head -9|tail -1 # ********************************** || 双管道 ********************************** ”“” 规则: 第一个命令成功,不会执行第二个命令 第一个命令是失败,就会执行第二个命令 """ [root@localhost tmp]# cat 1.txt cat: 1.txt: No such file or directory # 第一个命令成功,不会执行第二个命令 [root@localhost tmp]# echo 123||echo 456 123 # 第一个命令是失败,就会执行第二个命令 [root@localhost tmp]# cat 1.txt||echo 123 cat: 1.txt: No such file or directory 123 # ********************************** && ********************************** ”“” 规则: 如果第一个失败了,两个都不执行 如果第一个成功了,第二个失败了,就执行第一个 如果两个都成功了,就都执行 """ # 如果第一个失败了,两个都不执行 [root@localhost tmp]# cat 1.txt&&echo 123 cat: 1.txt: No such file or directory # 如果第一个成功了,第二个失败了,就执行第一个 [root@localhost tmp]# echo 123&&cat 1.txt 123 cat: 1.txt: No such file or directory # 如果两个都成功了,就都执行 [root@localhost tmp]# echo 123&&echo 456 123 456 # ********************************** &(后台运行) ********************************** # 比如top指令,之前运行top,会占住终端,除非结束top,不然不能执行其他指令 [root@localhost tmp]# top& [1] 2040 [root@localhost tmp]# ps -ef |grep top root 2040 1532 0 02:29 pts/0 00:00:00 top root 2042 1532 0 02:29 pts/0 00:00:00 grep --color=auto top # ********************************** ~(代表家目录) ********************************** # 不同的用户家目录不同 # 回到家目录 cd ~ # **********************************`反引号` ********************************** # 用来嵌套命令,反引号中的命令先执行 # 先执行date +%F结果,然后创建文件 touch `date +%F`.txt # 先打印wz,再创建文件夹 mkdir `echo wz`
2.三剑客
grep
擅长过滤,或者说查找,按行来过滤
顺便提一嘴常见的攻击方式:爆破攻击
是一种使用自动化工具大量尝试不同的用户名和密码,强行进行系统的攻击方式。攻击者重复尝试,知道找到正确的凭证,从而获得系统的未授权访问!
# /var/log/secure是记录用户登录系统的行为的,登录成功还是失败,系统都会自动记录这次登录动作。 # 逐行筛选/var/log/下的secure文件中带有'Failed password'的行【以下两种方式都可以】 cat /var/log/secure | grep 'Failed password' grep 'Failed password' /var/log/secure # 想将所有登录失败的ip地址找出来,可以再次过滤 # 比如查看某个ip地址登录了多少次 cat /var/log/secure | grep 'Failed password' | grep '192.168.129.1' | wc -l grep 'Failed password' /var/log/secure | grep '192.168.129.1' | wc -l # 想要筛选所有的ip所在行并标红【-p】 cat /var/log/secure | grep 'Failed password' | grep --color -P "(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)" # 只要筛选出来每行的ip所并对该ip标红【-Po】 cat /var/log/secure | grep 'Failed password' | grep --color -Po "(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)" # 排序加去重加统计重复行数【sort -n |uniq -c】 # 在上面的基础上排序并去重 cat /var/log/secure | grep 'Failed password' | grep --color -Po "(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)" | sort -n | uniq -c
用法
cd /root/ head -50 /etc/services > data.txt ls # 参数相关 -n 显示行号 # 筛选data.txt中tcp所在的行,同时并显示所在的行号 [root@localhost ~]# grep -n 'tcp' data.txt -c 对结果行计数 # 筛选data.txt中含有tcp的行数,然后输出数量 [root@localhost ~]# grep -c 'tcp' data.txt -i 不区分大小写 # 筛选data.txt中含有tcp(不管大写小写)所在的行 [root@localhost ~]# grep -n -i 'tcp' test.txt -v 反向搜索,取反 # 筛选data.txt中除了tcp所在的其他所有行,并显示行号 [root@localhost ~]# grep -n -v 'tcp' data.txt -w 精准匹配 # 筛选data.txt中完全匹配到tcp所在的行,并显示行号 [root@localhost ~]# grep -w -n 'TCP' data.txt -o 表示只输出匹配到的部分,而不是整行。这意味着命令只会显示符合条件的字符串 # 筛选所有的tcp并显示行号 [root@localhost ~]# grep -o -n 'tcp' data.txt -A1 同时打印搜索结果行的后一行 ,A是after的简写 # 筛选所有的tcp并打印每个筛选出来行的后一行,并显示行号 [root@localhost ~]# grep -A1 -n 'tcp' data.txt -B3 同时打印搜索结果行的前三行,B是before的简写 # 筛选所有的tcp,并在筛选到结果的前三行之前打印出来,并显示行号 [root@localhost ~]# grep -B3 -n 'tcp' data.txt -C2 同时打印搜索结果行的上下各两行 # 筛选所有的tcp,并在筛选到结果的上下各两行打印出来,并显示行号 [root@localhost ~]# grep -C2 -n 'tcp' data.txt -E 扩展正则表达式 -P 使用perl正则
sed
擅长取行和修改替换
用法:sed [-nri] [动作] 目标文件文件 选项与参数: -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。 -r :sed 的动作支持的是延伸型正则表示法的语法。(默认是基础正则表示法语法) -i :直接修改读取的文件内容,而不是输出到终端。 动作说明: [n1[,n2]]function n1, n2一般表示为行号,[,n2]表示这个参数可选,可有可无。 function: a :指定行后面插入一行 d :删除 i :指定行前面插入一行 p :打印,#一般和前面的-n参数一起用 s :替换 需要I忽略大小写,全局替换需要g 注意s参数的使用: s/ 后面的模式替换需要包含三部分:拿这个s/pattern/replacement/举例 s/ 后接要匹配的 模式,然后用 / 分隔,再接 替换的内容,最后用 / 结束 eg: sed -i 's/#.*//g' 11.txt # ############################################## 过滤 ############################################ # 生成从 1 到 5 的数字序列 seq 5 > data1.txt # 默认会将所有行都打印出来,并且匹配到的1所在的行重新打印一遍 sed '/1/p' data1.txt # 加上-n,进入安静(silent)模式,就不会将所有内容打印出来了。 sed -n '/1/p' data1.txt # 过滤出tcp所在的行 sed -n '/tcp/p' data.txt # 打印data1.txt中所有行 sed -n 'p' data.txt # 打印1-5行的数据 sed -n '1,5p' data.txt # 打印第5行的数据 sed -n '5p' data.txt # ############################################## 删除 ############################################ # 将删除成功的数据后的结果打印出来【并没有删除原来文件】 sed '/tcp/d' data.txt # 重定向删除之后的结果到udp.txt中 sed '/tcp/d' d ata.txt > udp.txt # 打印 data.txt文件内容时删除以#开头的行【并没有删除原来文件】 sed '/^#/d' data.txt # 直接删除原文件的数据【-i参数】 sed -i '/tcp/d' data.txt # 指定行号来删除 # 删除1-22行的数据,并将剩下的结果打印出来【并没有删除原来文件】 sed '1,22d' data.txt # ############################################## 插入 ############################################ # 在第二行后面插入一行数据【a参数表示插入】 【并没有修改原来文件】 sed '2a hello gt' data1.txt # 在第2行前面插入一行数据 【并没有修改原来文件】 sed '2i hello gt' data1.txt # 加上-i参数就能直接修改原文件 sed -i '2a hello gt' data1.txt # ############################################## 替换 ############################################ # 在文件 data.txt 中查找所有的 "udp" 字符串,并把udp替换成cad【并没有替换原来文件,只要不加-i就不是在源文件替换】 sed 's#udp#cad#' data.txt # 把1替换成11,每行只替换一次,同一行的第二个及之后的1都不进行替换,其实和上面效果一样 sed 's#1#11#' data1.txt # 把所有的tcp都替换成alg sed 's#tcp#alg#g' data.txt # 把所有的tcp和TCP都替换成xxx,忽略大小写,参数I sed 's#tcp#xxx#gI' data.txt
awk
擅长取列
比如data.txt内容如下: 2 this is a test 3 Do you like awk This's a test 10 There are orange,apple,mongo # ############################################## 取列 ############################################ # 打印第一列 awk '{print $1}' data.txt # 打印第三列 awk '{print $1}' data.txt # 取每一行的最后一列,NF是固定写法 awk '{print $NF}' data.txt # 取第一列和最后一列【取多列用逗号隔开】 awk '{print $1,$NF}' data.txt # 取最后一列和第一列【也可以反着写】 awk '{print $NF,$1}' data.txt # 取出第一列和第四列 awk '{print $1,$4}' data.txt 比如data1.txt内容如下: orange 10 20 apple 20 30 mongo 50 10 banana 5 200 # ############################################## 计算 ############################################ # 取第一列,第二列乘以第三列的总和 awk '{print $1,$2*$3}' data1.txt # 还可以加备注信息: awk '{print $1"总价格为:",$2*$3"元"}' data1.txt # ############################################## 根据行号来筛选内容 ############################################ # 取出第一行数据【grep不会取出特定的行,只能筛选某些行】 awk 'NR==1' data1.txt # 取出行号大于2的行数据 awk 'NR>2' data1.txt # 取出行号小于等于3的行数据 awk 'NR<=3' data1.txt # 取出行号大于1并且小于等于3的行 awk 'NR>1 && NR<=3' data1.txt # 还可以取行的同时来取列 awk 'NR<=3{print $1}' data1.txt # 过滤出指定的行 # 取出含有apple数据的行数据 awk '/apple/' data1.txt # grep、sed、awk过滤对比 """ grep 'apple' data1.txt sed -n '1,2p' data1.txt awk 'NR>1 && NR<=3' data1.txt """ # 取/var/log/secure下的ip grep 'Failed password' /var/log/secure # 指定分隔符,默认是按照空格作为分隔符的【passwd这个文件都是用:做的分隔符,所以我用:来分隔】 # 取第七和第一列 awk -F ":" '{print $7,$1}' /etc/passwd # 取出第一行和第二行的第一列数据 awk -F ':' 'NR==1 || NR==2 {print $1}' /etc/passwd # 拼凑指定文本,双引号之间原样输出【指定以:分隔——> -F ":" 】 awk -F ":" '{print $1":-------:"$7}' /etc/passwd # 找出第一列数据中带h的,并取出第一列和第七列的数据 awk -F ':' '$1~/h/{print $1,$7}' /etc/passwd
3.正则表达式
简单的说,正则表达式就是一套处理大量的字符串而定义的规则和方法
1) ^ 表示搜索以什么开头。 2) $ 表示搜索以什么结尾。 3) ^$ 表示空行,不是空格。 4) . 代表且只能代表任意一个字符。 5) \ 转义字符,让有着特殊身份意义的字符,脱掉马甲,还原原型。 例如:\.只表示小数点,还原原始小数点的意义。 6) * 重复0个或多个前面的一个字符。不代表所有了。 7) .* 匹配所有的字符。^.* 任意多个字符开头。 8) [abc] 匹配字符集合内任意一个字符[a-z] 9) [^abc] ^再中括号里面表示非,不包含a或b或c。 10) {n,m} 重复n到m次,前一个字符。 11) + 重复1次到多次 12) ? 重复0次到多次
准备: head -100 /etc/services > data.txt cat -n data.txt # 1. ^ 表示搜索以什么开头 # 找出开头为#号的的行数据 grep '^#' data.txt # 找出开头不是#号的行数据 grep -v '^#' data.txt # 2. $ 表示搜索以什么结尾。 # 找出结尾为ol字母的行数据 grep 'ol$' data.txt # 3. ^$ 表示空行,不是空格。 # 找出所有的空白行 grep '^$' data.txt # 找出所有的非空白行数据【-v 表示相反】 grep -v '^$' data.txt # 找到data.txt中所有的空行并删除,然后在源文件中生效 sed -i '/^$/d' data.txt # 4. .代表且只能代表任意一个字符 # 找到data.txt中所有dp结尾所在的行 grep '.dp' data.txt # 5. \ 转义字符 grep '\.' data.txt # 6. * 重复0个或多个前面的一个字符。不代表所有了。 测试数据 vi num.txt """ a 12222 b 12222222 c 1 b 3 d 122222222222222 e 12 a 4 """ grep '2' num.txt grep '22' num.txt # -o就能看出来,它是两个字符两个字符的匹配 grep -o '22' num.txt grep '12' num.txt grep '12*' num.txt # grep '.*' num.txt # 继续来玩 # 复制一份/etc/services的前100行数据到serv文件中,然后将去掉serv文件中所有含有#的行和空行 head -100 /etc/services > file.txt #################################基于sed实现删除################################# # 去掉含有#号的行【源文件的也删除】 sed -i '/#/d' file.txt # 去掉所有空行 sed -i '/^$/d' file.txt #################################基于sed查找################################# head -100 /etc/services > file1.txt # 筛选含有#号或者空行的行 grep -E '^$|#' file1.txt # 筛选不含有#号或者空行的行 grep -Ev '^$|#' file1.txt # 去掉所有的注释 vi 11.txt """ hello -a #a表示友好 hello -b #b表示不友好 hello -c #c表示骂人 # 哈哈,这是个啥s # what? hello -d #d表示非常爱你 """ # 解释: s/模式替换后面有三个部分: s/ 后接要匹配的模式 即#.* ——> 以#开头,后跟任意0到无数的字符 第二个/后接替换的内容 ——> 没写表示空 第三个/表示结束 g 表示全局替换,.即所有 # 及其后内容都被删除 不使用:只删除第一个 # 及其后内容,而其他部分则保持不变 # 去除11.txt文件中所有注释的内容 sed -i 's/#.*//g' 11.txt # 删除11.txt文件中所有空行 sed -i '/^$/d' 11.txt # 7. [abc] 匹配字符集合内任意一个字符[a-z]、[0-9]、[A-Z],多选一,[0,9]这个是2选1. # 查找所有包含数字0~9的行,并输出这些行的行号和内容 grep -En '[0-9]' file1.txt # 从文件file1.txt中查找包含字符 0 或 9 的行,,并输出这些行的行号和内容 grep -En '[0,9]' file1.txt # 8.[^abc] ^在中括号里面表示非,不包含a或b或c。 # 从 file1.txt 文件中查找所有包含非数字字符的行 grep '[^0-9]*' file1.txt # 从 file1.txt 文件中查找所有包含非小写字母的行并输出 grep '[^a-z]' file1.txt # 从 file1.txt 文件中查找所有包含非字母和非数字的字符的行 grep '[^a-z0-9A-Z]' file1.txt # 8.{n,m} 重复n到m次,前一个字符 # 输出 /var/log/secure 文件中所有由7到15个数字或小数点组成的部分 grep -Eo '[0-9.]{7,15}' /var/log/secure # 9. + 重复1次到多次,和*不同 # 匹配任何以1开头,后面紧跟任意数量(包括零个)的 9 的字符串。 grep -E '19*' /var/log/secure # 匹配任何包含1后紧跟一个或多个9的字符串 grep -E '19+' /var/log/secure # 10. ? 重复0次到1次 # 匹配到一个就输出一个 grep -Eo '[0-9]*' /var/log/secure # 更加贪婪一些【后面有就会接着匹配,匹配不到就匹配第一个输出】 grep -Eo '[0-9]?' /var/log/secure # 取ip的例子: grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /var/log/secure
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」