前言:html
生產上有時須要根據指定內容查找相關文件,好比FastJson反序列化漏洞,經過'FastJson'關鍵字查找有無對應文件,若是有則進行整改。git
環境說明:github
主機名 | 操做系統版本 | ip | ansible version | 備註 |
---|---|---|---|---|
ansible | Centos 7.6.1810 | 172.27.34.51 | 2.9.9 | ansible管理服務器 |
ansible-awx | Centos 7.6.1810 | 172.27.34.50 | / | 被管服務器 |
[root@ansible-awx ~]# cd /opt [root@ansible-awx opt]# ls -alrt 總用量 12 drwx--x--x 4 root root 28 5月 21 13:50 containerd dr-xr-xr-x. 19 root root 250 7月 14 11:07 .. drwxr-xr-x 2 root root 38 8月 6 15:34 find1 drwxr-xr-x 2 root root 38 8月 6 15:35 find2 drwxr-xr-x 2 root root 38 8月 6 15:35 find3 -rw-r--r-- 1 root root 12 8月 6 15:37 test1.txt -rw-r--r-- 1 root root 12 8月 6 15:37 test2.txt -rw-r--r-- 1 root root 12 8月 6 15:37 .test3.txt drwxr-xr-x. 6 root root 115 8月 6 15:40 . [root@ansible-awx opt]# find . -path ./containerd -prune -o -type f |xargs grep error grep: ./containerd: 是一個目錄 ./find1/find1.txt:aaaerrorbbb ./find1/.a1.txt:aaaerrorbbb 匹配到二進制文件 ./find2/find2.txt ./find2/.a2.txt:aaaerrorbbb ./find3/find3.txt:aaaerrorbbb ./find3/.a3.txt:aaaerrorbbb ./test1.txt:aaaerrorbbb ./.test3.txt:aaaerrorbbb ./test2.txt:aaaerrorbbb [root@ansible-awx opt]# tail -n2 find2/find2.txt aaaerrorbbb [root@ansible-awx opt]# du -sm find2/* 201 find2/find2.txt [root@ansible-awx opt]# tree -a . ├── containerd │ ├── bin │ └── lib ├── find1 │ ├── .a1.txt │ └── find1.txt ├── find2 │ ├── .a2.txt │ └── find2.txt ├── find3 │ ├── .a3.txt │ └── find3.txt ├── test1.txt ├── test2.txt └── .test3.txt 6 directories, 9 files
在被管服務器test50的/opt目錄下構造測試數據,find一、find二、find3爲目錄,test1.txt、test2.txt爲文件,.test3.txt爲隱藏文件,3個find目錄都有兩個文件,一個txt文件和一個隱藏文件,這些文件都包含字符串'aaaerrorbbb',其中find2目錄的find2.txt大小爲201M。bash
[root@ansible roles]# ansible-galaxy init find - Role find was created successfully
[root@ansible ~]# cd /etc/ansible [root@ansible ansible]# more find.yaml --- - hosts: "{{ hostlist }}" gather_facts: no roles: - role: find
role名爲find,hosts列表需執行的時候指定。服務器
[root@ansible ansible]# more roles/find/tasks/main.yml --- # tasks file for find # author: loong576 - name: choose the directory find: paths: "{{ directory_path }}" recurse: no file_type: directory excludes: "{{ exclude_directory }}" register: find_directory - name: find in directory find: paths: "{{item.path}}" recurse: yes contains: "{{ file_contains }}" hidden: yes size: "{{ file_size }}" with_list: "{{find_directory.files}}" register: find_contains_in_directory - name: echo find file in directories debug: msg: "{% for i in item.files %} {{ i.path }} {% endfor %}" with_list: "{{find_contains_in_directory.results}}" when: item.matched != 0 - name: find in files find: path: "{{ file_path }}" file_type: file excludes: "{{ exclude_file }}" hidden: yes contains: "{{ file_contains }}" register: find_only_file - name: echo find file in files debug: msg: "{{item.path}}" with_list: "{{find_only_file.files}}"
指定路徑下目錄查找ide
首先選擇須要查找的指定路徑{{ directory_path }},這裏爲/opt,選擇的時候排除掉不須要的目錄{{ exclude_directory }};而後經過循環方式在選擇的目錄裏查找指定內容{{ file_contains }}並輸出查到的文件列表。測試
這裏的目錄指/opt下的find1和find2,find3被排除在外。操作系統
指定路徑下文件查找debug
查找指定路徑{{ directory_path }}下全部文件是否包含指定內容{{ file_contains }}並輸出文件列表,{{ exclude_file }}文件被排除在外。code
這裏的文件指test1.txt、.test3.txt,test2.txt被排除在外。
全部的隱藏文件默認被查找'hidden: yes'且找到的文件大小不能超過{{ file_size }}即100M
[root@ansible ansible]# more roles/find/defaults/main.yml --- # defaults file for find directory_path: /opt exclude_directory: find3 file_path: /opt file_contains: .*error.* exclude_file: test2.txt file_size: -100m
指定查找的內容爲帶有'error'的文件,指定的路徑爲/opt,排查的目錄爲find3,排除的文件爲test2.txt,全部查找的文件大小小於100m。
/opt下的目錄find1的文件find1.txt和隱藏文件.a1.txt被輸出;目錄find2的隱藏文件.a2.txt被輸出;/opt下的文件test1.txt和隱藏文件.test3.txt被輸出;被排除的目錄find3和被排除的文件test2.txt將不會被輸出;不知足大小要求的find2.txt也不會被輸出。
[root@ansible ~]# cd /etc/ansible/ [root@ansible ansible]# ansible-playbook find.yaml -e hostlist=test50
指定主機列表爲test50
結果符合預期
本文全部腳本和配置文件已上傳github:ansible-production-practice-3
更多請點擊:ansible系列文章