五、命令与文件的查询
我们常常需要知道那个文件放在哪里,才能够对该文件进行一些修改或维护等动作。有些时候某些软件配置文件的文件名是不变的,但是各分发版本放置的目录则不同。此时我们就需要利用一些搜索命令将该配置文件的完整文件名找到,这样才能进行修改。
1.脚本文件的文件名查询
我们知道在终端模式当中,连续输入两次[tab]按键就能够知道用户有多少命令可以下达。但是我们不知道这些命令的完整文件名放在哪里。这个时候,我们就可以通过which或type来寻找。
(1)which(寻找“执行文件”)
如图5.1所示的举例。
图5.1 which举例
注意,这个命令是根据“PATH”这个环境变领所规范的路径去搜索“执行文件”的文件名。
(2)type
type将在后续来讲,在此就不说了。
2.文件名的查找
通常来说,find命令不常用,因为速度很慢。一般常用的是whereis和locate,前者是只找系统中某些目录底下的文件,而后者是利用数据库来搜索文件名。
(1)whereis
如图5.2所示,第一个例子是找出ifconfig这个文件名,第二个例子是找出跟passwd的文件名,第三个例子是在man page中找到passwd的文件名。
图5.2 whereis演示
whereis只是查询/bin/sbin、/usr/share/man下的man page文件等几个比较特定的目录。具体想知道whereis查了多少目录,可以使用whereis -l来确认。
(2)locate/updatedb
我们要记住无论是whereis还是locate都是有局限性的。whereis只能在所能够检索的目录下检索文件,所以目录之外的文件搜索不到;而locate只能在建立的数据库中查找(数据库在/var/lib/mlocate),而这个数据库并不是实时更新,是定期更新,所以有可能刚建立的文件并不能搜索到。
解决locate的方法就是使用updatedb命令来手动更新数据库。使用方法非常简单,直接输入“updatedb”,然后回车即可。然后updatedb就会去读取/etc/updated.conf这个配置文件的设置,去搜索文件名,然后更新数据库。
如图5.3所示,是locate的演示。
图5.3 locate演示
(3)find
find的特殊功能就是能够进行额外的动作。我们将下面的例子以图解来说明。
find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
图5.4 解释说明
该例子中特殊的地方有{}以及\;还有-exec这个关键词,这些东西的意义为:
①{}代表的是由find找到的内容,如上图所示,find的结果会被放置到{}位置中;
②-exec一直到\;是关键词,代表find额外动作的开始(-exec)到结束(\;),在这中间的就是find指令内的额外动作。在本例中就是ls-l{}。
③因为;在bash环境下是有特殊意义的,因此利用反斜杠来转义。
六、权限与命令间的关系(非常重要)
1.让用户能进入某目录成为“可工作目录”的基本权限为:
(1)可使用的命令:例如cd等变换工作目录的命令;
(2)目录所需权限:用户对这个目录至少需要具有x的权限;
(3)额外需求:如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需要r的权限。
2.用户在某个目录内读取一个文件的基本权限是:
(1)可使用的命令:例如本章谈到的 cat, more, less等等
(2)目录所需权限:用户对这个目录至少需要具有x权限;
(3)文件所需权限:用户对文件至少需要具有r的权限才行。
3.让用户可以修改一个文件的基本权限为何?
(1)可使用的命令:例如nano或未来要介绍的vi编辑器等;
(2)目录所需权限:用户在该文件所在的目录至少要有 x 权限;
(3)文件所需权限:用户对该文件至少要有r,w权限。
4.让一个用户可以建立一个文件的基本权限为何?
目录所需权限:用户在该目录要具有w,x的权限,重点在w。
5.让用户进入某目录并执行该目录下的某个命令之基本权限为何?
(1)目录所需权限:用户在该目录至少要有x的权限;
(2)文件所需权限:用户在该文件至少需要有x的权限。
领取专属 10元无门槛券
私享最新 技术干货