iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
DevOps

不爆肝學習 Ansible 的短暫30天系列 第 5

Day05 – 透過 ad-hoc 修改設定檔

  • 分享至 

  • xImage
  •  

今日目標

  • 學會使用 copy module
  • 學會使用 lineinfile module 修改或新增特定行

兩種常見的改檔方式

  1. 透過 copy 直接覆蓋整份檔案
  2. 透過 lineinfile 僅修改檔案中的某一行

直接覆蓋設定檔

# 先創建一個 tmp.txt 檔案
echo "hello ansible world" > tmp.txt

# 透過 copy moduel 把檔案複製到遠端機器上的 /tmp
# 筆者比較喜歡用 yaml,所以這邊就直接使用 yaml 清單當 inventory (host.yml)
ansible all -i host.yml -m ansible.builtin.copy -a "src=tmp.txt dest=/tmp/ backup=yes"

💡 Tips:

  • dest 指到目錄時會以原檔名放進去 (例如:/tmp/tmp.txt)。
  • 想同時設定權限/擁有者,可加上 mode=0644 owner=root group=root
  • 加上 backup=yes 可在覆蓋前自動備份原檔。

修改某一行內容

# 確保檔案中有指定的一行,沒有則新增
ansible all -i host.yml -m ansible.builtin.lineinfile -a "path=/tmp/tmp.txt line='my name is jasper' state=present create=yes backup=yes"

如果你想「精準替換」既有的那一行 (例如開頭是 my name is ),可以用 regexp

ansible all -i host.yml -m ansible.builtin.lineinfile -a "path=/tmp/tmp.txt regexp='^my name is ' line='my name is jasper' create=yes backup=yes"

💡 Tips:Ansible 具備冪等性。相同指令重跑,若內容已經符合期待,結果會是 ok,有變更才會是 changed

作業練習時間

  1. 自己建立一個檔案,並用 copy 複製到遠端機器。
  2. lineinfile 幫剛剛那個檔案新增或更新一行文字。
  3. 加上 regexp 做精準替換,並觀察 ok/changed 的差異。

明日預告

明天我們來學學寫 Playbook,讓我們的操作更有條理、更好維護!


上一篇
Day04 – 透過 Ansible 安裝套件
下一篇
Day06 – 第一個 Playbook:安裝 btop
系列文
不爆肝學習 Ansible 的短暫30天7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言