从技术上讲,有两种类型的变量:shell和环境变量。环境变量是构建在系统和接口中的系统范围的变量,它们控制用户对系统的外观、行为和“感觉”,并且它们由任何子shell或进程继承。另一方面,shell变量通常以小写形式列出,并且只在它们所设置的shell中有效。
变量只是键值对中的字符串。通常是key=value。在多个值的情况下,看起来像key=value1:value2。与linux中的大多数东西一样,如果值中有空格,则需要包含在引号中。
在kali中,环境就是bash shell。每个用户,包括根用户,都有一组默认的环境变量。可以更改这些变量的值,使你的系统更有效的工作,调整你的工作环境以最好的满足你的个人需要,如果需要,还可以覆盖你的痕迹。
查看和修改环境变量
env 查看所有默认的环境变量
环境变量总是大写的。这些只是系统上的默认环境变量。用户还可以创建自己的变量。
查看所有环境变量
要查看所有环境变量,包括shell变量、本地变量和shell函数(如任何用户定义的变量和命令别名),请使用set命令。输出内容多,无法再单个屏幕上查看所有这些变量。可以使用set请求以更容易访问的方式逐行查看每个变量,并将其传递到more命令
set | more
特定变量的过滤
寻找一个特定的变量
HISTSIZE为例,此变量包含命令历史记录文件存储的最大命令数。它不会存储命令本身,只存储可以存储的命令数。
set | grep HISTSIZE
更改会话的变量值
有时,你不希望系统保存过去的命令 - 可能是因为你不希望在自己的系统或目标系统上留下任何活动证据。在这种情况下,你可以将HISTSIZE变量设置为0,系统就不会存储你以前的任何命令。
HISTSIZE=0
使变量值永久更改
使用export命令。这个命令把当前环境(bash shell)中的新值导出到系统的其余部分,使其在每个环境中都可用。
备份变量。
echo $HISTSIZE > ~/valueofHISTSIZE.txt
set > ~/valueofALLon01012017.txt
在更改了一个变量之后,可以通过export,后面跟变量的名称来永久更改
export HISTSIZE
更改SHELL提示符
shell提示符是另一个环境变量。kali中的默认shell提示符采用以下格式
username@hostname:current_directory
可通过设置PS1变量的值来更改默认shell提示符中的名称。PS1变量有一组占位符,用于显示希望在提示符中显示的信息。
\u 当前用户的名称 \h 主机名 \W当前工作目录的基本名称
更改一下终端中的提示符
PS1="World's Best Hacker: #"
export PS1='C:\w'
改变你的PATH
在你的环境中,最重要的变量之一是PATH变量,它控制你的shell将在系统的哪个位置查找你输入的命令,比如cd、ls和echo,大多数命令位于sbin或bin子目录中,比如/usr/local/sbin或usr/local/bin。如果bash shell没有在PATH变量中的某个目录中找到该命令,它将返回“未找到错误”命令,即使该命令确实存在于路径之外的目录中。
你可以找到哪些目录存在路径变量中,使用echo
echo $PATH
当你输入任何命令时,系统知道在这些目录中查找它们并执行它们。
添加到PATH变量
如果你下载并安装了一个新工具(比如newhackingtool)到/root/newhackingtool目录中,你只能在该目录中使用该工具的命令,因为该目录不在PATH变量中。每次想使用时,首先必须导航到/root/newhackingtool,如果你经常使用就有点不方便。
要从任何目录中使用此新工具,需要将包含此工具的目录添加到PATH变量中。
要向PATH变量添加newhackingtool,请输入以下命令:
PATH=$PATH:/root/newhackingtool
echo $PATH
创建用户定义的变量
你可以在linux中创建自己的自定义变量,只需要为命名的新变量分配一个值。当你在进行一些更高级的shell脚本编写时,或厌烦了输入很长的命令时,很有用。
语法很简单:变量的名称,赋值符号,变量的值
MyNewVariable="hacking is the most valuable skill set in the 21st century"
echo $MyNewVariable
就像我们的系统变量一样,必须导出用户定义的变量才能将其持久化到新的会话中。
如果要删除这个新变量或任何变量,请使用unset命令。
unset MyNewVariable
echo $MyNewVariable