前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3.查找定位文件命令

3.查找定位文件命令

原创
作者头像
用户8006012
修改2022-05-07 16:45:21
6950
修改2022-05-07 16:45:21
举报
文章被收录于专栏:DATABASEDATABASE

1.pwd命令

pwd命令用于显示用户当前所处的工作目录,英文全称为“print working directory”,输入该命令后按回车键执行即可。

使用pwd命令查看当前所处的工作目录:

代码语言:javascript
复制
[root@linuxprobe etc]# pwd
/etc

2.cd命令

cd命令用于切换当前的工作路径,英文全称为“change directory”,语法格式为“cd [参数] [目录]”。

这个命令应该是最常用的一个Linux命令了。可以通过cd命令迅速、灵活地切换到不同的工作目录。除了常见的切换目录方式,还可以使用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd~”命令切换到当前用户的家目录,抑或使用“cd~username”命令切换到其他用户的家目录(就像在游戏中使用了“回城”技能一样)。例如,使用下述的cd命令切换进/etc目录中:

代码语言:javascript
复制
[root@linuxprobe ~]# cd /etc

同样的道理,可使用下述命令切换到/bin目录中:

代码语言:javascript
复制
[root@linuxprobe etc]# cd /bin

此时,要返回到上一次的目录(即/etc目录),可执行如下命令:

代码语言:javascript
复制
[root@linuxprobe bin]# cd -
/etc
[root@linuxprobe etc]#

还可以通过下面的命令快速切换到用户的家目录:

代码语言:javascript
复制
[root@linuxprobe etc]# cd ~
[root@linuxprobe ~]#

Tips

随着切换目录的操作,命令提示符也在发生变化,例如[root@linuxprobe etc]#就是在告诉我们当前处于/etc中。

3.ls命令

ls命令用于显示目录中的文件信息,英文全称为“list”,语法格式为“ls [参数] [文件名称]”。

所处的工作目录不同,当前工作目录下能看到的文件肯定也不同。使用ls命令的-a参数可以看到全部文件(包括隐藏文件),使用-l参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行ls命令即可查看当前目录中的所有文件并输出这些文件的属性信息:

代码语言:javascript
复制
[root@linuxprobe ~]# ls -al
total 48
dr-xr-x---. 15 root root 4096 Jul 24 06:33 .
dr-xr-xr-x. 17 root root  224 Jul 21 05:04 ..
-rw-------.  1 root root 1407 Jul 21 05:09 anaconda-ks.cfg
-rw-------.  1 root root  335 Jul 24 06:33 .bash_history
-rw-r--r--.  1 root root   18 Aug 13  2018 .bash_logout
-rw-r--r--.  1 root root  176 Aug 13  2018 .bash_profile
-rw-r--r--.  1 root root  176 Aug 13  2018 .bashrc
drwx------. 10 root root  230 Jul 21 05:19 .cache
drwx------. 11 root root  215 Jul 24 06:27 .config
-rw-r--r--.  1 root root  100 Aug 13  2018 .cshrc
drwx------.  3 root root   25 Jul 21 05:16 .dbus
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Desktop
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Documents
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Downloads
-rw-------.  1 root root   16 Jul 21 05:19 .esd_auth
-rw-------.  1 root root  620 Jul 24 06:26 .ICEauthority
-rw-r--r--.  1 root root 1562 Jul 21 05:18 initial-setup-ks.cfg
drwx------.  3 root root   19 Jul 21 05:19 .local
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Music
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Pictures
drwxr-----.  3 root root   19 Jul 21 05:19 .pki
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Public
-rw-r--r--.  1 root root  129 Aug 13  2018 .tcshrc
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Templates
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Videos
-rw-------.  1 root root 3235 Jul 24 06:32 .viminfo

如果想要查看目录属性信息,则需要额外添加一个-d参数。例如,可使用如下命令查看/etc目录的权限与属性信息:

代码语言:javascript
复制
[root@linuxprobe ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc

4.tree命令

tree命令用于以树状图的形式列出目录内容及结构,输入该命令后按回车键执行即可。

虽然ls命令可以很便捷地查看目录内有哪些文件,但无法直观地获取到目录内文件的层次结构。比如,假如目录A中有个B,B中又有个C,那么ls命令就只能看到最外面的A目录,显然有些时候这不太够用。tree命令则能够以树状图的形式列出目录内所有文件的结构。

我们来对比一下两者的区别。

使用ls命令查看目录内的文件:

代码语言:javascript
复制
[root@linuxprobe ~]# ls
A                Desktop    Downloads             Music     Public     Videos
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates

使用tree命令查看目录内文件名称以及结构:

代码语言:javascript
复制
[root@linuxprobe ~]# tree
.
├── A
│   └── B
│       └── C
├── anaconda-ks.cfg
├── Desktop
├── Documents
├── Downloads
├── initial-setup-ks.cfg
├── Music
├── Pictures
├── Public
├── Templates
└── Videos

5.find命令

find命令用于按照指定条件来查找文件所对应的位置,语法格式为“find [查找范围] 寻找条件”。

本书中会多次提到“Linux系统中的一切都是文件”,接下来就要见证这句话的分量了。在Linux系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。find命令的参数以及作用如表2-13所示。

表2-13                                             find命令中的参数以及作用

参数

作用

-name

匹配名称

-perm

匹配权限(mode为完全匹配,-mode为包含即可)

-user

匹配所有者

-group

匹配所有组

-mtime -n +n

匹配修改内容的时间(-n指n天以内,+n指n天以前)

-atime -n +n

匹配访问文件的时间(-n指n天以内,+n指n天以前)

-ctime -n +n

匹配修改文件权限的时间(-n指n天以内,+n指n天以前)

-nouser

匹配无所有者的文件

-nogroup

匹配无所有组的文件

-newer f1 !f2

匹配比文件f1新但比f2旧的文件

-type b/d/c/p/l/f

匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)

-size

匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)

-prune

忽略某个目录

-exec …… {}\;

后面可跟用于进一步处理搜索结果的命令(下文会有演示)

这里需要重点讲解-exec参数的重要作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理。它十分类似于第3章将要讲解的管道符技术,并且由于find命令对参数有特殊要求,因此虽然exec是长格式形式,但它的前面依然只需要一个减号(-)。

根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux系统中的配置文件会保存到/etc目录中(详见第6章)。如果要想获取该目录中所有以host开头的文件列表,可以执行如下命令:

代码语言:javascript
复制
[root@linuxprobe ~]# find /etc -name "host*" -print
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/avahi/hosts
/etc/hostname

如果要在整个系统中搜索权限中包括SUID权限的所有文件(详见第5章),只需使用-4000即可:

代码语言:javascript
复制
[root@linuxprobe ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/umount
/usr/bin/mount
/usr/bin/su
/usr/bin/pkexec
/usr/bin/crontab
/usr/bin/passwd
………………省略部分输出信息………………

进阶实验: 在整个文件系统中找出所有归属于linuxprobe用户的文件并复制到/root/findresults目录中。 该实验的重点是“-exec {} \;”参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“\;”。完成该实验的具体命令如下: [root@linuxprobe ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;

6.locate命令

locate命令用于按照名称快速搜索文件所对应的位置,语法格式为“locate文件名称”。

使用find命令进行全盘搜索虽然更准确,但是效率有点低。如果仅仅是想找一些常见的且又知道大概名称的文件,不如试试locate命令。在使用locate命令时,先使用updatedb命令生成一个索引库文件,这个库文件的名字是/var/lib/mlocate/mlocate.db,后续在使用locate命令搜索文件时就是在该库中进行查找操作,速度会快很多。

第一次使用locate命令之前,记得先执行updatedb命令来生成索引数据库,然后再进行查找:

代码语言:javascript
复制
[root@linuxprobe ~]# updatedb 
[root@linuxprobe ~]# ls -l /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 2945917 Sep 13 17:54 /var/lib/mlocate/mlocate.db

使用locate命令搜索出所有包含“whereis”名称的文件所在的位置:

代码语言:javascript
复制
[root@linuxprobe ~]# locate whereis
/usr/bin/whereis
/usr/share/bash-completion/completions/whereis
/usr/share/man/man1/whereis.1.gz

7.whereis命令

whereis命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置,语法格式为“whereis命令名称”。

简单来说,whereis命令也是基于updatedb命令所生成的索引库文件进行搜索,它与locate命令的区别是不关心那些相同名称的文件,仅仅是快速找到对应的命令文件及其帮助文件所在的位置。

下面使用whereis命令分别查找出ls和pwd命令所在的位置:

代码语言:javascript
复制
[root@linuxprobe ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@linuxprobe ~]# whereis pwd
pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz

8.which命令

which命令用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为“which命令名称”。

which命令是在PATH变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是说,如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。下面查找一下locate和whereis命令所对应的路径:

代码语言:javascript
复制
[root@linuxprobe ~]# which locate
/usr/bin/locate
[root@linuxprobe ~]# which whereis
/usr/bin/whereis

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Tips
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档