# 第三章 LINUX 基础
## 3.2 Linux 命令行
说起命令行,这里是指一个基于文本的交互界面,它允许你执行命令、查看结果。你可以运行一个终端程序(图形桌面下的一个文本框程序,或者是非图形桌面下的文本控制台),通常它包含了一个命令解释器。
### 3.2.1 如何获得一个命令行
如果你的系统正常工作的话,最简单地方式就是运行一个终端程序。比如,在默认的 Kali Linux 系统中,可以从常用应用列表中运行 GNOME 终端。也可以在“活动屏”(将鼠标移动到屏幕左上角可以激活此窗口)中输入“终端 terminal” ,然后点击对应的应用图标。
图 3.1 启动 GNOME 终端
如果你的图形系统挂掉了,你仍然可以通过虚拟控制台(通过组合键 CTRL + ALT + F1 到 F6 可以运行最多6个虚拟控制台,如果你已经在文本模式或者不在 Xorg和Wayland 图形系统中,则可以省略 CTRL 键)运行命令行。在获得命令行访问权限之前,你会看到一个非常基础的登录界面,输入用户名和密码后就可以获得 shell 了。
Kali GNU/Linux Rolling kali-rolling tty3
kali-rolling login: root
Password:
Last login: Fir Mar 25 12:30:05 EDT 2016 from 192.168.122.1 on pts/2
Linux kali-rolling 4.4.0-kali1-amd4 #1 SMP Debian 4.4.6-1kali1 (2016-03-18) x86_64
The programs included with the Kali GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@kali-rolling:~#
处理输入和执行命令的程序叫做 shell (或者叫命令行翻译器)。Kali Linux 默认提供的 shell 是 Bash (它代表 Bourne Again Shell )。结尾的字符 “$” 或 “#” 表明 shell 正在等待输入,同时也表明 Bash 识别你为普通用户($)还是超级用户(#)。
### 3.2.2 命令行基础:目录浏览和文件管理
这一小节仅仅对一些命令进行简要的介绍,每一个命令都有很多的选项参数,更多参数说明请参考其各自的用户手册页面。在渗透测试中,通常漏洞利用成功会获得目标系统的 shell 访问权限,而不是一个用户图形界面。熟练的使用命令行是作为一个安全专业人员的基本能力。
一旦建立了 shell session ,运行 pwd (表示“打印当前目录”)命令可以显示当前所在的路径。可以运行 cd 目录名 命令来切换目录,当不指定目录名的时候默认进入到用户 home 目录。当运行 cd - 的时候将返回到之前的目录(上一次 cd 进入的目录)。上一级目录有一个固定的名称 “..” ,当前目录则是 “.” 。ls 命令可以列出指定位置的内容,如果不提供参数,则 ls 的操作对象就是当前目录。
root@kali:~#
root@kali:~# cd /
root@kali:/# cd
root@kali:~# pwd
/root
root@kali:~# cd .
root@kali:~# cd ..
root@kali:/# ls
0 binboot dev etchome lib lost+found media mnt optproc root run sbin scriptssrv sys tmp usr var
root@kali:/#
mkdir 目录 可以创建一个新目录,删除一个存在的目录用 rmdir 目录 命令。mv 命令可以移动并重命名目标文件或目录。删除文件用 rm 文件名 ,拷贝文件可以用 cp 源文件 目标文件 来完成。
root@kali:~# ls
Desktop Documents Downloads Music PicturesPublicTemplates Videos
root@kali:~# mkdir test
root@kali:~# ls
Desktop Documents Downloads Music PicturesPublicTemplates Videos test
root@kali:~# mv test test01
root@kali:~# ls
Desktop Documents Downloads Music PicturesPublicTemplates Videos test01
root@kali:~# rmdir test01
root@kali:~# ls
Desktop Documents Downloads Music PicturesPublicTemplates Videos
root@kali:~#
不指定命令绝对路径的时候,shell 会从 PATH 环境变量中读取第一个匹配的命令。大多数时候,这些命令程序都在 /bin ,/sbin ,/usr/bin ,或者 /usr/sbin 目录下。比如,ls 命令在 /bin/ls 。用 which 命令可以获得执行程序的位置。有些时候,命令是直接被 shell 处理的,这种情况称之为 shell 内建命令( cd 和 pwd 就是这类)。type 命令可以查询每个命令的类型。
root@kali:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@kali:~# which ls
/bin/ls
root@kali:~# type rm
rm is /bin/rm
root@kali:~# type cd
cd is a shell builtin
root@kali:~#
介绍一下echo 命令,它可以方便的将字符串打印在终端里。在这个例子里,echo 用来打印出环境变量的内容,shell 在执行命令前会自动将自身变量替换为环境变量。
环境变量
---------------------------------------
环境变量可以为 shell 及其他程序存储全局的设置。这些是文本性质的内容,但是可以继承的。比如,每个进程都有它自己的一系列环境变量(都是文本性质)。像登录 shell 就可以声明一些变量,这些变量会被之后由登录 shell 启动的程序继承。
我们可以在 /etc/profile 或 每个用户的 ~/.profile 文件中定义系统范围的变量,也可以通过 /etc/environment 定义不针对具体命令行翻译器(比如 shell )的变量,而且这种方式定义的变量更优。多亏了 Pluggable Authentication Module (PAM) ,这样定义的变量即使没有 shell 运行,也可以注入到所有用户的 session 里。
为了能够让大家边学习边实践,达到一起读书的目的,公众号将尽量保持一周两到三篇的速度更新,欢迎大家持续关注。
另外,部分图片来自网络,如有侵权请联系作者删除。
破阵子
醉里挑灯看剑
梦回吹角连营
八百里分麾下炙
五十弦翻塞外声
猎客
·
公元
公众号:NetHunterPark
关注移动安全及渗透测试
领取专属 10元无门槛券
私享最新 技术干货