操作和搜索文件系统切换目录列出目录内容搜索文件系统基于Android设备的Kali Linux渗透测试教程大学霸

操作和搜索文件系统切换目录列出目录内容搜索文件系统基于Android设备的Kali Linux渗透测试教程大学霸

2.2  操作和搜索文件系统

操作和搜索Linux文件系统是在Bash Shell中最基本的功能之一。作为一个开发者、系统管理员或渗透测试员,如果想要全方位的控制Bash控制台并使用工具,这是必不可少的工作。本节将介绍操作和搜索文件系统操作和搜索文件系统切换目录列出目录内容搜索文件系统基于Android设备的Kali Linux渗透测试教程大学霸。

对文件通常需要的操作就是切换目录、查看目录内容、搜索文件。下面列出在Linux下常用的一些工具,如表2-1所示。

表2-1  常用操作文件工具

命令名称 命令的全称 作用
cd Change Directory 用来改变当前所在的工作目录
ls List 列出当前工作目录的内容
pwd Print Working Directory 显示当前工作目录
find Find 用来查找或验证一个文件是否存在

2.2.1  切换目录

切换目录最常用的命令就是cd,它是使用起来最简单的命令。使用该命令可以切换到用户想要查看的位置。下面将介绍cd命令的语法格式及相关参数。

cd命令的语法格式如下所示:

cd [-L] [-P] [目录]

以上语法中,各选项参数含义如下所示:

q  -L:指定该选项后,当切换目录时,符号链接文件不会出现。

q  -P:该选项与-L选项的作用正好相反,显示物理路径。

q  -directory:指定想要改变的工作目录。

提示:符号链接(Symbolic Link)也叫软链接。软链接文件类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

【实例2-3】切换到根目录中。执行命令如下所示:

android@localhost:~$ cd /

执行以上命令后,将会改变当前的目录到根/目录中。

使用cd命令,还有其它例子。如下所示:

android@localhost:~$ cd ~

以上命令表示切换到当前用户的Home目录。

android@localhost:~$ cd ../

以上命令表示切换到当前目录的上一层目录。

android@localhost:~$ cd ../..

以上命令表示切换到当前目录的上两层目录。可以通过指定多个..,切换到前面的目录。

android@localhost:~$ cd .

以上命令表示表示使用当前目录。

android@localhost:~$ cd –

以上命令表示表示上一次执行cd命令之前所在的目录。

android@localhost:~$ cd —

以上命令表示切换到当前登录用户的Home目录。

如果需要查看是否进入了切换的目录,可以使用pwd命令查看。使用该命令可以查看当前的工作目录,它的语法格式如下所示:

pwd

【实例2-4】查看当前所处的目录。执行命令如下所示:

android@localhost:~$ pwd /

/

从输出的信息可以看到,当前所处在目录“/”中。

2.2.2  列出目录内容

当切换到一个目录中后,接下来需要查看该目录中的文件。此时,可以使用ls命令查看目录中的所有内容,包括子目录和文件的相关属性信息等。下面将介绍ls命令的使用。

ls命令的语法格式如下所示:

ls [选项] [文件/目录]

以上语法中常用选项如下所示:

q  -a,–all:显示所有子目录和文件的信息,包括名称以点号“.”开头的隐藏目录和隐藏文件。

q  -d,-directory:显示目录本身的属性,而不是显示目录中的内容。

q  -h:以更人性化的方式显示出目录或文件的大小,默认的大小单位为字节。使用-h选项后将显示为K、M等单位。此选项需要和-l选项结合使用才能体现出效果。

q  -i:显示每个文件的节点号。

q  -l:以长格式显示文件盒目录的列表,包括权限、大小、最好更新时间等详细信息。不使用-l选项时,ls命令默认以短格式显示目录名或文件名信息。

q  -R,–recursive:以递归的方式显示指定目录及其子目录中的所有内容。

q  -S:以文件大小排序后的形式显示所有文件。

q  -x:按字母顺序显示文件内容,如MP3文件后显示PDF文件。

q  –color:在字符模式中以颜色分区不同的文件。如果使用“–color=tty”表示使用终端预定义的颜色方案。默认的颜色分类分别是,深蓝色表示目录、白色表示一般文件、绿色表示可执行的文件、黄色表示设备文件、红色表示压缩文件。

【实例2-5】以长格式并且按文件大小排序后,查看所有文件内容。执行命令如下所示:

android@localhost:~$ ls -alSh

total 52K

drwxr-xr-x         8       android    android    4.0K         Jul 31 15:43     .

drwxr-xr-x         3      root        root        4.0K         Jul 30 12:50     ..

drwxr-xr-x         4      android    android    4.0K         Jul 30 13:06     .cache

drwxr-xr-x         6      android    android    4.0K         Jul 30 13:08      .config

drwx——                    3      android    android    4.0K         Jul 30 13:06     .dbus

drwxr-xr-x         2      android    android    4.0K         Jul 30 13:06     Desktop

drwxr-xr-x         2      android    android    4.0K         Jul 30 13:06     .fontconfig

drwxr-xr-x         2      android    android    4.0K         Jul 31 15:43     .vnc

-rw-r–r–            1      android    android    3.4K         Jan  1  2013          .bashrc

-rw-r–r–            1      android    android  741                    Jul 30 12:50     .profile

-rw-r–r–            1      android    android  220                    Jan  1  2013          .bash_logout

-rw——-            1      android    android  164                    Jul 31 15:43     .Xauthority

-rw——-            1      android    android  76             Jul 31 18:10     .bash_history

lrwxrwxrwx       1      root        root      15             Jul 30 12:50     .xinitrc -> ./.vnc/xstartup

以上输出的信息,显示了当前目录中所有的文件。从输出的信息中可以看到,是以文件大小由大到小显示的。在开头的两个文件是特殊文件。其中,“.”表示当前目录;“..”表示父目录。

2.2.3  搜索文件系统

从文件系统中搜索某个文件也是非常重要的。通常在一个文件系统中,包含也很多的文件。如果不确定某个文件的位置时,这时候就可以使用find命令来搜索。本节将介绍使用find命令搜索文件系统。

find命令是Linux系统中功能非常强大的文件和目录查找命令,可以根据目标的名称、类型、大小等不同属性进行查找。find命令在查找时将采用递归的方式、其使用形式相当灵活,也可以相当复杂。下面将介绍最常用的几种方法。find命令的语法格式如下所示:

find [-H] [-L] [-P] [-D debugopts] [-0level] [path…] [expression]

如果用户想查看find命令的更多信息,可以查看man手册页。执行命令如下所示:

man 1 find

在以上语法中,各选项含义如下所示:

q  -H:指定该选项,表示不查找符号链接文件。符号链接将被当作是标准文件,并且将不能判断它们的源文件。意思就是如果一个目录包括一个符号链接,则该符号链接文件将被视为其它文件。

q  -L:强制在目录中,处理符号链接文件。

q  -P:强制将符号链接文件视为标准文件。如果在查找过程中发现一个符号链接文件,将检查符号链接文件的权限,而不是它的源文件。

q  -D debugopts:允许find命令显示调试信息。

q  -olevel:控制find命令如何优化测试,并重新整理测试。level可以指定为0和3(包括0、3)之间的任何数字。

q  path…:该选项是用来指定查找文件范围。用户可以使用“.”和“..”快速的指定当前目录,和cd命令一样。

在以上语法中,-L、-P、-D选项一般都不常用。可以将这个语法总结为以下格式,如下所示:

find [查找范围] [查找条件表达式]

其中,查找范围对应的是在其中查找文件或子目录位置(可以有多个),而查找条件则决定了find命令根据哪些属性、特征来进行查找。较常用的几种查找条件类型如下所示:

q  按名称查找:关键字为“-name”,根据目标文件的部分名称查找,允许使用“*”及“?”通配符。

q  按文件大小查找:关键字为“-size”,根据目标文件的大小进行查找,一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件。常用的容量单位包括k(小写)、M、G。

q  按文件属主查找:关键字为“-user”,根据文件是否属于目标用户进行查找。

q  按文件类型查找:关键字为“-type”,根据文件的类型进行查找,这里的类型指的是普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等。块设备指的是成块读取数据的设备(如硬盘、内存等),而字符设备指的是按单个字符读取数据的设备(如键盘、鼠标等)。

expression表示一组选项,并且该选项是非常重要的。它是由三部分构成的,如下所示:

(1)Options:用来指定find应该查找的种类。

(2)Tests:识别正在查找文件的类型。

(3)Actions:表示找到文件后,如何处理该文件。

find命令的expression分解结构如下所示:

[expression] := [options][[test][OPERATOR][test][OPERATOR]…][actions]

[options] := [-d][-daystart][-depth][-follow][-help]…

[tests] := [-amin n][-atime file][-cmin n][-cnewer file]…

[OPERATOR] := [()][!][-not][-a][-and][-or]…

[actions] := [-delete][-exec command [;|{} +]][-execdir command]…

下面依次介绍以上的每部分内容,如下所示:

1.目录遍历选项

q  -maxdepth n:在n层目录中按递减方式查找。如果搜索有类似结构的目录时,该选项是非常有用的。例如,如果每个目录中都有一个正在搜索的目录(如lib),而且包含很多没用的文件。这时候,就可以使用该选项跳过这些目录。

q  -mindepth n:从第n层开始查找文件。

q  -daystart:强制使用与时间相关的选项来搜索文件,如-amin、-atime、-cmin、-ctime。默认是从当天开始搜索,而不是24小时前。

q  -mount:在查找文件时不跨越文件系统挂载点。

q  +n:该选项表示n天以前。

q  -n:该选项表示n天以内。

q  n:表示准确的时间,也就是参数的值为n。

2文件测试选项

q  -amin n:查找指定分钟数以前被访问过的所有文件。例如,-amin 20,表示必须正好是20天以前访问过的文件。-amin +35,表示最多是35天前访问过的所有文件。

q  -atime n:查找指定天数以前访问过的所有文件。

q  -mmin n:查找指定分钟数以前被修改过文件内容的所有文件。

q  -mtime n:查找指定天数以前被修改过文件内容的所有文件。

q  -executable|-readable|-writable:匹配任何有权限访问的文件。

q  -perm:查找符合指定的权限模式的文件和目录,权限模式可以使用数字方式表示。

q  -iname nAmE:忽略大小写。

q  -regex pattern:匹配指定的模式,作为有规律的表达式。

下面举几个使用-regex选项的例子。

【实例2-6】查找/etc/目录中,所有以p开头的所有文件。执行命令如下所示:

android@localhost:~$ find / -regex ‘^/etc/p[a-z]*$’

/etc/perl

/etc/passwd

/etc/python

/etc/protocols

/etc/profile

从输出的信息中,可以看到搜索到的文件都是/etc/目录中的,并且文件名是以p开头的。

【实例2-7】使用正则表达式搜索包含config名的所有文件,并且忽略大小写。执行命令如下所示:

android@localhost:~$ find / -regex ‘^[/a-z]*[cC]+[Oo]*[nN]+[fF]+[-iI]*[gG]+$’

/usr/share/lxpanel/profile/default/config

/usr/share/pkgconfig

/usr/share/doc/fontconfig

/usr/share/lintian/overrides/fontconfig

/usr/sbin/tzconfig

/usr/sbin/iconvconfig

/sbin/plipconfig

/sbin/shadowconfig

/sbin/ifconfig

/sbin/ldconfig

从输出的信息中,可以看到搜索到所有文件名包含config的文件。使用正则表达式,显示的都是文件的全路径。

考虑使用以下两个正则表达式的结果有啥不同。如下所示:

root@localhost:~# find / -regex ‘^[/a-z]*/$’                                                #仅匹配/目录

root@localhost:~# find / -regex ‘^[/a-z]*/*$’                                                        #匹配来自/目录中的所有文件

3.文件活动选项

q  -delete:搜索并删除指定的文件。

q  -exec:对匹配的文件执行该参数所给出的Shell命令。相应命令的形式为“command {} \;”。其中,{}表示将find指令查找到的文件作为指令的参数;指令的最后必须是固定字符“\;”;使用此选项时会提示用户是否执行指令

q  -execdir:该选项和-exec选项的使用方法相同。但是,该选项不能单独地使用在命令行。

q  -print:将匹配的文件输出到标准输出。

q  -ls:执行ls -dils列出当前文件,并且标准输出。-dils选项用来确定被显示目录条目数。

【实例2-8】从/etc/目录中搜索passwd文件,并执行stat命令。执行命令如下所示:

android@localhost:~$ find /etc/ -maxdepth 1 -name passwd -exec stat {} \;

File: `/etc/passwd’

Size: 2273        Blocks: 8          IO Block: 4096   regular file

Device: 705h/1797d                    Inode: 31785                Links: 1

Access:    (0644/-rw-r–r–)       Uid: (    0/    root)      Gid: (    0/    root)

Access:    2014-07-31 15:17:37.350000078 +0800

Modify:    2014-07-30 12:58:21.810000209 +0800

Change: 2014-07-30 12:58:21.810000209 +0800

Birth: –

以上命令实际上执行的是stat /etc/passwd命令。如下所示:

android@localhost:~$ stat /etc/passwd

File: `/etc/passwd’

Size:     2273                      Blocks: 8                    IO Block: 4096   regular file

Device:    705h/1797d               Inode: 31785                Links: 1

Access:    (0644/-rw-r–r–)       Uid: (    0/    root)      Gid: (    0/    root)

Access:    2014-07-31 15:17:37.350000078 +0800

Modify:    2014-07-30 12:58:21.810000209 +0800

Change: 2014-07-30 12:58:21.810000209 +0800

Birth: –

android@localhost:~$

从输出的信息中,可以看到以上两个命令的结果相同。在以上信息中,显示了passwd文件的大小、权限、修改时间等操作和搜索文件系统切换目录列出目录内容搜索文件系统基于Android设备的Kali Linux渗透测试教程大学霸。

Comments are closed.