Linux系统是由文件组成的,因此搜索文件的功能也十分强大。node
用#which查看#rm命令可见,rm命令其实是alias命令设置的带有-i选项的别名,#rm的绝对路径是/usr/bin/rm。linux
若是没有加选项,命令和绝对路径效果是同样的。数据库
命令其实就是绝对路径的可执行文件,不过是命令加上了一些选项(可执行文件执行时会执行的一些参数)。想要执行命令,就要找到命令在什么路径,而系统会在环境变量的几个目录中寻找有没有输入的命令;centos
which查找的原理是查环境变量中的文件是否有所查找的命令;bash
随便输入一个没有的命令,由于环境变量的路径中没有找到这个命令,因此会显示未找到命令;服务器
咱们把/usr/bin/ls文件复制一份到/tmp/ls2,而后执行/tmp/ls2,结果和/usr/bin/ls效果同样,可是若是咱们直接用ls2命令,会告诉咱们没有找到命令,用which查看会显示ssh
/usr/bin/which: no ls2 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)socket
意思是/usr/bin/which查询结果是在 (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)中没有找到ls2,而括号里面的一串绝对路径就是环境变量$PATH。在这里也能够知道which查询路径的时候是在环境变量PAHT的一堆路径变量里查询的。编码
因此也就是说若是想要用ls2命令,而不是用/tmp/ls2,就须要把ls2的路径也添加进环境变量PATH才行。centos7
whereis命令用来定位 指令的二进制程序、源代码文件和man手册页等相关文件的路径。 模糊查找。
whereis命令只能用于程序名的搜索,并且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。若是省略参数,则返回全部信息。
和find相比,whereis查找的速度更快。由于linux系统会将系统内的全部文件都记录在一个数据库文件中,whereis和locate命令,只从数据库中查找数据。
find命令,经过遍历硬盘来查找,效率较低。
可是该数据库文件并非实时更新,默认状况下时一星期更新一次,所以,咱们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚创建文件,却没法查找到,缘由就是由于数据库文件没有被更新。
语法:whereis [-bfmsu][文件名称]
补充:whereis指令会在特定目录中查找符合条件的文件。这些文件的属性应属于sourc files(源码),binary files(二进制文件),manual files(帮助文件)。
经常使用参数:
-b 只查找二进制文件。
-m 只查找说明文件(man目录下的文件)。
-s 只查找原代码文件。
其余参数:
-u 查找不包含指定类型的文件。
-f 不显示文件名前的路径名称。
-B<目录> 只在设置的目录下查找二进制文件。
-M<目录> 只在设置的目录下查找说明文件。
-S<目录> 只在设置的目录下查找原始代码文件。
随便找一个本身建立的文件是找不到的,由于系统数据库没有把这个文件更新进去;
# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
whereis 命令相似于模糊查找,只要文件名包含这个"ls"字符就会列出来。whereis命令使用比较少。
locate命令相似于whereis没命令,经过查找预先生成的文件列表库来告诉用户要查找的文件在哪,后面直接跟文件名。
不论是目录仍是文件,只要包含要搜索的关键词都会列出来,因此也是模糊查找,locate命令使用的也很少。
若是没有locate命令,须要安装mlocate包;
#yum install -y mlocate
# locate ls
locate: 没法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
初次运行locate命令会报错,由于系统尚未生成文件列表库。
若是有mlocate.db文件有,就能够查询,这个文件天天会自动定时更新;也能够手动更新;
updatedb命令能够更新文件列表库。若是服务器正在执行重要业务,最好不要执行updatedb命令,由于一旦运行,服务器压力贵增大。这个数据库默认每周更新一次。
同whereis同样,若是搜索的文件正好是在两次更新的时间段内建立,那确定搜索不到结果。
/etc/update.conf文件中能够配置这个数据库的更新规则。
语法:locate [-d <数据库文件>][要查找的]
补充:locate指令用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找合乎范本样式条件的文件或目录。
参数:
-d<数据库文件>或--database=<数据库文件> 设置locate指令使用的数据库。locate指令预设的数据库位于/var/lib/mlocate目录里,文件名为mlocate.db,可以使用这个参数另行指定。
find命令用来在指定目录下查找文件。任何位于参数以前的字符串都将被视为欲查找的目录名。若是使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。而且将查找到的子目录和文件所有进行显示。
语 法:find [路径] [参数]
find [路径] [-type df-lsb] [-name <范本样式>] (目录d,文件f,二进制文件 -,软链接文件l,socket文件s,块设备文件b,串行端口设备文件c)
find [路径] [-type df-lsb][-atime/mtime/ctime -<n天数>] [-name <范本样式>]
find [路径] [-type df-lsb][-atime/mtime/ctime +<n天数>] [-name <范本样式>]
find [路径] [-type df-lsb][-atime/mtime/ctime <n天数>] [-name <范本样式>]
(n指的是24hour*n, +n、-n、n分别表示:+n: 大于n;-n: 小于n;n:等于n)
find [目录]] [-type df-lsb] [-o] [-atime/mtime/ctime <n天数>] [-name <范本样式>]
(-o 表示把条件选项由逻辑与改成逻辑或)
find [目录] [-type df-lsb][-amin/mmin/cmin -<n分钟数>] [-name <范本样式>]
find [目录] [-type df-lsb][-amin/mmin/cmin +<n分钟数>] [-name <范本样式>]
find [目录] [-type df-lsb][-amin/mmin/cmin <n分钟数>] [-name <范本样式>]
(n指的是1min*n, +n、-n、n分别表示:+n: 大于n;-n: 小于n;n:等于n)
find [目录] [-type df-lsb] [-amin/mmin/cmin <n分钟数>] -exec ls -l {} \;
(把查找到的符合条件的文件列表中的文件的属性一并显示出来,末尾的;分号不可少,{}花括号表示列表中的每一个文件)
find [目录] [-type df-lsb] [-amin/mmin/cmin <n分钟数>] -exec mv {} {}.xxx \;
(把查到到的目录符合条件的列表中的文件更名字,文件名后面加上.xxx,-exec后面的mv {} {}.xxx就是操做一行,\继续向下执行,直到最后。)
find [目录] [-inum <inode号>] (查找经过inode号查找文件,如硬链接)
find [目录] [-type df-lsb] [-size <n文件大小>]
find [目录] [-type df-lsb] [-size -<n文件大小>]
find [目录] [-type df-lsb] [-size +<n文件大小>]
(n指的是大小,能够是k、M, +n、-n、n分别表示:
+n: 大于n
-n: 小于n
n:等于n)
补 充:find指令用于查找符合条件的文件。任何位于参数以前的字符串都将被视为欲查找的目录。
find 路径 -name filename(全称或者模糊名称)
# find /etc/ -name "sshd*" /etc/ssh/sshd_config /etc/systemd/system/multi-user.target.wants/sshd.service /etc/sysconfig/sshd /etc/pam.d/sshd
find [目录] -type d -name 文件名 (只搜索目录)
[root@colinlinux ~]# find /etc/ -type d -name "ss*" /etc/ssl /etc/selinux/targeted/active/modules/100/ssh /etc/selinux/targeted/active/modules/100/sssd /etc/ssh
find [目录] -type f -name 文件名 (只搜索文件)
[root@colinlinux ~]# find /etc/ -type f -name "sshd*" /etc/ssh/sshd_config /etc/sysconfig/sshd /etc/pam.d/sshd
文件类型及符号对应表
f | l | d | c | b | s | p |
普通文件 | 符号链接文件 | 目录文件 | 字符设备文件 | 块设备文件 | 套接字文件 | FIFO文件 |
find 目录 -type c (只搜索串行端口设备c文件)
[root@colinlinux ~]# find /dev/ -type c /dev/dmmidi /dev/midi /dev/vsock /dev/vcsa6 /dev/vcs6 /dev/vcsa5 /dev/vcs5 /dev/vcsa4
atime:access time,访问时间,
mtime:modefy time,修改时间,修改内容才会改变;
ctime:change time,改动状态时间,指文件的inode结点被修改的时间,如经过chmod修改文件权限,改文件名,改文件内容,改了建立时间等等,ctime就会被修改。
chmod修改文件权限ctime变化;
修改文件内容后mtime变化,ctime也变化;
只是访问读取文件,只有atime变化;
# find /etc/ -type f -mtime -1
查找当前目录在一天之内修改过的文件;
# find /etc/ -type f -o -mtime -1 -o -name ".conf"
-o表示逻辑或,这里因为文件太多只截取了末尾。
find [目录] [-inum <inode号>] (查找经过inode号查找文件,如硬链接)
# ln 1.txt /tmp/1_hardlink.txt 建立一个硬连级文件到同分区的其余目录;
# ls -l 1.txt 查看一下1.txt的信息发现有3个文件使用了相同的inode号;
# ls -i 1.txt 查询一下1.txt的节点号;
# find / -inum 35653405 找到inode号为35653405的文件所在,共3处;
stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。
语法:stat [选项] [参数]
选项:基本不用选项;
参数:文件名或目录;
补充:stat以文字的格式来显示inode的内容。
# find /root/ -type f -mmin -120 查找/root/中修改时间在200分钟之内的文件;
find [目录] [-type df-lsb] [-amin/mmin/cmin <n分钟数>] -exec ls -l {} \;
虽然命令稍长,可是在查找出来的文件数量较多的时候很实用;
# find /root/ -type f -mmin -120 -exec ls -l {} \;
find [目录] [-type df-lsb] [-amin/mmin/cmin <n分钟数>] -exec mv {} {}.xxx \;
# find /root/ -type f -mmin -70 -exec mv {} {}.bak \;
find [目录] [-type df-lsb] [-size <文件大小>]
这样找到了文件大小符合条件的咱们就能够对齐作一些操做了。
# find /root/ -type f -size -10k -exec ls -lh {} \;
[root@colinlinux ~]# echo $LANG//查看当前环境的语言变量 zh_CN.UTF-8
功 能:显示当前环境不一样位置的语言类型。
语 法:locale
补 充: LC_COLLATE,定义该环境的排序和比较规则
LC_CTYPE,用于字符分类和字符串处理,控制全部字符的处理方式,包括字符编码,字符是单字节仍是多字节,如何打印等。是最重要的一个环境变量。 LC_MONETARY,货币格式
LC_NUMERIC,非货币的数字显示格式
LC_TIME,时间和日期格式
LC_MESSAGES,提示信息的语言。
#locale
LANG=[语言类型]
功 能:设置语言类型;
语 法:LANG=[语言类型]
补 充:这里只是临时修改,永久修改要改配置文件,centos7中修改语言的配置文件在/etc/locale.conf
参 数:zh_CN.UTF-8
en_US
.txt,.zip等在window中被叫作“后缀名”,虽然这些后“后缀名”在linux中也有出现,可是linux中他们并无任何意义,只不过是人为习惯性的加上去的,方便人为操做,linux中的后缀名能够随便取,也能够没有,系统根本无论这些。
人为习惯上.sh表示脚本,.tar.gz表示压缩包,.cnf表示配置文件等,这只是人为习惯,也能够没必要遵循。
目前linux文件名最长能够容许225个字符。