Linux-常用命令

Posted YJ.li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-常用命令相关的知识,希望对你有一定的参考价值。

常用命令集合

文件查找 find、locate

find

find: 文件查找,针对文件名,精确查找,磁盘搜索,io读写,cpu开销大

find [options] [path...] [expression] [action]

b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
-size n[cwbkMG] : 文件大小 为 n 个由后缀决定的数据块。其中后缀为:
b: 代表 512 位元组的区块(如果用户没有指定后缀,则默认为 b)
c: 表示字节数
k: 表示 kilo bytes (1024字节)
w: 字 (2字节)
M:兆字节(1048576字节)
G: 千兆字节 (1073741824字节)
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-maxdepth 查找最大目录层数 如 1,即只查找一层目录
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件
/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

===expression===

按文件名:

[[email protected]t ~]# find /etc -name "ifcfg-eth0"
[[email protected] ~]# find /etc -iname "ifcfg-eth0"            //-i忽略大小写
[[email protected] ~]# find /etc -iname "ifcfg-eth*"

按文件大小:

[[email protected] ~]# find /etc -size +5M                        //大于5M
[[email protected] ~]# find /etc -size 5M
[[email protected] ~]# find /etc -size -5M
[[email protected] ~]# find /etc -size +5M -ls                    //-ls找到的处理动作

指定查找的目录深度:

-maxdepth levels
-mindepth levels
[[email protected] ~]# find / -maxdepth 4 -a  -name "ifcfg-eth0"

按时间找(atime,mtime,ctime):

[[email protected] ~]# find /etc -mtime +5                      //修改时间超过5天
[[email protected] ~]# find /etc -mtime 5                       //修改时间等于5天
[[email protected] ~]# find /etc -mtime -5                      //修改时间5天以内

按文件属主、属组找:

[[email protected] ~]# find /home -user jack                    //属主是jack的文件
[[email protected] ~]# find /home -group hr                     //属组是hr组的文件
[[email protected] ~]# find /home -user jack -group hr
[[email protected] ~]# find /home -user jack -a -group hr
[[email protected] ~]# find /home -user jack -o -group hr

[[email protected] ~]# find /home -nouser
[[email protected] ~]# find /home -nogroup
[[email protected] ~]# find /home -nouser -o -nogroup 

按文件类型:

[[email protected] ~]# find /dev -type f                           //f普通
[[email protected] ~]# find /dev -type d                           //d目录
[[email protected] ~]# find /dev -type l                           //l链接
[[email protected] ~]# find /dev -type b                           //b块设备
[[email protected] ~]# find /dev -type c                           //c字符设备
[[email protected] ~]# find /dev -type s                           //s套接字
[[email protected] ~]# find /dev -type p                           //p管道文件

按文件权限:

[[email protected] ~]# find . -perm 644 -ls 
[[email protected] ~]# find . -perm -644 -ls
[[email protected] ~]# find . -perm -600 -ls
[[email protected] ~]# find . -perm -222 -ls                            //全局可写
[[email protected] ~]# find /usr/bin /usr/sbin -perm -4000 -ls          //包含set uid
[[email protected] ~]# find /usr/bin /usr/sbin -perm -2000 -ls          //包含set gid
[[email protected] ~]# find /usr/bin /usr/sbin -perm -1000 -ls          //包含sticky

按正则表达式:

-regex pattern
[[email protected] ~]# find /etc  -regex  ‘.*ifcfg-eth[0-9]‘
.*       任意多个字符
[0-9]  任意一个数字

[[email protected] ~]# find /etc -regex ‘.*ifcfg-enp0s25‘
/etc/sysconfig/network-scripts/ifcfg-enp0s25

[[email protected] ~]# find /etc -regex ‘.*ifcfg-enp0s[0-9]+‘
/etc/sysconfig/network-scripts/ifcfg-enp0s25

==找到后处理的动作 ACTIONS: (默认动作-print)==

-print
-ls
-delete
-exec 后面跟自定义的shell命令
-ok 后面跟自定义的shell命令

[[email protected] ~]# find /etc -name "ifcfg*"
[[email protected] ~]# find /etc -name "ifcfg*" -print
[[email protected] ~]# find /etc -name "ifcfg*" -ls
[[email protected] ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp ;
[[email protected] ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp ;

[[email protected] ~]# find /etc -name "ifcfg*" -exec rm -rf {} ;
[[email protected] ~]# find /etc -name "ifcfg*" -delete

扩展知识:find结合xargs
[[email protected] ~]# find . -name "yang*.txt" |xargs rm -rf         
[[email protected] ~]# find /etc -name "ifcfg-eth0" |xargs -I {} cp -rf {} /var/tmp

find练习

1. 将/etc/中的所有目录(仅目录)复制到/tmp下,目录结构不变
# find /etc -type d -exec mkdir /tmp/{} ;


2. 将/etc目录复制到/var/tmp//var/tmp/etc中的所有目录设置权限777(仅目录)
    将/var/tmp/etc中所有文件权限设置为666
# cp -rf /etc /var/tmp/ 
# chmod -R a=rwX /var/tmp/etc/
或者
find /var/tmp/etc/ -type d -exec chmod 777 {} ;         //分号是找到一个设置一个权限
find /var/tmp/etc/ -type d -exec chmod 777 {} +        //加号是统一找到后设置权限
find /var/tmp/etc/ ! -type d -exec chmod 777 {} + 

3. 以下命令的区别是什么?
[[email protected] ~]# find /etc -name "ifcfg*" -exec rm -rf {} ;
[[email protected] ~]# find /etc -name "ifcfg*" -exec rm -rf {} +
[[email protected] ~]# mkdir dir1
[[email protected] ~]# touch dir1/file{1..20}

[[email protected] ~]# find /root/dir1 -name "file5"
[[email protected] ~]# find /root/dir1 ! -name "file5"

[[email protected] ~]# find /root/dir1 -name "file5" -o -name "file9" 
/root/dir1/file5
/root/dir1/file9

[[email protected] ~]# find /root/dir1 -name "file5" -o -name "file9" -ls
1466515    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file9

[[email protected] ~]# find /root/dir1 -name "file5" -ls  -o -name "file9" -ls
1466499    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file5
1466515    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file9

[[email protected] ~]# find /root/dir1 ( -name "file5" -o -name "file9" ) -ls
1466499    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file5
1466515    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file9

[[email protected] ~]# find /root/dir1 ( -name "file5" -o -name "file9" ) -exec rm -rvf {} ;
removed ‘/root/dir1/file5’
removed ‘/root/dir1/file9’

 locate

(查询的数据库: /var/lib/mlocate/mlocate.db)  

计划任务:每天自动更新数据库 /etc/cron.daily/mlocate.cron
手动更新数据库:updatedb

# locate ifcfg-eth0
# locate ifcfg-enp0s25

文件过滤 grep

 grep工具:行过滤

OPTIONS:
    -i: 不区分大小写
    -v: 查找不包含指定内容的行,反向选择
    -w: 按单词搜索
    -c: 统计匹配到的次数
    -n: 显示行号
    -r: 逐层遍历目录查找
    -A: 显示匹配行及前面多少行
    -B: 显示匹配行及后面多少行
    -C: 显示匹配行前后多少行
    --color=auto :可以将找到的关键词部分加上颜色的显示
    -l:只列出匹配的文件名
    -L:列出不匹配的文件名
    -e: 使用正则搜索
    ^key:以什么开头
    key$:以什么结尾

每次过滤出来的内容显示颜色:

vim ~/.bashrc
alias grep=grep --color=auto
source ~/.bashrc

 使用方法 >>参考

 

 

 

 

 

 

 



以上是关于Linux-常用命令的主要内容,如果未能解决你的问题,请参考以下文章

linux中怎么查看mysql数据库版本

Linux常用文件管理命令

markdown [Docker] Docker片段列表和命令#linux #docker #snippets

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

C#常用代码片段备忘

常用python日期日志获取内容循环的代码片段