[TOC]
## 1. file
file 模塊可以幫助我們完成一些對文件的基本操作。比如,**創建文件或目錄**、**刪除文件或目錄**、**修改文件權限**等。
**設置文件的屬性相關選項如下:**
>### **path參數 :**
>
> 必須參數,用于指定要操作的文件或目錄,在之前版本的ansible中,使用dest參數或者name參數指定要操作的文件或目錄,為了兼容之前的版本,使用dest或name也可以。
> ### **state參數 :**
> 我們想要在遠程主機上創建/testdir/a/b目錄,那么則需要設置path=/testdir/a/b,但是,我們無法從”/testdir/a/b“這個路徑看出b是一個文件還是一個目錄,ansible也同樣無法單單從一個字符串就知道你要創建文件還是目錄,所以,我們需要通過state參數進行說明。
> --state值:
> 1)directory:指定要操作的目標是一個目錄。
> 2)touch:要操作的目標是一個文件
> 3)link:軟連接
> 4)hard:硬鏈接
> 5)absent:刪除
> ### **src參數 :**
> 當state設置為link或者hard時,表示我們想要創建一個軟鏈或者硬鏈,所以,我們必須指明軟鏈或硬鏈鏈接的哪個文件,通過src參數即可指定鏈接源。
> ### **force參數** :
> 當state=link的時候,可配合此參數強制創建鏈接文件,當force=yes時,表示強制創建鏈接文件。
> 不過強制創建鏈接文件分為三種情況。
> 情況一:當要創建的鏈接文件指向的源文件并不存在時,使用此參數,可以先強制創建出鏈接文件。
> 情況二:當要創建鏈接文件的目錄中已經存在與鏈接文件同名的文件時,將force設置為yes,會將同名文件覆蓋為鏈接文件,相當于刪除同名文件,創建鏈接文件。
> 情況三:當要創建鏈接文件的目錄中已經存在與鏈接文件同名的文件,并且鏈接文件指向的源文件也不存在,這時會強制替換同名文件為鏈接文件。
> ### **owner參數**
>
> 用于指定被操作文件的屬主,屬主對應的用戶必須在遠程主機中存在,否則會報錯。
> ### **group參數**
>
> 用于指定被操作文件的屬組,屬組對應的組必須在遠程主機中存在,否則會報錯。
> ### **mode參數:**
>
> 用于指定被操作文件的權限,比如,如果想要將文件權限設置為”rw-r-x---“,則可以使用mode=650進行設置,或者使用mode=0650,效果也是相同的。如果想要設置特殊權限,比如為二進制文件設置suid,則可以使用mode=4700。
> ### **recurse參數**:
>
> 當要操作的文件為目錄,將recurse設置為yes,可以遞歸的修改目錄中文件的屬性。
## 2.實例:
### 2.1 創建文件
```
[root@ansible-manager ~]# ansible ansible-demo3 -m file -a "path=/testdir/testfile1 state=touch"
ansible-demo3 | SUCCESS => {
"changed": true,
"dest": "/testdir/testfile1",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:default_t:s0",
"size": 8,
"state": "file",
"uid": 0
}
```
### 2.3 強制創建軟連接
在創建鏈接文件時,如果源文件不存在,或者鏈接文件與其他文件同名時,強制覆蓋同名文件或者創建鏈接文件,參考上述 force 參數的解釋。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m file -a "path=/testdir/linkfile3 state=link src=/testdir/sourcefile force=yes"
ansible-demo3 | SUCCESS => {
"changed": true,
"dest": "/testdir/linkfile3",
"src": "/testdir/sourcefile",
"state": "absent"
}
```
**返回的 state 為 absent,表示源文件不存在。**
### 2.4 刪除遠程機器上的指定文件或目錄。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m file -a "path=/testdir/testdir state=absent"
ansible-demo3 | SUCCESS => {
"changed": true,
"path": "/testdir/testdir",
"state": "absent"
}
```
### 2.5 用戶屬性
在創建文件或目錄的時候指定屬主,或者修改遠程主機上的文件或目錄的屬主。
```
ansible ansible-demo3 -m file -a "path=/testdir/abc state=touch owner=ding"
ansible ansible-demo3 -m file -a "path=/testdir/abc owner=ding"
ansible ansible-demo3 -m file -a "path=/testdir/abc state=directory owner=ding"
```
在創建文件或目錄的時候指定屬組,或者修改遠程主機上的文件或目錄的屬組。
```
ansible ansible-demo3 -m file -a "path=/testdir/abb state=touch group=ding"
ansible ansible-demo3 -m file -a "path=/testdir/abb group=ding"
ansible ansible-demo3 -m file -a "path=/testdir/abb state=directory group=ding"
```
在創建文件或目錄的時候指定權限,或者修改遠程主機上的文件或目錄的權限。
```
ansible ansible-demo3 -m file -a "path=/testdir/abb state=touch mode=0644"
ansible ansible-demo3 -m file -a "path=/testdir/abb mode=0644"
ansible ansible-demo3 -m file -a "path=/testdir/binfile mode=4700"
ansible ansible-demo3 -m file -a "path=/testdir/abb state=directory mode=0644"
```
當操作遠程主機中的目錄時,同時遞歸的將目錄中的文件的屬主屬組都設置為ding。
```
ansible ansible-demo3 -m file -a "path=/testdir/abd state=directory owner=ding group=ding recurse=yes"
```
- Linux
- 高級
- 殺毒
- 記一次中毒事件
- clamav查毒軟件
- 處理挖礦病毒
- 定時任務
- kill
- chattr文件保護
- 運行級別
- Linux啟動
- 文件加密
- ssh免密登錄
- .ssh
- 問題
- 腳本
- 阿里云域名解析
- yum源
- 時間同步
- keepalived實現高可用
- dos字符與unix字符
- 大文件上傳
- 基礎
- proc目錄
- 設置宋體
- 基礎命令_01
- 基礎命令_02
- SELinux
- 文件描述符
- 基礎命令_03
- awk
- 系統日志
- date命令
- bc命令
- lsof
- vim快捷鍵
- shell
- 循環控制
- expr
- 執行腳本的方式
- declare
- shell腳本
- 控制啟停腳本
- 數值計算
- centos
- 配置網絡
- 環境
- 灰度環境
- ansible
- 模塊
- 語法
- file模塊
- setup模塊
- ping模塊
- copy模塊
- command模塊
- shell模塊
- service模塊
- cron模塊
- yum模塊
- user 模塊
- group模塊
- 指定用戶
- playbook
- 實例
- ansible安裝
- Jenkins
- shell部署
- 導入已有項目的配置
- 執行shell
- tungsten數據同步
- 防火墻
- netfilter