声明!
学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)
目录
- Linux 系统基本命令介绍
- Shell 与终端的关系
- 常见的 Shell 类型
- 如何切换和使用不同的 Shell
- 环境变量
- 环境变量的概念
- 查看和定义环境变量
- 本地与全局环境变量的区别
- Bash 命令历史
- Bash 命令历史的作用
- 命令历史可能泄露的敏感信息
- 如何查看和管理命令历史
- 防止命令历史泄露的方式
- 管道与重定向
- Linux 三大数据流
- 重定向的使用方法
- 管道的使用与实际应用
- 错误输出的重定向
- 文本搜索
- 文本搜索命令和参数
- 递归搜索与忽略大小写的使用方法
- 后渗透阶段的文本搜索应用
1. Linux 系统基本命令介绍
Shell 与终端的关系
Linux 系统默认是通过字符界面与用户交互的。虽然可以安装图形界面(如 GNOME 或 KDE),但在没有图形界面的情况下,用户通过命令行输入指令与操作系统进行交互。
Shell 是 Linux 系统与用户之间的“操作接口”,它接收用户输入的命令并进行解析,然后将这些命令交给 Linux 内核 执行,执行结果最终返回给用户。通过这种方式,Shell 充当了操作系统与用户之间的桥梁。
需要注意的是,终端 并不等同于 Shell。一个系统中可以有多个终端程序,而每个终端都会运行一个独立的 Shell 进程。比如,你在 Kali Linux 中打开一个终端窗口时,实际上是启动了一个 Shell 实例,用户在该终端中输入的所有命令会被该 Shell 解析并传递给操作系统内核执行。
常见的 Shell 类型
Linux 系统最常用的 Shell 是 Bash(Bourne Again Shell)。不过,除了 Bash 之外,还有很多其他类型的 Shell,例如:
- Bash:最常用的 Shell,兼容并扩展了传统的 sh。
- Zsh:功能强大的 Shell,Kali Linux 最新版本的默认 Shell。
- Fish:一个现代化的 Shell,提供丰富的自动补全和高亮显示。
- Csh/Ksh:分别是 C Shell 和 Korn Shell,支持一些不同的功能和语法特性。
你可以通过命令 echo $SHELL
查看当前使用的 Shell 类型。如果你使用的是 Kali Linux,默认的 Shell 很可能是 Zsh,但你可以随时切换回 Bash,通过输入 bash
命令即可。
如何切换和使用不同的 Shell
如果你想在终端中切换到不同的 Shell,比如从 Zsh 切换到 Bash,只需输入 bash
即可,反之则通过输入 zsh
来切换。需要注意的是,某些脚本可能仅在特定的 Shell 下有效,因为不同的 Shell 支持不同的特性与语法。
2. 环境变量
环境变量的概念
在 Linux 中,环境变量 是一组控制 Shell 行为和程序执行的重要信息。每次打开一个终端,都会加载一系列默认的环境变量,这些变量包括用户信息、系统路径等。环境变量为程序提供必要的配置信息,影响着系统的行为与执行。
例如,$PATH 变量包含了一组目录路径,告诉系统在这些目录中查找可执行文件;$USER 变量表示当前用户的名称。
查看和定义环境变量
- 查看环境变量:可以通过
echo $USER
查看当前用户,或者使用env
查看所有环境变量。 - 定义环境变量:
- 本地环境变量:可以通过命令
a=dage
定义一个局部变量。这个变量只在当前终端会话中有效,一旦关闭终端或切换会话,它将失效。 - 全局环境变量:如果希望变量在子进程中仍然有效,可以使用
export
命令。例如:
通过export a=bbbbccc
export
定义的变量可以在当前 Shell 会话及所有子进程中使用。
- 本地环境变量:可以通过命令
本地与全局环境变量的区别
-
本地变量:这些变量仅在当前 Shell 会话中有效。你可以在 Shell 中直接定义,例如:
a=dage echo $a # 输出 dage
但是如果你启动一个新的 Shell 进程(子 Shell),这些变量就不可用了。
-
全局变量:如果你希望在当前 Shell 会话及所有子进程中都能访问该变量,你需要使用
export
命令:export a=bbbbccc echo $a # 输出 bbbbccc
全局变量在你打开的所有终端中都是有效的,甚至在新启动的进程中也可以访问。
3. Bash 命令历史
Bash 命令历史的作用
每次执行命令时,Bash Shell 会将你输入的命令保存到一个历史文件中(默认情况下是 .bash_history
文件)。通过历史记录,你可以快速查看和重新执行之前的命令。这对于频繁使用的命令或调试非常有帮助。
但是,命令历史可能泄露敏感信息,例如密码、数据库连接信息等。因此,我们需要对历史命令进行管理,以避免敏感信息的泄漏。
命令历史可能泄露的敏感信息
通过查看 .bash_history
或 .zsh_history
文件,恶意用户可能会发现一些潜在的机密信息。例如,如果管理员在命令行中输入了数据库的密码(例如 mysql -u root -p123456
),这类命令会被保存下来,可能会被攻击者利用。
如何查看和管理命令历史
你可以通过以下命令查看历史命令:
history
这将显示你执行过的所有命令。你也可以使用 !
命令快捷方式来执行历史命令,例如:
!72 # 执行第72条历史命令
防止命令历史泄露的方式
为了防止敏感信息被泄露,可以采取以下措施:
- 禁止记录历史命令:在某些敏感操作中,你可以临时禁用历史记录:
unset HISTFILE # 禁用历史记录
- 限制历史记录的存储量:通过设置
HISTSIZE
(内存中的历史命令数量)和HISTFILESIZE
(历史文件中的命令数量)来限制命令历史的存储量。
你还可以配置 ~/.bashrc
文件中的 HISTCONTROL
来忽略某些命令的记录。
4. 管道与重定向
Linux 三大数据流
每个命令行程序都通过 三大数据流 与外界进行交互:
- 标准输入(STDIN):默认情况下,程序从终端接收输入数据(数据流编号为0)。
- 标准输出(STDOUT):程序的输出数据默认显示在终端上(数据流编号为1)。
- 标准错误(STDERR):程序的错误输出,也默认显示在终端上(数据流编号为2)。
重定向的使用方法
-
标准输出重定向:使用
>
符号将命令的输出重定向到文件。例如:echo "Hello World" > hello.txt
这会将
"Hello World"
写入hello.txt
文件。如果文件已经存在,内容将被覆盖。 -
标准输出追加重定向:使用
>>
符号将命令的输出追加到文件中:echo "New Line" >> hello.txt
-
标准错误重定向:如果你希望将错误信息重定向到文件,可以使用
2>
:
ls nonexistentfile 2> error.txt
管道的使用与实际应用
管道(Pipe) 允许你将一个命令的输出传递给另一个命令。例如,以下命令将 cat
命令的输出传递给 grep
,筛选出包含“root”的行:
cat /etc/passwd | grep root
错误输出的重定向
你还可以将错误输出(STDERR)与标准输出分开重定向。例如,将标准输出和错误输出分别重定向到不同文件:
ls /etc > output.txt 2> error.txt
5. 文本搜索
文本搜索命令和参数
在 Linux 中,最常用的文本搜索工具是 grep。它允许你在文件中查找匹配特定模式的文本行。例如,以下命令会查找 /etc/passwd
文件中包含“root”的行:
grep "root" /etc/passwd
-i
:忽略大小写。-r
:递归搜索目录。-l
:只显示包含匹配文本的文件名。
递归搜索与忽略大小写的使用方法
递归搜索目录并忽略大小写:
grep -Ri "root" /etc
后渗透阶段的文本搜索应用
在渗透测试中,你可能会需要在大量的文件中查找敏感信息。例如,你可以搜索包含特定关键字的日志文件、配置文件或代码库。这种技术对于发现数据库连接字符串、API 密钥等信息特别有用。