一.学习的内容
今天主要学的是查找定位Linux文件的相关命令。如pwd、cd、ls、tree、find、locate、whereis、which命令。工作目录指的是用户当前在系统中所处的位置。
1、pwd
pwd命令用于显示当前工作目录,直接输入该命令执行即可。
2、cd
cd命令用于切换当前工作目录。命令格式为:cd [参数] [文件目录]
使用命令切换到“ /bin ”目录下,如图二所示:
“ cd - ”命令 ——返回上次工作目录,如下图所示从 /bin 到 /root。
“ cd ..”命令——回到上级目录,从 /root 到 / 。
“ cd ~”命令——回到当前用户的家目录,从 / 到 /root 。
“ cd ~username ”命令——切换到其他用户的家目录,从 /root 到 /home/linuxprobe。
3、ls
ls(list的缩写)命令用于显示目录中的文件信息。命令格式:ls [参数] [文件名称]
使用 ls 命令的 -a 参数可以看到全部文件(包括隐藏文件);使用 -l 参数可以看到文件的详细信息。将两个参数整合后,可以输出所有文件及其详细信息。如下图所示:
如果想要查看目录的属性信息,需要额外加一个参数 -d 。如下图所示,查看 /etc 目录的属性信息。
4、tree
tree命令会以树状图的形式列出目录内容及结构。命令格式:tree [文件名称]
虽然 ls 命令可以方便地查看目录内有哪些文件,但无法直观地获取目录内文件的层次结构。比如,假设目录A内有个B,B内又有个C,那么 ls 命令只能看到最外面的A目录。而 tree命令则能够以树状图的形式列出目录内所有文件的结构。
如上图所示,先将工作路径切换到 /home 内,然后一次执行 tree 命令和 ls命令,发现 ls 命令只会显示到 linuxprobe ,而 tree 命令把linuxprobe内部的文件也显示了出来。
5、find
find命令用于按照指定条件来查找文件所对应的位置。命令格式:find [查找范围] 寻找条件
在Linux系统中搜索工作一般都是通过find 命令来完成的。下表给出了find命令中的参数及作用。
参数 | 作用 |
-name | 匹配名称 |
-user | 匹配所有者 |
-perm | 匹配权限 |
-exec......{}\; | 后面可跟用于进一步处理搜索结果的命令 |
6、locate
locate命令用于按照名称快速搜索文件所对应的位置。命令格式:locate 文件名称
使用 find 命令进行全盘搜索虽然更准确,但是效率有点低。如果仅仅是想找一些常见的且又知道大概名称的文件,可以试试 locate 命令。在使用 locate 命令之前,先使用 updatedb 命令生成一个索引文件库,这个库文件的名字时 var/lib/mlocate/mlocate.db , 后续在使用 locate 命令时,就会在该库中进行查找,速度会快很多。如下图所示,使用 updatedb 命令生成索引库文件。
然后再使用 locate 命令,查找包含指定名称的文件所在的位置
7、whereis
whereis命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置。命令格式:whereis 命令名称
whereis命令也是基于updatedb命令所生成的索引库文件进行搜索,他与locate的区别在于不关心那些相同名称的文件,仅仅是快速找到对应的命令文件及其帮助文件所在的位置。下图时查找 ps 命令的位置,和帮助文件所在的位置。
8、which
which命令用于按照名称快速搜索二进制程序(命令)所对应的位置。
命令格式为:which 命令名称
which命令是在PATH变量所指定的路径中,按照指定条件搜索命令所在的位置。也就是说,若我们及不关心同名文件(find、locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那这个which命令就太合适了。下图是使用 which 命令查找 find 命令所在位置。
二.本次学习遇到的问题
三、问题的答案及解决办法
注意:
1、关于 cd 命令,先看图:
如上图所示,首先,通过 ls 命令可以显示出 /root 目录下包含的一些文件。此时,要想进入 /root/Music 的文件内,直接执行 cd Music 即可(不用执行 cd /root/Music ,当然这样也是可以的),即此时可省略前缀 /root/。除此之外的所有情况,都要写完整路径。
2、关于 ls 命令,先看图:
通过 cd 命令进入根目录(/)后,使用 ls 命令,可以发现:root、home、bin、lib、etc等都属于同级目录。不难看出,管理员的家目录在 /root ,而普通用户的家目录在 /home/linuxprobe,如下图所示:
关于下图:
可以看出,若不指定文件名称,ls 命令,或默认显示当前目录下的文件信息;也可以选择指定查看某个目录下的文件信息。
3、关于tree命令,如下图所示:
由上图,可以看出:1、和 ls 命令一样,若不指定目录,则以树状图的形式显示当前目录下的文件关系;也可以选择指定查看某个目录下的文件关系。2、若未指定目录,则输出的第一行用点(.)表示——上例中点(.)代表 /root ;若制定了目录,则输出第一行为指定的目录名。
4、关于find命令
find命令绝对是最全面的文件查找命令。如下图所示:
可以发现,第一次执行find命令时,为给其指定具体的目录,它会在当前目录( /root)下,查找文件名为Music的文件;第二次执行命令时,给其指定目录(/root)。对比两次结果发现,第一次的输出和第二次的输出,就是前半段的书写形式不一样(和tree一样),但其实是同一个文件。
5、关于locate命令,它就是阉割版的 “find [搜索范围] -name 文件名称” 命令。
这是因为它并不是精准匹配,只要文件名中包含它要搜索的文件名,他都会找出来。但同时,他也有自己的优势,那就是搜索速度快。如下图所示:
从上图可以看出,在搜索 hosts 文件名称时,他把所有包含这个单词的文件都给找出来了;此外,在搜索Music文件时,能明显感觉到速度比find命令更快。
6、关于whereis命令、which命令
它们两个和前面几个不同,他们是用来搜索 二进制程序(命令)所在的位置,不会用来搜索一般的文件地址。它们俩的不同在于搜索范围和输出结果上。whereis在updatedb生成的索引库内搜索,而which在PATH所指定的路径内搜索。在结果上,whereis的输出,除了命令的位置,还有帮组信息等;而which只有命令位置。关于path的路径,如下图所示:
应该就是绿线标注出的5个路径。
总之,cd 的补充是在讲如何省略工作路径前缀;ls、tree、find 的补充是在讲,执行这些命令时的默认工作路径是什么和输出结果的细微差异( ./ 和 /root );locate、whereis 的补充是在讲,它们的搜索范围是 updatedb 产生的库文件;which的补充是在讲,它的搜索范围是 PATH变量所指定的路径。最后,whereis和which命令,是用于查找二进制程序(命令)的位置,而非一般文件的位置。