2.23/2.24/2.25 find命令
2.26 文件名后缀
2.27linux和windows互传文件
一、find命令
find用来搜索文件和目录,相似命令还有:
which (选项) (参数)
语法:whereis(选项)(参数)
选项:
定义:命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
和find相比,whereis查找的速度非常快,这是因为Linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。但是该数据库文件并不是实时更新,默认情况下一星期更新一次,因此,我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立的文件,却无法查到,原因就是因为数据库文件没有更新。
locate
定义:locate命令其实是‘find -name’的另一种写法,但是要比后者快的多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
示例:
知识点:ctrl+u 删除光标前面的,ctrl+d 删除光标后面的,一个一个删除。光标前后什么都没有,ctrl+d退出终端,ctrl+a 光标挪到最前面,ctrl+e光标挪到最后
find基本语法:find(选项)(参数)
find path -option [-print] [-exec -ok command]{}/;
选项:
参数
起始目录:查找文件的起始目录
示例:
列出当前目录及子目录下所有文件和目录
find .
在/home目录下查找以.txt结尾的文件名
find /home -name "*.txt"
同上,但忽略大小写
find /home -iname "*.txt"
当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . \( -name "*.txt" -o -name "*.pdf" \)
find . -name "*.txt" -o -name "*.pdf"
匹配文件路径或者文件
find /usr/ -path "*local*"
基于正则表达式匹配文件路径
find . -regex ".*\(\.txt|\.pdf\)$"
同上,但忽略大小写
find . -iregex ".*\(\.txt|\.pdf\)$"
找出/home下不是以.txt结尾的文件
find /home ! -name "*.txt"
根据文件类型进行搜索
find . -type 类型参数
类型参数列表:
查找/etc/目录下文件名包含‘ssh*’的所有文件
find /etc/ -type f -name "ssh*"
基于目录深度搜索
1.向下最大深度限制为3
find . -maxdepth 3 -type f
2.搜索出深度距离当前目录至少2个子目录的所有文件
find . -mindepth 2 -type f
根据文件时间戳进行搜索
find . -type f 时间戳
可以用‘stat’查看文件的三个时间戳,Unix/Linux文件系统每个文件都有三种时间戳:
搜索最近七天内被访问过的所有文件
find . -type f -atime -7
搜索恰好在七天前被访问过的所有文件
find . -type f -atime 7
搜索超过七天内被访问过的所有文件
find . -type f -atime +7
搜索访问时间超过10分钟的所有文件
find . -type f -amin +10
搜索最近七天内被访问过文件并且文件名为.conf
find . -type f -atime -7 -name "*.conf"
搜索最近七天内被访问过的文件或者名为.conf
find . -type f -o -atime -7 -o -name "*.conf"
找出比file.log修改时间更长的所有文件
find . -type f -newer file.log
根据文件大小进行匹配
find . -type f -size 文件大小单元
文件大小单元:
搜索大于10KB的文件
find . -type f -size +10k
搜索小于10KB的文件
find . -type f -size -10k
搜索等于10KB的文件
find . -type f -size 10k
删除当前目录下所有的.txt文件
find . -type f -name "*.txt" -delete
根据文件权限/所有权进行匹配,找出当前目录下搜索出权限为777的文件
find . -type f -perm 777
找出当前目录下权限不是644的php文件
find . -type f -name "*.php" ! -perm 644
找出当前目录用户tom拥有的所有文件
find . -type f -user tom
找出当前目录用户组sunk拥有的所有文件
find . -type f -group sunk
借助-exec选项与其他命令结合使用
找出当前目录下所有root的文件,并把所有权更改为用户tom
find . -type f -user root -exec chown tom {} \;
上例中,{}用于与-exec 结合使用来匹配所有文件,然后会被替换为相应的文件名
找出自己家目录下所有的.txt文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
上例中,-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作
查找当前目录下所有的.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -name "*.txt" -exec cat {} \;> all.txt
将30天前的.log文件移动到old目录中
find . -type f -mtime +30 -name "*.log" -exec mv {} old \;
找出当前目录下所有的.txt文件并以‘File:文件名’的形式打印出来
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
因为单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令
-exec ./text.sh {} \;
查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
find . -path "./sk" -prune -o -name "*.txt" -print
find其他技巧收集
列出所有长度为零的文件
find . -empty
根据inode号查找所有相同inode号的文件
find . -inum ‘inode号’
1.Find工具-name参数案例
2.Find工具-type参数案例
3.Find工具-size参数案例
4.Find工具-perm参数案例
5.Find工具-mtime参数案例
6.Find工具参数综合案例
二、文件名后缀
Linux系统是区分大小写的,后缀名并不代表它是什么样的文件。习惯的把相同的文件定义相同的后缀名,方便使用区分和查询
echo $LANG 查看系统默认语言
1.一谈到文件类型,大家就能想到Windows的文件类型,比如.txt、.doc、.sys、.mp3、.exe等,根据文件的后缀就能判断文件的类型。但在Linux中一个文件是否能被执行,和后缀名没有太大的关系,主要看文件的属性。但我们了解一下Linux文件的后缀名还是有必要的,特别是我们自己创建一些文件,最好还是加后缀名,这样做的目的仅仅是为了我们在应用时方便。现在的Linux桌面环境和Windows一样智能化,文件的类型是和相应的程序关联。我们打开某个文件时,系统会自动判断用哪个应用程序打开。
如果从这方面来说,Linux桌面环境和Windows桌面环境没有太大的区别。在Linux中,带有扩展名的文件,智能代表程序的关联,并不能说明文件是可以执行的,从这方面来说,Linux的扩展名没有太大的意义。
2.Linux的文件类型
Linux的文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等,这些文件虽然要用不同的程序打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)
普通文件
我们用ls -lh来查看某个文件的属性,可以看到有类似-rw-r-r-,值得注意的是第一的符号是-,这样的文件在Linux中为普通文件
这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具等或cp工具等。这类文件的删除方式是用rm命令
目录
当我们在某个目录下执行,看到有类似drwxr-xr-x,这样的文件就是目录,目录在Linux中是个比较特殊的文件。注意它的第一个字符是d。
创建目录的命令可以用mkdir 命令,或cp命令,cp可以把一个目录复制成另一个目录。删除用rm或rmdir命令
字符设备或块设备文件
进入/dev目录,列出文件,如下:
我们看到/dev/tty的属性是crw-rw-rw-,注意第一个字符是c,这表示字符设备文件。比如猫等串口设备;我们看到/dev/hda1 的属性是 brw-r----,注意第一个字符是b,这表示块设备,比如硬盘、光驱等设备,这个种类的文件,是用mknode来创建,用rm来删除。目前在最新的Linux版本中,我们一般不用自己来创建设备文件。因为这些文件是和内核相关联的。
套接口文件
当我们启动MySQL服务器时,会产生一个mysql.sock的文件
注意这个文件的属性的第一个字符是s,了解即可。
符号链接文件
当我们查看文件属性时,会看到有类似 lrwxrwxrwx,注意第一个字符是l,这类文件是链接文件。是通过ln -s 源文件名 新文件名
上图是一个例子,表示setup.log是install.log的软链接文件。和Windows的快捷方式相似。
符号链接文件的创建方法举例:
3.常用的文件后缀名
三、linux和windows互传文件
在Xshell或者SecureCRT下使用,Putty不可用
安装插件
yum install -y lrzsz
Linux向Windows传输文件
sz 2.txt
弹出窗口,选择位置
Windows向Linux传输文件
rz
弹出窗口,选择位置
上传完毕后就会查看到刚才上传的文件(传输到当前目录)
注意:单独用rz会有两个问题:上传中断、上传文件变化(md5不同),解决办法是上传是用rz -be,并且去掉弹出的对话框‘Upload files as ASCII’前的勾选
-b binary 用binary的方式上传下载,不解释字符为ascii
-e 强制escape 所有控制字符,比如Ctrl+x,DEL的等
运行命令sz file1 file2就是发文件到Windows上(保存的目录是可以配置)比ftp命令方便多了,而且服务器不用再开FTP服务了
在SecureCRT还可以设置上传和下载的默认目录:
options->session options->file transfer 下可以设置上传和下载的目录
剩下的你只要在用SecureCRT登录Linux终端的时候:
发送文件到客户端:sz filename
zmodem接收可以自行启动
从客户端上传文件到Linux服务端:
只要服务端执行:rz
然后在SecureCRT里选文件发送,协议 zmodem