前言
接上文,本文接着来学习Linux的命令。
1. cp命令
cp是单词copy的缩写,该命令用于复制文件或者目录,命令格式:cp 源文件 目标地址
,可将单个或多个文件复制到目标目录。我们以一些例子来了解一下它的使用:
- 不加任何参数,直接使用cp命令进行复制:
[mrzhang@192 Documents]$ mkdir testcp1
[mrzhang@192 Documents]$ mkdir testcp2
[mrzhang@192 Documents]$ cd testcp1
[mrzhang@192 testcp1]$ cat > test.log << EOF
> in order to test cp
> EOF
[mrzhang@192 testcp1]$ ll
total 4
-rw-rw-r--. 1 mrzhang mrzhang 20 Jun 11 22:51 test.log
[mrzhang@192 testcp1]$ cp test.log ../testcp2/
[mrzhang@192 testcp1]$ cd ../testcp2/
[mrzhang@192 testcp2]$ ll
total 4
-rw-rw-r--. 1 mrzhang mrzhang 20 Jun 11 22:52 test.log
如果我们要复制多个文件,只需要使用空格将每个文件分开即可,并且我们直接复制的时候,两个文件的时间是不一样的,我们可以通过使用-a
参数,来设置复制后的文件的时间一致。
[mrzhang@192 testcp1]$ cp -a test.log ../testcp2/
如果复制的时候目标目录中已经有该文件,我们可以使用-i
参数来提示我们是否进行覆盖:
[mrzhang@192 testcp1]$ cp -i test.log ../testcp2
cp: overwrite ‘../testcp2/test.log’? y
[mrzhang@192 testcp1]$
当然这是在目标目录下已经存在该文件时会有提示信息,如果不存在该文件,则不会提示。
- 复制文件夹,我们使用
-r
或者-R
参数来实现,该参数表示递归操作。而复制文件夹又分为两种情况:目标文件夹不存在时候的复制和目标文件夹存在的情况下的复制。对于目录不存在的情况,就很简单了,直接复制:
- 复制文件夹,我们使用
[mrzhang@192 Documents]$ cd testcp
[mrzhang@192 testcp]$ ll
total 0
[mrzhang@192 testcp]$ mkdir testcp1
[mrzhang@192 testcp]$ cd testcp1/
[mrzhang@192 testcp1]$ cat > read.log <<EOF
> test
> EOF
[mrzhang@192 testcp1]$ cd ..
[mrzhang@192 testcp]$ cp -a testcp1 testcp2
[mrzhang@192 testcp]$ ll
total 0
drwxrwxr-x. 2 mrzhang mrzhang 22 Jun 11 23:05 testcp1
drwxrwxr-x. 2 mrzhang mrzhang 22 Jun 11 23:05 testcp2
而对于目录已经存在的情况下,源目录将会被复制到目标目录的下一层:
[mrzhang@192 testcp]$ ll
total 0
drwxrwxr-x. 2 mrzhang mrzhang 39 Jun 11 23:06 testcp1
drwxrwxr-x. 3 mrzhang mrzhang 37 Jun 11 23:10 testcp2
[mrzhang@192 testcp]$ mkdir testcp3
[mrzhang@192 testcp]$ ll testcp3
total 0
[mrzhang@192 testcp]$ cp -r testcp1 testcp3
[mrzhang@192 testcp]$ ll testcp3/
total 0
drwxrwxr-x. 2 mrzhang mrzhang 39 Jun 11 23:15 testcp1
[mrzhang@192 testcp]$
- 创建文件的一个链接,来链接到具体的文件,也就是快捷方式,可以使用
-l
来实现:
- 创建文件的一个链接,来链接到具体的文件,也就是快捷方式,可以使用
[mrzhang@192 testcp]$ ll
total 0
drwxrwxr-x. 2 mrzhang mrzhang 39 Jun 11 23:06 testcp1
drwxrwxr-x. 2 mrzhang mrzhang 22 Jun 11 23:21 testcp2
[mrzhang@192 testcp]$ ll testcp2/
total 4
-rw-rw-r--. 1 mrzhang mrzhang 5 Jun 11 23:05 read.log
[mrzhang@192 testcp]$ cp -l testcp1/write.log testcp2/
[mrzhang@192 testcp]$ ll testcp2/
total 8
-rw-rw-r--. 1 mrzhang mrzhang 5 Jun 11 23:05 read.log
-rw-rw-r--. 2 mrzhang mrzhang 9 Jun 11 23:06 write.log
- 另一种链接被称为软链接或者符号链接,我们通过
-s
来实现:
- 另一种链接被称为软链接或者符号链接,我们通过
[mrzhang@192 testcp]$ cp -s testcp1/write.log testcp2
cp: ‘testcp2/write.log’: can make relative symbolic links only in current directory
[mrzhang@192 testcp]$ cd testcp2/
[mrzhang@192 testcp2]$ cp -s ../testcp1/write.log write.log
[mrzhang@192 testcp2]$ ll
total 4
-rw-rw-r--. 1 mrzhang mrzhang 5 Jun 11 23:05 read.log
lrwxrwxrwx. 1 mrzhang mrzhang 20 Jun 11 23:27 write.log -> ../testcp1/write.log
可以看到,最终软链的地址指向了实际的地址,这里要注意下,软链的创建只能在当前目录下进行。
由于cp命令的参数特别多,如果大家感兴趣,可以参考以下链接了解更多:
Linux cp 命令的15个示例 - 创建文件和目录的副本
2. mv命令
mv是单词move的缩写,该命令可以用来移动文件或更改文件名及目录名称,命令格式是:mv 源文件 目标文件
。如果mv命令中第二个参数类型是文件时,mv命令用于文件重命名;如果第二个参数是已存在的目录名称,那么mv命令将源文件移至目标目录中。
-u 若目标文件已经存在, 并且源文件比目标文件新时 才会进行覆盖
-i 若目标文件已经存在, 移动前询问是否覆盖
-f force强制的意思,意思是无条件覆盖已经存在的文件,如果同时使用了-f和其他的参数,那么以-f为准
-n 修改名称时,不会覆盖掉任何已经存在的文件
-b 文件被覆盖前做简单备份
-v 移动时展示移动的内容信息
-t --target-directory=DIRECTORY 即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后
同样,接下来我们通过一些例子来学习该命令的使用:
- 直接修改文件文件名:
[mrzhang@192 testmv]$ ll
total 4
-rw-rw-r--. 1 mrzhang mrzhang 15 Jun 13 20:45 mv1.log
[mrzhang@192 testmv]$ mv mv1.log mv.log
[mrzhang@192 testmv]$ ll
total 4
-rw-rw-r--. 1 mrzhang mrzhang 15 Jun 13 20:45 mv.log
- 移动文件到某一目录下:
[mrzhang@192 testmv]$ mkdir testmv1
[mrzhang@192 testmv]$ ll
total 4
-rw-rw-r--. 1 mrzhang mrzhang 15 Jun 13 20:45 mv.log
drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 13 20:55 testmv1
[mrzhang@192 testmv]$ mv mv.log testmv1/
[mrzhang@192 testmv]$ ll
total 0
drwxrwxr-x. 2 mrzhang mrzhang 20 Jun 13 20:55 testmv1
[mrzhang@192 testmv]$ ll testmv1/
total 4
-rw-rw-r--. 1 mrzhang mrzhang 15 Jun 13 20:45 mv.log
如果同时将移动多个文件到某一文件下,多个文件之间可以使用空格进行区分:
[mrzhang@192 testmv]$ mv mv.log mv1.log testmv1/
当然,也可以使用通配符来移动,比如移动全部 log 文件到目标目录下:
[mrzhang@192 testmv]$ mv *.log testmv1/
- 将文件file1改名为file2,如果file2已经存在,则修改时询问是否覆盖,可以通过
-i
参数来实现 ;而默认情况下,如果file2已经存在,那么file2将会直接覆盖,这等同于另一个参数-f
,也就是强制的意思,即不管file2是否存在,都直接覆盖:
- 将文件file1改名为file2,如果file2已经存在,则修改时询问是否覆盖,可以通过
[mrzhang@192 testmv1]$ ll
total 8
-rw-rw-r--. 1 mrzhang mrzhang 3 Jun 13 21:01 test1.log
-rw-rw-r--. 1 mrzhang mrzhang 4 Jun 13 20:58 test2.log
[mrzhang@192 testmv1]$ mv -i test1.log test2.log
mv: overwrite ‘test2.log’? y
[mrzhang@192 testmv1]$ ll
total 4
-rw-rw-r--. 1 mrzhang mrzhang 3 Jun 13 21:01 test2.log
[mrzhang@192 testmv1]$
[mrzhang@192 testmv1]$ mv -f test1.log test2.log
- 移动目录,或者对目录修改名称:
[mrzhang@192 testmv]$ ll
total 0
drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 13 21:06 testmv1
[mrzhang@192 testmv]$ mv testmv1 testmv2
[mrzhang@192 testmv]$ ll
total 0
drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 13 21:06 testmv2
[mrzhang@192 testmv]$ mkdir testmv3
[mrzhang@192 testmv]$ mv testmv2 testmv3
[mrzhang@192 testmv]$ ll
total 0
drwxrwxr-x. 3 mrzhang mrzhang 21 Jun 13 21:07 testmv3
[mrzhang@192 testmv]$ ll testmv3/
total 0
drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 13 21:06 testmv2
从上面可以看出,针对移动目录命令:mv dir1 dir2
,如果目标目录dir2不存在,则将目录dir1名称修改为dir2,而如果dir2存在,则将目录dir1移动至dir2目录下。另外,如果想在使用mv的时候查看具体的信息,可以使用-v
参数查看移动或修改的具体信息:
[mrzhang@192 testmv2]$ mv -v test1.log test2.log
‘test1.log’ -> ‘test2.log’
[mrzhang@192 testmv2]$ ll
total 4
-rw-rw-r--. 1 mrzhang mrzhang 6 Jun 13 21:22 test2.log
[mrzhang@192 testmv2]$
更多例子可参考:Linux 移动或重命名文件/目录-mv 的10个实用例子
3. rm命令
rm命令是用于删除文件或目录的命令。该命令可以删除一个目录中的一个或多个文件,也可也将目录下所有的文件都删除,而对于链接文件,只删除了链接,原有文件不变,而默认情况也就是不加参数的情况下,是只能删除文件的。
以前我们在网上经常能看到一些rm命令的搞笑图,比如删库跑路之类的,可见该命令是一个比较危险的命令,我们使用该命令的时候,一定要注意下我们在哪个目录,要删除哪些东西,并且尽量不要使用该命令进行删除操作。
-I 当删除文件超过3个或删除目录时,给出一次确认删除提示信息,而-i是每删除一个文件展示一次提示信息
-f 强制删除,忽略掉不存在的文件,从不给出提示信息
-i 删除时提示确认信息
-d 删除时仅删除空目录
-r -R --recursive rm删除时将参数中列出的全部目录和子目录均递归地删除
-v 删除时展示具体信息,即详细信息
同样,我们使用几个简单的例子来学习下该命令的使用:
- 删除文件时,弹出确认信息,并显示删除内容信息:
[mrzhang@192 testmv2]$ rm -vi test1.log
rm: remove regular file ‘test1.log’? y
removed ‘test1.log’
[mrzhang@192 testmv2]$
我们还可以使用通配符来删除多个文件,比如要删除当前目录下所有log文件,并逐一弹出确认信息:
[mrzhang@192 testmv2]$ ll
total 12
-rw-rw-r--. 1 mrzhang mrzhang 5 Jun 13 21:51 test1.log
-rw-rw-r--. 1 mrzhang mrzhang 6 Jun 13 21:22 test2.log
-rw-rw-r--. 1 mrzhang mrzhang 4 Jun 13 21:51 test3.log
[mrzhang@192 testmv2]$ rm -i *.log
rm: remove regular file ‘test1.log’? y
rm: remove regular file ‘test2.log’? y
rm: remove regular file ‘test3.log’? n
[mrzhang@192 testmv2]$ ll
total 4
-rw-rw-r--. 1 mrzhang mrzhang 4 Jun 13 21:51 test3.log
- 递归删除当前目录下所有文件及目录,我们可以使用
-r
参数来递归的删除所有文件,这个参数是个很危险的参数,一般情况下不建议使用,因为该参数会删除搜友文件及目录:
- 递归删除当前目录下所有文件及目录,我们可以使用
[mrzhang@192 testmv2]$ rm -r testmv22
而-r
和-f
参数组成的-rf
参数会强制删除目录下所有的文件及目录,并且没有任何提示信息,应该注意,尽量不要同时使用这两个参数。
- 删除文件时,如果文件不存在,默认rm命令会抛出与一个信息,我们可以使用
-f
来忽略错误提示,从而强制执行:
- 删除文件时,如果文件不存在,默认rm命令会抛出与一个信息,我们可以使用
[mrzhang@192 testmv3]$ ll
total 0
[mrzhang@192 testmv3]$ rm test1.log
rm: cannot remove ‘test1.log’: No such file or directory
[mrzhang@192 testmv3]$ rm -f test1.log
- 使用rm的
-I
参数,可以在删除超过 3 个文件或删除目录时提示一次确认信息:
- 使用rm的
[mrzhang@192 testmv]$ ll testmv3/
total 0
drwxrwxr-x. 3 mrzhang mrzhang 44 Jun 13 22:09 testmv31
drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 13 22:09 testmv32
drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 13 22:09 testmv33
drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 13 22:09 testmv34
[mrzhang@192 testmv]$ rm -I testmv3/
rm: cannot remove ‘testmv3/’: Is a directory
[mrzhang@192 testmv]$ rm -Ir testmv3/
rm: remove 1 argument recursively? y
[mrzhang@192 testmv]$
本文参考自:https://linux.cn/article-9321-1.html
4. cal命令
cal (Calender缩写) 命令用来显示阳历日历,也就是公历日历,而默认情况下显示当前一个月的日历。我们来看一下它的常用参数:
Usage:
cal [options] [[[day] month] year]
Options:
-1, --one show only current month (default)
-3, --three show previous, current and next month
-s, --sunday Sunday as first day of week
-m, --monday Monday as first day of week
-j, --julian 一年的第几天(从1月1号开始算)
-y, --year show whole current year
-V, --version display version information and exit
-h, --help display this help text and exit
然后,接下来我们直接看例子就可以了:
[mrzhang@192 ~]$ cal 7 2015
July 2015
Su Mo Tu We Th Fr Sa
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
26 27 28 29 30 31
日历命令的一些参数使用.png
比如我们要查看整个2015年的日历:
[mrzhang@192 ~]$ cal 2015
2015
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29 30 31
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31
5. date命令
date命令是Linux中与日期时间相关的命令,默认情况下,date命令会显示系统的日期和时间:
[mrzhang@192 ~]$ date
Fri Jun 22 22:30:45 CST 2018
我们来看一下date命令的格式:
Usage: date [OPTION] ... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC] YY][.ss]]
Display the current time in the given FORMAT, or set the system date.
date命令有许多格式,如果我们不喜欢默认的格式,可以设置许多种格式。
5.1 多种日期格式
date命令提供了许多格式,这些格式通常都是以%
开头,我们可以借助加号(+)来设置我们日期或时间的展示格式:
%H 小时(以00-23来表示)
%I 小时(以01-12来表示)
%K 小时(以0-23来表示)
%l 小时(以0-12来表示)
%M 分钟(以00-59来表示)�
%P AM或PM
%r 时间(含时分秒,小时以12小时AM/PM来表示)
%s 总秒数;起算时间为1970-01-01 00:00:00 UTC
%S 秒(以本地的惯用法来表示)
%T 时间(含时分秒,小时以24小时制来表示)
%X 时间(以本地的惯用法来表示)
%Z 时区;
%a 星期的缩写
%A 星期的完整名称
%b 月份英文名的缩写
%B 月份的完整英文名称
%c 日期与时间;只输入date指令也会显示同样的结果
%d 日期(以01-31来表示)
%D 日期(含年月日)
%j 该年中的第几天
%m 月份(以01-12来表示)
%U 该年中的周数
%w 该周的天数,0代表周日,1代表周一,异词类推
%x 日期(以本地的惯用法来表示)
%y 年份(以00-99来表示)
%Y 年份(以四位数来表示)
%n 在显示时,插入新的一行
%t 在显示时,插入tab
MM 月份(必要)
DD 日期(必要)
hh 小时(必要)
mm 分钟(必要)
ss 秒(选择性)
这里只展示了大部分的格式,如果我们有兴趣,通过date --help
来了解更多命令,接下来我们来简单看下这些命令:
[mrzhang@192 ~]$ date +%d
22
[mrzhang@192 ~]$ date +%D
06/22/18
[mrzhang@192 ~]$ date +'%B %b'
June Jun
[mrzhang@192 ~]$ date +'Day:%d Month:%m Year:%Y'
Day:22 Month:06 Year:2018
5.2 RFC2822的日期与时间格式
通过-R
参数来使用RFC2822的格式输出:
[mrzhang@192 ~]$ date -R
Fri, 22 Jun 2018 22:33:54 +0800
RFC 2822 的格式是 : 星期, 日-月-年, 小时:分钟:秒 时区
,时区 +0700
等同于 GMT +7
。默认上date使用的是定义在/etc/localtime
的时区,有效时区数据定义在/usr/share/timezones
。
5.3 显示协调世界时UTC
我们可以使用 -u
参数来显示UTC:
[mrzhang@192 ~]$ date -u
Fri Jun 22 14:41:14 UTC 2018
5.4 设置系统日期和时间
一般情况下,我们系统的日期和时间是自动设置的,但如果由于一些原因,我们需要手动修改的话,那么我们就可以通过date的-s
参数或者--set
参数,两者的格式稍有不同:
[mrzhang@192 ~]$ date --set='20180612 23:00:00'
date: cannot set date: Operation not permitted
[mrzhang@192 ~]$ sudo date --set='20180612 23:00:00'
[sudo] password for mrzhang:
[mrzhang@192 ~]$ date
Tue Jun 12 23:00:05 CST 2018
[mrzhang@192 ~]$ sudo date -s 20180620
Wed Jun 20 00:00:00 CST 2018
需要注意的是,该命令需要root权限,如果没有权限,上面会提示出对应的错误信息。而设置时的日期格式也有多种方式:
date -s 20080523 #设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 #设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ #这样可以设置全部时间
date -s “01:01:01 20080523″ #这样可以设置全部时间
date -s “2008-05-23 01:01:01″ #这样可以设置全部时间
date -s “20080523 01:01:01″ #这样可以设置全部时间
5.5 查看昨天,前天,上个月等日期
我们可以通过-d
或者--date
参数来展示:
date +%Y%m%d --date="+1 day" #显示前一天的日期
date +%Y%m%d --date="-1 day" #显示后一天的日期
date +%Y%m%d --date="-1 month" #显示上一月的日期
date +%Y%m%d --date="+1 month" #显示下一月的日期
date +%Y%m%d --date="-1 year" #显示前一年的日期
date +%Y%m%d --date="+1 year" #显示下一年的日期
看一些简单的例子:
[mrzhang@192 ~]$ date +%Y%m%d
20180620
[mrzhang@192 ~]$ date +%Y%m%d --d='-1 month'
20180520
[mrzhang@192 ~]$ date +%Y%m%d --d='-1 day'
20180619
[mrzhang@192 ~]$ date +%Y%m%d --d='+1 day'
20180621
date -d
的功能非常强大,通过将日期作为参数,我们可以快速地查明一个特定的日期。-d
参数还可以告诉您,相对于当前日期若干天的究竟是哪一天等强大的操作:
date -d "nov 22" #今年的 11 月 22 日是星期三
date -d '2 weeks' #2周后的日期
date -d '2 weeks 4 days' #2周又过4天的日期
date -d 'next monday' #下周一的日期
date -d 'next month' #下个月的日期
date -d next-day +%Y%m%d #明天的日期 或 date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d #昨天的日期 或 date -d yesterday +%Y%m%d
date -d last-month +%Y%m #上个月是几月
date -d next-month +%Y%m #下个月是几月
date -d last-sunday #上周日的日期
使用 ago 指令,您可以得到过去的日期:
date -d '30 days ago' #30天前的日期
使用负数以得到相反的日期:
date -d 'dec 14 -2 weeks' #相对 dec 14 这个日期的两周前的日期
date -d '-100 days' #100天以前的日期
date -d '50 days' #50天后的日期
date还有一些参数,我们可以通过date --help
或者man命令来进行学习。而一般情况下,我们进行备份或者定时任务的时候会用到相关日期,比如打印出日期等操作。
date命令参考自:
每天一个linux命令(37):date命令
6. whereis 命令
whereis命令可以查找指定命令的二进制文件、源代码文件和帮助文件,命令格式及参数为:
Usage:
whereis [options] file
Options:
-b 搜索二进制文件
-B <dirs> 指定搜索可执行文件的路径
-m 搜索帮助文档
-M <dirs> 指定索索帮助文档的路径
-s 搜索源代码文件
-S <dirs> 指定搜索源代码文件的路径
-f 分割目录列表和要搜索的文件名
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件
-l 查看该命令的搜索路径
- 我们进行一些简单的查找:
[mrzhang@192 ~]$ whereis whereis
whereis: /usr/bin/whereis /usr/share/man/man1/whereis.1.gz
[mrzhang@192 ~]$ whereis svn
svn: /usr/bin/svn /usr/share/man/man1/svn.1.gz
其中展示的第一个路径就是我们要查询的路径,后面这个路径是对应帮助文档的位置。我们可以指定查找的时候只查找对应的类型:
[mrzhang@192 ~]$ whereis -b svn
svn: /usr/bin/svn
[mrzhang@192 ~]$ whereis -m svn
svn: /usr/share/man/man1/svn.1.gz
- 并且,我们可以指定在某个具体的路径下进行搜索,同时可以指定多个路径,路径与要搜索的文件名之间使用
-f
参数进行分割:
- 并且,我们可以指定在某个具体的路径下进行搜索,同时可以指定多个路径,路径与要搜索的文件名之间使用
[mrzhang@192 ~]$ whereis -B /usr/bin cp
[mrzhang@192 ~]$ whereis -B /usr/bin -f cp
cp: /usr/share/man/man1/cp.1.gz /usr/share/man/man1p/cp.1p.gz /usr/bin/cp
- 查看whereis的搜索路径
[mrzhang@192 ~]$ whereis -l
bin: /usr/bin
bin: /usr/sbin
bin: /usr/lib
bin: /usr/lib64
bin: /etc
bin: /usr/etc
bin: /usr/games
bin: /usr/local/bin
能实现类似功能的还有其他一些命令,比如find命令,但和find相比,whereis查找的速度显然更快,因为linux系统会将系统内所有的文件都记录在一个数据库文件中,当使用whereis进行查找时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。
7. whatis命令
whatis命令用于查询一个命令执行什么功能,并将查询结果打印到终端上,相当于man -f 命令
。默认情况下,只会展示查询到的命令的单行描述,不过可以使用参数-l
来显示完整的描述。
[mrzhang@192 ~]$ whatis whereis
whereis (1) - locate the binary, source, and manual page files for a...
[mrzhang@192 ~]$ whatis -l whereis
whereis (1) - locate the binary, source, and manual page files for a command
8. locate命令
locate命令和find命令类似,也是用于搜索文件或者目录的命令,locate命令其实算是find -name
的另一种写法,但搜索效率比后者要快许多,因为它搜索的不是具体的目录,而是和whereis命令一样,在数据库中搜索(/var/lib/locatedb
)。
Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令可能会查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb
命令,手动更新数据库。
Usage: locate [OPTION] ... [PATTERN] ...
Search for entries in a mlocate database.
-A, --all 展示匹配全部
-b, --basename 只匹配路径名的基本名称
-c, --count 输出查询到的文件的数量
-d,--database DBPATH 设置查找的路径
-e, --existing 只显示当前存在的文件
-i, --ignore-case 忽略大小写
-l, --limit, -n LIMIT 限制输出的行数
-q, --quiet 安静模式,不展示任何错误信息
-r, --regexp REGEXP 使用正则表达式进行查询
--regex patterns are extended regexps
-w, --wholename 匹配整个路径名(默认)
8.1 查找etc目录下所有以sh开头的文件,文件数量,及限制展示条数
[mrzhang@192 ~]$ locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
[mrzhang@192 ~]$ locate -c /etc/sh
3
[mrzhang@192 ~]$ locate -n 2 /etc/sh
/etc/shadow
/etc/shadow-
[mrzhang@192 ~]$ locate -l 2 /etc/sh
/etc/shadow
/etc/shadow-
8.2 使用正则表达式进行查询:
[mrzhang@192 testcp1]$ locate -r test.log$
/home/mrzhang/Documents/testcp1/test.log
/home/mrzhang/Documents/testcp2/test.log
/home/mrzhang/Documents/testcp3/test.log
8.3 对于新创建文件,查询前先更新一下
[mrzhang@192 testcp1]$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'
[mrzhang@192 testcp1]$ sudo updatedb
[sudo] password for mrzhang:
如果遇到上述无法updatedb的情况,是权限问题,获取root权限进行更新。
网友评论