【OSCP官方视频】三、命令行的乐趣

环境变量

Bash是一种shell,结合了corn shell和seashell的。

环境变量:$PATH$NAME$PWDHOME$

可以使用export定义一个环境变量,这样可以快速在当前shell和子shell中使用变量。如果不使用export导出,那么定义的变量只能在当前shell中使用。

可以通过env查看环境变量信息

历史命令

多的不赘述

按下Ctrl + r可以启用搜索功能,通过键入字符找到最近的相似命令,回车进行执行。

管道和重定向

每个程序都有三个数据流,标准输入、标准输出、标准错误输出

>重定向进行覆盖,>>重定向进行追加

搜索

通过组合|和grep进行

sed也是一个牛逼的流编辑器,对流数据进行编辑。

cut可以对流数据进行编辑,比如提取passwd中的用户名:cut -d ":" -f 1 /etc/passwd。使用:作为分隔符,提取第一个字段,处理passwd文件

awk应该是最牛逼的,感觉跟python很像:echo "hello::frined::f4ck::U" | awk -f "::" '{print $1, $3}'。可以理解成多个cut进行组合

实践

假设有一个日志文件access.log如何进行处理

head快速查看前10行看一眼数据是不是正常。

wc -l看一眼总数量

cat access.log | cut -d " " -f 1 | sort -u,通过读取日志,cut出ip地址并使用sort进行去重,得到所有的IP地址,但是依然不明显。


cat access.log | cut -d " " -f 1 | sort | uniq -c | sort -urn,统计处各IP的访问总量,并按照频率排序

这条命令是一条 Linux/Unix 命令行命令,用于处理一个名为 access.log 的日志文件。让我一步步解释这条命令以及每个部分的作用:

  1. cat access.log:这部分命令使用 cat 命令来读取 access.log 文件的内容并将其发送到标准输出(通常是终端窗口)。
  2. cut -d " " -f 1:接下来使用 cut 命令,其中 -d " " 指定了字段的分隔符为空格,-f 1 指定了要提取的字段为每行的第一个字段。这一步的作用是从日志文件的每一行中提取出第一个字段,通常是 IP 地址或者是某种标识符。
  3. sort:然后使用 sort 命令对提取出来的字段进行排序。这一步会将提取出来的字段按照字典顺序进行排序。
  4. uniq -c:接着使用 uniq -c 命令,它会将相邻的重复行合并,并在每行前面加上该行在原始文件中出现的次数。这样就可以统计每个唯一的字段值出现的次数。
  5. sort -urn:最后使用 sort -urn 命令,其中 -u 表示去除重复行,-r 表示按照逆序排序,-n 表示按照数字顺序排序。这一步的作用是对统计后的结果进行逆序排序,以便找出出现频率最高的字段值。

综合起来,这条命令的作用是从日志文件中提取出每行的第一个字段(通常是 IP 地址或标识符),统计每个字段值出现的次数,并按照出现频率从高到低排序输出。这样可以帮助用户快速了解哪些 IP 地址访问量最大或者哪些标识符出现次数最多。


cat access.log | grep "x.x.x.x" | cut -d "\"" -f 2 | uniq -c这条命令检查一下某个IP访问的地址,并进行了统计

在进一步检查一下

cat access.log | grep "x.x.x.x" | grep "/admin" | sort -u检查登录口,可能发现登录失败,看返回码,如果有200,可能会是登录成功。

文本比较

comm A B比较AB,会分成三列,第一列是A中独有的数据,第二列是B中独有的数据,第三列是共有的数据。可以通过-来减去某一列,如comm -12 A B就减去了一二列,只剩下了第三列来查找公有的数据。

diff -c A B可以按照主流的格式展示文件之间的差异,上减下增。-u参数将输出合并的结构,翻译一下就是如果要使A变成B,要删除和添加哪些数据。

vimdiff工具更直观,直接像github一样直接出对比

进程管理

使用管道符如cat 1.txt | wc -m。这是两个进程,但是会被视为一个作业

终端只有一个,当执行较长命令的时候会占用终端过长时间,这个时候需要将作业挂到后台进行执行,需要在命令末尾添加&。如果执行了前台命令就只有通过Ctrl + c取消,或者Ctrl + z将任务挂起暂停。暂停的任务可以通过bg命令将挂起的作业调度至后台继续进行,或fg调度至前台。但是有很多任务是时间敏感的,如果挂起的时间过长可能会导致运行出错。

当挂起了多个作业时,可以通过fg重新将作业调度至前台,通过jobs查看作业列表,使用fg %X将编号为X的作业调度至前台。只有一个job的时候,直接fg就可以进行调度。

ps -ef查看进行列表,ps -fC XXX查找XXX命令的进程,ps的手册值得研究,简直就是进程管理的瑞士军刀。

kill XXX 结束PID为XXX的进程。

文件监控

日志文件往往会被不停地追加,这个时候使用tail命令可以只看尾部,这样就很舒服了。

watch用来定时执行命令,进行检查。默认两秒一次。可以通过-n参数调整秒数。比如长期检测在线的用户:watch -n 3 who这样每三秒执行一次who命令查询在线的用户。

文件下载

wgetcurlaxel。最后一个是多连接下载器,速度要快些。

简单记录下,wget更像是专门下载,支持http和ftp协议

curl是一个多功能工具,能上传下载,支持更复杂的参数。

axel是一个下载加速器,像IDM

自定义bash环境

可以设置环境变量HISTCONTROL是否删除重复的命令、HISTIGNORE设置正则忽略记录某些命令。HISTTIMEFORMAT设置时间戳显示的格式

alias别名,可以构用来自定义构造一些命令:alias lsa='ls -al'。这样执行lsa命令就相当于执行了ls -al

直接执行alias就是查看有哪些别名

永久性bash定制

通过修改系统的bashrc或用户的bashrc进行永久性修改:/etc/bashrc~/.bashrc

评论区
头像
文章目录