Linux下搜索文件、文件名后缀

Linux下搜索文件

Linux系统是由文件组成的,因此搜索文件的功能也十分强大。node

which查找命令可执行文件的绝对路径

一、which xx查看命令路径

用#which查看#rm命令可见,rm命令其实是alias命令设置的带有-i选项的别名,#rm的绝对路径是/usr/bin/rm。linux

若是没有加选项,命令和绝对路径效果是同样的。数据库

命令其实就是绝对路径的可执行文件,不过是命令加上了一些选项(可执行文件执行时会执行的一些参数)。想要执行命令,就要找到命令在什么路径,而系统会在环境变量的几个目录中寻找有没有输入的命令;centos

二、which查找的原理

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查找文件

一、whereis命令的做用

whereis命令用来定位    指令的二进制程序、源代码文件和man手册页等相关文件的路径。 模糊查找。

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

和find相比,whereis查找的速度更快。由于linux系统会将系统内的全部文件都记录在一个数据库文件中,whereis和locate命令,只从数据库中查找数据。

find命令,经过遍历硬盘来查找,效率较低。

可是该数据库文件并非实时更新,默认状况下时一星期更新一次,所以,咱们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚创建文件,却没法查找到,缘由就是由于数据库文件没有被更新。
 

二、whereis用法

语法: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命令查找文件

一、locate命令的做用

locate命令相似于whereis没命令,经过查找预先生成的文件列表库来告诉用户要查找的文件在哪,后面直接跟文件名。

不论是目录仍是文件,只要包含要搜索的关键词都会列出来,因此也是模糊查找,locate命令使用的也很少

二、安装locate命令包

若是没有locate命令,须要安装mlocate包;

#yum install -y mlocate

三、update命令更新文件列表库

# locate ls
locate: 没法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录

初次运行locate命令会报错,由于系统尚未生成文件列表库。

若是有mlocate.db文件有,就能够查询,这个文件天天会自动定时更新;也能够手动更新;

updatedb命令能够更新文件列表库。若是服务器正在执行重要业务,最好不要执行updatedb命令,由于一旦运行,服务器压力贵增大。这个数据库默认每周更新一次。

同whereis同样,若是搜索的文件正好是在两次更新的时间段内建立,那确定搜索不到结果。

/etc/update.conf文件中能够配置这个数据库的更新规则。

四、locate命令用法

语法:locate [-d <数据库文件>][要查找的]

补充:locate指令用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找合乎范本样式条件的文件或目录。

参数:

 -d<数据库文件>或--database=<数据库文件> 设置locate指令使用的数据库。locate指令预设的数据库位于/var/lib/mlocate目录里,文件名为mlocate.db,可以使用这个参数另行指定。

                                                                                                                                                               

find

一、find命令说明

find命令用来在指定目录下查找文件。任何位于参数以前的字符串都将被视为欲查找的目录名。若是使用该命令时,不设置任何参数,则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命令使用案例

3.一、按名称搜索

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

 

3.二、只搜索目录

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

3.三、只搜索文件

find [目录] -type f -name 文件名 (只搜索文件)

[root@colinlinux ~]# find /etc/ -type f -name "sshd*"
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/etc/pam.d/sshd

 

3.四、按文件类型搜索

文件类型及符号对应表

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 ctime mtime

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命令用于显示文件的状态信息。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 {} \;

 

LANG修改系统语言

一、echo $LANG查看当前语言

[root@colinlinux ~]# echo $LANG//查看当前环境的语言变量
zh_CN.UTF-8

二、locale命令

功 能:显示当前环境不一样位置的语言类型。

语 法: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个字符。

 

 

 

 

 

 

文件名后缀

相关文章
相关标签/搜索