文件查找之find用法

一、linux可以用于查找的相关命令(本次重点在于说明find用法)

1、find:

是最为强大的查找命令,可以查找到你所想要找的所有文件

2、locate

同样也是一个文件查找命令,locate命令其实是"find-name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。

3、whereis

whereis命令只能用于程序名称的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

1
2
[root@localhost ~]# whereis yum
yum: /usr/bin/yum /etc/yum /etc/yum.conf /usr/share/man/man8/yum.8.gz

4、which

which命令的作用是,在PATH环境变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以查看某个系统命令是否存在,以及执行的到底是哪一个位置的可执行文件(即命令)

1
2
[root@localhost ~]# which yum
/usr/bin/yum

5、type

type命令其实不能算查找命令,它是用来查找某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。

1
2
[root@localhost ~]# type yum
yum is /usr/bin/yum

从以上各命令的功能可以看出,虽然在linux中有诸多可以用于查找的命令,但能够基于文件(命令也是一个可执行文件之一)层次查找的只有find与locate,两者区别也比较明显。

find与loacte的区别

find:

优点:可实时查找,精确匹配

缺点:范围遍历,速度慢

locate:

优点:查找速度快

缺点:依赖于数据库、非实时查找


二、find 用法

格式:

find [options] [查找路径] [查找条件] [处理动作]

   查找路径:默认为当前目录

   查找条件:默认为查找指定路径下的所有文件

   处理动作:默认为显示

1、条件查找(支持文件名通配)

-name "File_name" 按名称查找
1
2
3
4
5
6
7
8
#查找/var/lib目录下,名字为rpm的目录或文件
[root@localhost lib]# pwd
/var/lib
[root@localhost lib]# find -name "rpm"
./rpm
[root@localhost lib]# ls -ld rpm/
drwxr-xr-x. 2 root root 4096 Feb 26 08:06 rpm/
[root@localhost lib]#
-name "*" 查找任意长度的任意字符
1
2
3
4
5
6
7
8
#查找/var/lib目录下以任意长度任意字符开头以数字结尾的文件或目录
[root@localhost lib]# find -name "*5"
./yum/history/2014-02-23/5
./rpm/Sigmd5
[root@localhost lib]# ls -l rpm/Sigmd5
-rw-r--r--. 1 root root 77824 Feb 24 22:08 rpm/Sigmd5
[root@localhost lib]# ls -ld yum/history/2014-02-23/5/
drwx------ 2 root root 4096 Feb 23 19:47 yum/history/2014-02-23/5/
-name "?" 包含任意单个定符
1
2
3
4
5
#查找/var/log下名字以s开头后面跟一个任意字符结尾的文件或目录
[root@localhost log]# find -name "s?"
./sa
[root@localhost log]# ls -ld sa
drwxr-xr-x. 2 root root 4096 Feb 26 00:00 sa
-name "[]" 范围内的任意字符
1
2
3
4
5
6
7
8
#查找/var/log/sa下名字以sa开头后跟两个数字的目录或文件
[root@localhost sa]# pwd
/var/log/sa
[root@localhost sa]# find -name "sa[0-9][0-9]"
./sa23
./sa25
./sa26
./sa24
-name "[^]" 范围外的任意字符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#查找当前目录下名字不是小写字母开头的文件或目录
[root@localhost rpm]# pwd
/var/lib/rpm
[root@localhost rpm]# find -name "[^[:lower:]]*"
.
./Filedigests
./Sha1header
./Provideversion
./Dirnames
./Packages
./Obsoletename
./Providename
./Conflictname
./Requirename
......
-iname "File_name" 查找时不区分字符大小写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost log]# pwd
/var/log
[root@localhost log]# find -iname "[a-z]*"
...
./anaconda.syslog
./prelink
./prelink/prelink.log
./dmesg.old
./lastlog
./anaconda.ifcfg.log
./cron
./dracut.log
./messages
./ConsoleKit
./ConsoleKit/history
./cups
....
-user UserName 根据属主查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost tmp]# pwd;ls -l
/tmp
total 92
-rwxr-xr-x  1 root      root      48568 Feb 25 12:31 cat
-rw-rw-r--  1 docker    docker        0 Feb 26 12:08 Device.c
-rw-rw-r--  1 docker    docker        0 Feb 26 12:08 device.h
-rw-rw-r--  1 docker    docker        0 Feb 26 12:08 device.txt
-rwx------. 1 root      root       1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root      root        346 Feb 23 19:26 ks-script-rxXCJd.log
-rw-r--r--  1 openstack openstack   720 Feb 26 09:23 mounts.txt
[root@localhost tmp]# find -user docker
./device.h
./Device.c
./device.txt
-group GroupName 根据属组查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost tmp]# ll
-rw-r--r--  1 openstack openstack   720 Feb 26 09:23 mounts.txt
drwxr-xr-x  2 root      root       4096 Feb 25 18:39 repo
-rw-r--r--  1 root      openstack   242 Feb 23 21:23 scprit.sh
drwxr-xr-x  2 root      root       4096 Feb 25 22:53 script
-rw-r--r--  1 root      root        106 Feb 24 11:46 tast.txt
drwxr-xr-x  2 root      root       4096 Feb 25 12:32 test
-rw-r--r--  1 root      openstack   145 Feb 24 16:49 test2.sh
-rw-r--r--  1 root      openstack   125 Feb 24 16:56 test3.sh
-rw-r--r--  1 root      openstack   721 Feb 24 17:04 test4.sh
-rw-------. 1 root      root          0 Feb 23 19:12 yum.log
[root@localhost tmp]# find -group openstack
./scprit.sh
./test4.sh
./test2.sh
./test3.sh
./mounts.txt
-uid UID 按照用户的UID查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost tmp]# ll
total 92
-rwxr-xr-x  1 root      root      48568 Feb 25 12:31 cat
-rw-rw-r--  1       502       502     0 Feb 26 12:08 Device.c
-rw-rw-r--  1       502       502     0 Feb 26 12:08 device.h
-rw-rw-r--  1       502       502     0 Feb 26 12:08 device.txt
-rwx------. 1 root      root       1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root      root        346 Feb 23 19:26 ks-script-rxXCJd.l
[root@localhost tmp]# find -uid 502
./device.h
./Device.c
./device.txt
#当有用户被删除了,那么他的文件属组,将变成他之前的UID或GIU,
#UID与GID就是在这种情况下用来定位的,以便后好的处理这些文件。
#当然存在的用户也可使用UID或GID来查找.
-gid GID 按照用户的的GID查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost tmp]# ls -l
-rw-r--r--  1  501  501   720 Feb 26 09:23 mounts.txt
drwxr-xr-x  2 root root  4096 Feb 25 18:39 repo
-rw-r--r--  1 root  501   242 Feb 23 21:23 scprit.sh
drwxr-xr-x  2 root root  4096 Feb 25 22:53 script
-rw-r--r--  1 root root   106 Feb 24 11:46 tast.txt
drwxr-xr-x  2 root root  4096 Feb 25 12:32 test
-rw-r--r--  1 root  501   145 Feb 24 16:49 test2.sh
-rw-r--r--  1 root  501   125 Feb 24 16:56 test3.sh
-rw-r--r--  1 root  501   721 Feb 24 17:04 test4.sh
[root@localhost tmp]# find -gid 501
./scprit.sh
./test4.sh
./test2.sh
./test3.sh
./mounts.txt
-nouser 查无有效属主的文件,即文件的属主在/etc/passwd中不存在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@localhost include]# pwd
/root/Download/httpd-2.2.26/include
[root@localhost include]# ll
total 404
-rw-r--r-- 1  501 games  1075 Jul 12  2006 ap_compat.h
-rw-r--r-- 1 root root   7371 Feb 24 20:29 ap_config_auto.h
-rw-r--r-- 1  501 games  6850 Nov 14 00:51 ap_config_auto.h.in
-rw-r--r-- 1  501 games  9472 Apr 15  2011 ap_config.h
-rw-r--r-- 1 root root   2704 Feb 24 21:58 ap_config_layout.h
-rw-r--r-- 1  501 games  2784 Jul 12  2006 ap_config_layout.h.in
-rw-r--r-- 1  501 games  4167 May 10  2007 ap_listen.h
-rw-r--r-- 1  501 games  9803 Jun 28  2013 ap_mmn.h
[root@localhost include]# find . -nouser
.
./http_request.h
./util_xml.h
./util_ldap.h
./ap_mmn.h
./ap_release.h
./.indent.pro
./ap_config.h
./util_script.h
./httpd.h
./ap_listen.h
./ap_mpm.h
-nogroup 查无有效属组的文件,即文件的属组在/etc/group中不存在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# ll
total 92
-rwxr-xr-x  1 root root 48568 Feb 25 12:31 cat
-rw-rw-r--  1  502  502     0 Feb 26 12:08 Device.c
-rw-rw-r--  1  502  502     0 Feb 26 12:08 device.h
-rw-rw-r--  1  502  502     0 Feb 26 12:08 device.txt
-rwx------. 1 root root  1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root root   346 Feb 23 19:26 ks-script-rxXCJd.log
-rw-r--r--  1  501  501   720 Feb 26 09:23 mounts.txt
[root@localhost tmp]# find -nogroup
./device.h
./Device.c
./device.txt
./scprit.sh
./test4.sh
./test2.sh
./test3.sh
./mounts.txt

2、组合条件

-a 与,同时满足(and)
1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# find -user root -nogroup
./scprit.sh
./test4.sh
./test2.sh
./test3.sh
[root@localhost tmp]# find -user root -a -nogroup
./scprit.sh
./test4.sh
./test2.sh
./test3.sh
-o 或(or)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# ll
total 92
-rwxr-xr-x  1 root root 48568 Feb 25 12:31 cat
-rw-rw-r--  1  502  502     0 Feb 26 12:08 Device.c
-rw-rw-r--  1  502  502     0 Feb 26 12:08 device.h
-rw-rw-r--  1  502  502     0 Feb 26 12:08 device.txt
drwxr-xr-x  2 root root  4096 Feb 25 22:53 script
-rw-r--r--  1 root root   106 Feb 24 11:46 tast.txt
drwxr-xr-x  2 root root  4096 Feb 25 12:32 test
-rw-r--r--  1 root  501   145 Feb 24 16:49 test2.sh
-rw-r--r--  1 root  501   125 Feb 24 16:56 test3.sh
-rw-r--r--  1 root  501   721 Feb 24 17:04 test4.sh
[root@localhost tmp]# find -nouser -o -nogroup
./device.h
./Device.c
./device.txt
./scprit.sh
./test4.sh
./test2.sh
./test3.sh
./mounts.txt
-not, ! 非,取反
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# ll
total 92
-rwxr-xr-x  1 root root 48568 Feb 25 12:31 cat
-rw-rw-r--  1  502  502     0 Feb 26 12:08 Device.c
-rw-rw-r--  1  502  502     0 Feb 26 12:08 device.h
-rw-rw-r--  1  502  502     0 Feb 26 12:08 device.txt
-rwx------. 1 root root  1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root root   346 Feb 23 19:26 ks-script-rxXCJd.log
-rw-r--r--  1  501  501   720 Feb 26 09:23 mounts.txt
drwxr-xr-x  2 root root  4096 Feb 25 18:39 repo
-rw-r--r--  1 root  501   242 Feb 23 21:23 scprit.sh
drwxr-xr-x  2 root root  4096 Feb 25 22:53 script
[root@localhost tmp]# find ! -user root
./device.h
./Device.c
./device.txt
./mounts.txt
[root@localhost tmp]# find -not -user root
./device.h
./Device.c
./device.txt
./mounts.txt

3、文件类型查找(type)

-type f 普通文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#查找文件类型为普通文件属主不是root用户或没有属组的文件
[root@localhost tmp]# ll
total 92
-rwxr-xr-x  1 root root 48568 Feb 25 12:31 cat
-rw-rw-r--  1  502  502     0 Feb 26 12:08 Device.c
-rw-rw-r--  1  502  502     0 Feb 26 12:08 device.h
-rw-rw-r--  1  502  502     0 Feb 26 12:08 device.txt
-rw-r--r--  1  501  501   720 Feb 26 09:23 mounts.txt
drwxr-xr-x  2 root root  4096 Feb 25 18:39 repo
-rw-r--r--  1 root  501   242 Feb 23 21:23 scprit.sh
drwxr-xr-x  2 root root  4096 Feb 25 12:32 test
-rw-r--r--  1 root  501   145 Feb 24 16:49 test2.sh
-rw-r--r--  1 root  501   125 Feb 24 16:56 test3.sh
-rw-r--r--  1 root  501   721 Feb 24 17:04 test4.sh
-rw-------. 1 root root     0 Feb 23 19:12 yum.log
[root@localhost tmp]# find -type f -not -user root -o -nogroup
./device.h
./Device.c
./device.txt
./scprit.sh
./test4.sh
./test2.sh
./test3.sh
./mounts.txt
-type f 目录
-type b 块设备
-type c
字符设备
-type l 符号链接文件
-type p 命名管道
-type s 套接

其它文件类型查找方法与f用法相同。

4、文件大小查找(-size [+|-]#),Unit(c:字节,k:KB,M:MB,G:GB

-size # 指定大小(取值是不大于)
-size +# 大于#
1
2
3
4
5
6
7
#查找/etc/下类型为普通文件且大于2M
[root@localhost tmp]# find  /etc/  -type f -size +2M
/etc/selinux/targeted/modules/active/policy.kern
/etc/selinux/targeted/policy/policy.24
[root@localhost tmp]# ls -lh /etc/selinux/targeted/modules/active/policy.kern /etc/selinux/targeted/policy/policy.24
-rw-r--r--. 1 root root 7.0M Feb 23 19:19 /etc/selinux/targeted/modules/active/policy.kern
-rw-r--r--. 1 root root 7.0M Feb 23 19:19 /etc/selinux/targeted/policy/policy.24

-size: -# 小于#

5、时间戳查找

以天为单位(time):

-atime [+|-]#

-mtime [+|-]# 修改时间
-ctime [+|-]# 改变时间
-atime [+|-]# 访问时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#查找在系统中2天内访问的文件
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# find -atime -2
.
./device.h
./Device.c
./device.txt
./script
./script/b.sh
./script/yum_install.sh
./script/show_uid.sh
./test4.sh
./.ICE-unix
./test2.sh
./test3.sh
./mounts.txt
./cat
./test
./repo
./repo/CentOS-Base.repo

以分钟为单位(min)[+|-]#:    

-amin [+|-]# 访问时间
-mmin [+|-]# 修改时间
1
2
3
4
5
6
#查找在/tmp/script/5分钟之内修改过的文件
[root@localhost script]# find /tmp/script/ -mmin -5 |ls -l
total 12
-rw-r--r-- 1 root root 630 Feb 26 16:37 b.sh
-rw-r--r-- 1 root root 232 Feb 26 16:36 show_uid.sh
-rw-r--r-- 1 root root 795 Feb 26 16:36 yum_install.sh
-cmin [+|-]# 改变时间

6、权限查找

   -perm [+|-]MODE

-perm MODE 精确匹配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#查找类型为普通文件,权限为755的文件
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# ls -l [ktc]*
-rwxr-xr-x  1 root root 48568 Feb 25 12:31 cat
-rwx------. 1 root root  1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root root   346 Feb 23 19:26 ks-script-rxXCJd.log
-rw-r--r--  1 root root   106 Feb 24 11:46 tast.txt
-rw-r--r--  1 root  501   145 Feb 24 16:49 test2.sh
-rw-r--r--  1 root  501   125 Feb 24 16:56 test3.sh
-rw-r--r--  1 root  501   721 Feb 24 17:04 test4.sh
[root@localhost tmp]#  find . -type f  -perm  755
./ks-script-rxXCJd.log
./cat
-perm +MODE 任何一类用户的任何一位权限匹配;常用于查找某类用户的某特定权限是否存在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost etc]# find /etc/sysconfig/ -type f -perm +744 |ls -l
total 1912
drwxr-xr-x.  3 root root   4096 Feb 23 19:15 abrt
drwxr-xr-x.  4 root root   4096 Feb 23 19:21 acpi
-rw-r--r--.  1 root root     46 Feb 26 12:16 adjtime
-rw-r--r--.  1 root root   1512 Jan 12  2010 aliases
-rw-r--r--   1 root root  12288 Feb 23 19:27 aliases.db
drwxr-xr-x.  2 root root   4096 Feb 23 19:19 alsa
drwxr-xr-x.  2 root root   4096 Feb 24 22:08 alternatives
-rw-------.  1 root root    541 Nov 23 20:43 anacrontab
-rw-r--r--.  1 root root    148 May 15  2009 asound.conf
-rw-r--r--.  1 root root      1 Jan 30  2012 at.deny
-rw-r--r--   1 root root      0 Feb 26 14:01 A.txt
.....


-MODE 每类用户的指定要检查的权限位都匹配
1
2
3
4
5
6
7
8
#在/etc/查找类型为普通文件,每一类用户权限上都要匹配
[root@localhost tmp]# find /etc/ppp/  -type f  -perm -154 -ls
393983    4 -rwxr-xr-x   1 root     root         3196 Oct 10 22:48 /etc/ppp/ipv6-up
393978    4 -rwxr-xr-x   1 root     root          386 Oct 10 22:48 /etc/ppp/ip-down
393982    4 -rwxr-xr-x   1 root     root         1687 Oct 10 22:48 /etc/ppp/ipv6-down
393981    8 -rwxr-xr-x   1 root     root         6517 Oct 10 22:48 /etc/ppp/ip-up.ipv6to4
393980    4 -rwxr-xr-x   1 root     root          430 Oct 10 22:48 /etc/ppp/ip-up
393979    4 -rwxr-xr-x   1 root     root         3262 Oct 10 22:48 /etc/ppp/ip-down.ipv6to4

7、处理动作:

-print 打印在标准输出上(默认);
-ls 以长格式输出各文件信息
-exec COMMAND {} \; 对查找到的文件执行指定的命令
1
2
3
4
5
6
7
8
9
10
11
12
#查询当天修改过的文件
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]#  find . -mtime -1 -type f -exec ls -l {} \;
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 ./device.h
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 ./Device.c
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 ./device.txt
-rw-r--r-- 1 root root 629 Feb 25 18:32 ./script/b.sh
-rw-r--r-- 1 root root 794 Feb 25 22:53 ./script/yum_install.sh
-rw-r--r-- 1 root root 231 Feb 25 17:32 ./script/show_uid.sh
-rw-r--r-- 1 501 501 720 Feb 26 09:23 ./mounts.txt
-rw-r--r-- 1 root root 1926 Feb 25 18:37 ./repo/CentOS-Base.repo
-ok COMMAND {} \; 交互式的-exec
1
2
3
4
5
6
7
8
9
10
11
12
13
#查找类型为普通文件,修改时间不大于两天的文件是否显示
[root@localhost tmp]# find ./ -mtime -1 -type f -ok ls -l {} \;
ls ... ./device.h > ? Y
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 ./device.h
ls ... ./Device.c > ? Y
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 ./Device.c
ls ... ./device.txt > ? Y
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 ./device.txt
ls ... ./script/b.sh > ? Y
-rw-r--r-- 1 root root 629 Feb 25 18:32 ./script/b.sh
ls ... ./script/yum_install.sh > ? Y
-rw-r--r-- 1 root root 794 Feb 25 22:53 ./script/yum_install.sh
ls ... ./script/show_uid.sh > ? Y

find把查找到的所有文件一次性地传递给-exec所指定的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost tmp]# ls -l *.doc
-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.doc
-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.doc
[root@localhost tmp]# find /tmp -iname "*.doc " | rm -rf
[root@localhost tmp]# ls -l *.doc
-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.doc
-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.doc
[root@localhost tmp]# find /tmp -iname "*.doc" -exec mv {} {}x \;
[root@localhost tmp]# ls -l *.docx
-rw-r--r-- 1 root root 0 Feb 26 16:47 asdfadf.docx
-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.docx
-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.docx
-rw-r--r-- 1 root root 0 Feb 26 16:47 xxx.docx

注:find:把查找到的所有文件一次性地传递给-exec所指定的文件

管道传递的是字符串,不能使用文件操作指令处理,

如果要用可以使用以下命令

1
2
3
4
5
6
7
8
9
[root@localhost tmp]# touch asdf.c
[root@localhost tmp]# touch asdf.h
[root@localhost tmp]# touch asdf.so
[root@localhost tmp]# touch asdf.ppt
[root@localhost tmp]# touch asdf.doc
[root@localhost tmp]# touch study.dox
[root@localhost tmp]# find  -mmin 1 | xargs rm -rf
[root@localhost tmp]# ls
#此处的-mmin 1表示修改时间到从1分钟不到2分钟之间的文件删除,慎用,我刚才#就是+1,结果一分钟之前的所有文件就这么没了~~~~悲剧了!

find |xargs COMMAND(查找大文件很有用)


====================================完===================================================










本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1363882,如需转载请自行联系原作者
上一篇:Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记


下一篇:Android 分享两个你学习android 平台开发必须碰到的几个知识点的组件【天气预报、日期】View 组件