文章目录
saltstack 模块使用
1.SaltStack常用模块之network
//network.active_tcp 返回所有活动的tcp连接
[root@master ~]# salt '*' network.active_tcp
master:
----------
0:
----------
local_addr:
192.168.200.142
local_port:
4505
remote_addr:
192.168.200.147
remote_port:
40678
1:
----------
local_addr:
192.168.200.142
local_port:
4505
remote_addr:
192.168.200.142
remote_port:
36912
2:
----------
local_addr:
192.168.200.142
local_port:
4505
remote_addr:
192.168.200.145
remote_port:
38076
3:
----------
local_addr:
192.168.200.142
local_port:
4505
remote_addr:
192.168.200.146
remote_port:
50226
4:
----------
local_addr:
192.168.200.142
local_port:
36912
remote_addr:
192.168.200.142
remote_port:
4505
5:
----------
local_addr:
192.168.200.142
local_port:
22
remote_addr:
192.168.200.1
remote_port:
56530
//network.calc_net 通过IP和子网掩码计算出网段
[root@master ~]# salt '192.168.200.147' network.calc_net 192.168.200.147 255.255.255.255
192.168.200.147:
//network.connect 测试minion至某一台服务器的网络是否连通
[root@master ~]# salt '*' network.connect baidu.com 80
master:
----------
comment:
Successfully connected to baidu.com (220.181.38.148) on tcp port 80
result:
True
192.168.200.147:
----------
comment:
Successfully connected to baidu.com (220.181.38.148) on tcp port 80
result:
True
//network.default_route 查看默认路由
[root@master ~]# salt '*' network.default_route
master:
|_
----------
addr_family:
inet
destination:
0.0.0.0
flags:
UG
gateway:
192.168.200.2
interface:
ens160
netmask:
0.0.0.0
//network.get_fqdn 查看主机的fqdn(完全限定域名)
[root@master ~]# salt '*' network.get_fqdn
master:
master
192.168.200.147:
node1
192.168.200.145:
node2
192.168.200.146:
node3
//network.get_route 查询到一个目标网络的路由信息
[root@master ~]# salt '*' network.get_route 192.168.200.200
master:
----------
destination:
192.168.200.200
gateway:
None
interface:
ens160
source:
192.168.200.142
//network.hw_addr 返回指定网卡的MAC地址
[root@master ~]# salt '*' network.hw_addr ens160
master:
00:0c:29:c8:a7:39
192.168.200.146:
00:0c:29:2b:b2:f4
192.168.200.145:
00:0c:29:88:82:3d
192.168.200.147:
00:0c:29:da:ff:45
//network.ifacestartswith 从特定CIDR检索接口名称
[root@master ~]# salt '*' network.ifacestartswith 192.168
192.168.200.147:
- ens160
192.168.200.146:
- ens160
192.168.200.145:
- ens160
master:
- ens160
//network.in_subnet 判断当前主机是否在某一个网段内
[root@master ~]# salt '*' network.in_subnet 192.168.200.0/24
master:
True
192.168.200.146:
True
192.168.200.147:
True
192.168.200.145:
True
//network.interface 返回指定网卡的信息
[root@master ~]# salt '*' network.interface ens160
192.168.200.146:
|_
----------
address:
192.168.200.146
broadcast:
192.168.200.255
label:
ens160
netmask:
255.255.255.0
......
//network.interface_ip 返回指定网卡的IP地址
[root@master ~]# salt '*' network.interface_ip ens160
master:
192.168.200.142
192.168.200.146:
192.168.200.146
192.168.200.147:
192.168.200.147
192.168.200.145:
192.168.200.145
// network.interfaces 返回当前系统中所有的网卡信息
[root@master ~]# salt '*' network.interfaces
master:
----------
ens160:
----------
hwaddr:
00:0c:29:c8:a7:39
inet:
|_
----------
address:
192.168.200.142
broadcast:
192.168.200.255
label:
ens160
netmask:
255.255.255.0
inet6:
|_
----------
address:
fe80::4f7c:18b3:7c7c:c8bf
prefixlen:
64
scope:
link
up:
True
lo:
----------
hwaddr:
00:00:00:00:00:00
inet:
|_
----------
address:
127.0.0.1
broadcast:
None
label:
lo
netmask:
255.0.0.0
inet6:
|_
----------
address:
::1
prefixlen:
128
scope:
host
up:
True
//network.ip_addrs返回一个IPv4的地址列表该函数将会忽略掉127.0.0.1的地址
[root@master ~]# salt '*' network.ip_addrs
master:
- 192.168.200.142
192.168.200.147:
- 192.168.200.147
192.168.200.146:
- 192.168.200.146
192.168.200.145:
- 192.168.200.145
//network.netstat 返回所有打开的端口和状态
[root@master ~]# salt '*' network.netstat
192.168.200.147:
|_
----------
inode:
199903
local-address:
192.168.200.147%ens160:68
program:
NetworkManager
proto:
udp
recv-q:
0
remote-address:
192.168.200.254:67
send-q:
0
user:
0
.....
// network.ping 使用ping命令测试到某主机的连通性
[root@master ~]# salt '*' network.ping baidu.com
192.168.200.146:
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=128 time=56.7 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=128 time=46.4 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=128 time=60.0 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=4 ttl=128 time=40.6 ms
//network.reverse_ip 返回一个指定的IP地址的反向地址
[root@master ~]# salt '*' network.reverse_ip 192.168.200.147
master:
147.200.168.192.in-addr.arpa
192.168.200.146:
147.200.168.192.in-addr.arpa
192.168.200.147:
147.200.168.192.in-addr.arpa
192.168.200.145:
147.200.168.192.in-addr.arpa
2.SaltStack常用模块之service
// service.available 判断指定的服务是否可用
[root@master ~]# salt '*' service.available nginx
master:
False
192.168.200.146:
False
192.168.200.147:
True
192.168.200.145:
False
//service.get_all 获取所有正在运行的服务
[root@master ~]# salt '*' service.get_all
master:
- NetworkManager
- NetworkManager-dispatcher
- NetworkManager-wait-online
- auditd
- autovt@
- basic.target
- blk-availability
- bluetooth.target
- chrony-dnssrv@
- chrony-dnssrv@.timer
- chrony-wait
- chronyd
- console-getty
- container-getty@
- cpupower
- crond
- cryptsetup-pre.target
- cryptsetup.target
- ctrl-alt-del.target
- dbus
- dbus-org.freedesktop.hostname1
- dbus-org.freedesktop.locale1
- dbus-org.freedesktop.login1
- dbus-org.freedesktop.nm-dispatcher
- dbus-org.freedesktop.portable1
- dbus-org.freedesktop.timedate1
- dbus.socket
- debug-shell
- default.target
- dev-hugepages.mount
- dev-mqueue.mount
- dm-event
- dm-event.socket
- dnf-makecache
- dnf-makecache.timer
- dracut-cmdline
- dracut-initqueue
- dracut-mount
- dracut-pre-mount
- dracut-pre-pivot
- dracut-pre-trigger
- dracut-pre-udev
- dracut-shutdown
- ebtables
- emergency
- emergency.target
- exit.target
- final.target
- firewalld
- fstrim
- fstrim.timer
- getty-pre.target
- getty.target
- getty@
- graphical.target
- grub-boot-indeterminate
- halt-local
- halt.target
- hibernate.target
- hybrid-sleep.target
- import-state
- initrd-cleanup
- initrd-fs.target
- initrd-parse-etc
- initrd-root-device.target
- initrd-root-fs.target
- initrd-switch-root
- initrd-switch-root.target
- initrd-udevadm-cleanup-db
- initrd.target
- iprdump
- iprinit
- iprupdate
- iprutils.target
- irqbalance
- kdump
- kexec.target
- kmod-static-nodes
- ldconfig
- loadmodules
- local-fs-pre.target
- local-fs.target
- lvm2-lvmpolld
- lvm2-lvmpolld.socket
- lvm2-monitor
- lvm2-pvscan@
- man-db-cache-update
- mariadb
- mariadb@
- messagebus
- microcode
- multi-user.target
- mysql
- mysqld
- network-online.target
- network-pre.target
- network.target
- nftables
- nis-domainname
- nss-lookup.target
- nss-user-lookup.target
- paths.target
- plymouth-halt
- plymouth-kexec
- plymouth-poweroff
- plymouth-quit
- plymouth-quit-wait
- plymouth-read-write
- plymouth-reboot
- plymouth-start
- plymouth-switch-root
- polkit
- poweroff.target
- printer.target
- proc-sys-fs-binfmt_misc.automount
- proc-sys-fs-binfmt_misc.mount
- quotaon
- rc-local
- rdisc
- reboot.target
- remote-cryptsetup.target
- remote-fs-pre.target
- remote-fs.target
- rescue
- rescue.target
- rhnsd
- rhsm
- rhsm-facts
- rhsmcertd
- rngd
- rngd-wake-threshold
- rpcbind.target
- rsyslog
- runlevel0.target
- runlevel1.target
- runlevel2.target
- runlevel3.target
- runlevel4.target
- runlevel5.target
- runlevel6.target
- salt-master
- salt-minion
- salt-proxy@
- selinux-autorelabel
- selinux-autorelabel-mark
- selinux-autorelabel.target
- serial-getty@
- shutdown.target
- sigpwr.target
- sleep.target
- slices.target
- smartcard.target
- sockets.target
- sound.target
- sshd
- sshd-keygen.target
- sshd-keygen@
- sshd.socket
- sshd@
- sssd
- sssd-autofs
- sssd-autofs.socket
- sssd-kcm
- sssd-kcm.socket
- sssd-nss
- sssd-nss.socket
- sssd-pac
- sssd-pac.socket
- sssd-pam
- sssd-pam-priv.socket
- sssd-pam.socket
- sssd-ssh
- sssd-ssh.socket
- sssd-sudo
- sssd-sudo.socket
- suspend-then-hibernate.target
- suspend.target
- swap.target
- sys-fs-fuse-connections.mount
- sys-kernel-config.mount
- sys-kernel-debug.mount
- sysinit.target
- syslog
- syslog.socket
- system-update-cleanup
- system-update-pre.target
- system-update.target
- systemd-ask-password-console
- systemd-ask-password-console.path
- systemd-ask-password-plymouth
- systemd-ask-password-plymouth.path
- systemd-ask-password-wall
- systemd-ask-password-wall.path
- systemd-backlight@
- systemd-binfmt
- systemd-coredump.socket
- systemd-coredump@
- systemd-exit
- systemd-firstboot
- systemd-fsck-root
- systemd-fsck@
- systemd-halt
- systemd-hibernate
- systemd-hibernate-resume@
- systemd-hostnamed
- systemd-hwdb-update
- systemd-hybrid-sleep
- systemd-initctl
- systemd-initctl.socket
- systemd-journal-catalog-update
- systemd-journal-flush
- systemd-journald
- systemd-journald-audit.socket
- systemd-journald-dev-log.socket
- systemd-journald.socket
- systemd-kexec
- systemd-localed
- systemd-logind
- systemd-machine-id-commit
- systemd-modules-load
- systemd-portabled
- systemd-poweroff
- systemd-quotacheck
- systemd-random-seed
- systemd-reboot
- systemd-remount-fs
- systemd-resolved
- systemd-rfkill
- systemd-rfkill.socket
- systemd-suspend
- systemd-suspend-then-hibernate
- systemd-sysctl
- systemd-sysusers
- systemd-timedated
- systemd-tmpfiles-clean
- systemd-tmpfiles-clean.timer
- systemd-tmpfiles-setup
- systemd-tmpfiles-setup-dev
- systemd-udev-settle
- systemd-udev-trigger
- systemd-udevd
- systemd-udevd-control.socket
- systemd-udevd-kernel.socket
- systemd-update-done
- systemd-update-utmp
- systemd-update-utmp-runlevel
- systemd-user-sessions
- systemd-vconsole-setup
- systemd-volatile-root
- tcsd
- teamd@
- time-sync.target
- timedatex
- timers.target
- tmp.mount
- tuned
- umount.target
- unbound-anchor
- unbound-anchor.timer
- user-runtime-dir@
- user@
- vgauthd
- vmtoolsd
.....
// service.disabled 检查指定服务是否开机不自动启动
[root@master ~]# salt '*' service.disabled nginx
master:
True
192.168.200.146:
True
192.168.200.147:
False
192.168.200.145:
True
//service.enabled 检查指定服务是否开机自动启动
[root@master ~]# salt '*' service.enabled nginx
master:
False
192.168.200.147:
True
192.168.200.145:
False
192.168.200.146:
False
//service.disable 设置指定服务开机不自动启动
[root@master ~]# salt '*' service.disable nginx
master:
False
192.168.200.145:
False
192.168.200.146:
False
192.168.200.147:
True
[root@master ~]# salt '*' service.enabled nginx
master:
False
192.168.200.147:
False
192.168.200.145:
False
192.168.200.146:
False
//service.enable 设置指定服务开机自动启动
[root@master ~]# salt '*' service.enable nginx
192.168.200.147:
True
[root@master ~]# salt '*' service.enabled nginx
master:
False
192.168.200.146:
False
192.168.200.145:
False
192.168.200.147:
True
//service.reload 重新加载指定服务
[root@master ~]# salt '*' service.reload nginx
192.168.200.147:
True
//service.start 启动指定服务
[root@master ~]# salt '*' service.start nginx
192.168.200.147:
True
//service.restart 重启指定服务
[root@master ~]# salt '*' service.restart nginx
192.168.200.147:
True
//service.status 查看指定服务的状态
[root@master ~]# salt '*' service.status nginx
192.168.200.145:
False
master:
False
192.168.200.147:
True
192.168.200.146:
False
3.SaltStack常用模块之pkg
//pkg.download 只下载软件包但不安装
此功能将会下载指定的软件包,但是需要在minion端安装yum-utils,可以使用 cmd.run 进行远程安装
[root@master ~]# salt '*' pkg.download wget
192.168.200.146:
----------
wget:
/var/cache/yum/packages/wget-1.19.5-10.el8.x86_64.rpm
192.168.200.145:
----------
wget:
/var/cache/yum/packages/wget-1.19.5-10.el8.x86_64.rpm
192.168.200.147:
----------
wget:
/var/cache/yum/packages/wget-1.19.5-10.el8.x86_64.rpm
master:
----------
wget:
/var/cache/yum/packages/wget-1.19.5-10.el8.x86_64.rpm
// pkg.file_list 列出指定包或系统中已安装的所有包的文件
[root@master ~]# salt '*' pkg.file_list nginx
192.168.200.147:
----------
errors:
files:
- /etc/logrotate.d/nginx
- /etc/nginx/fastcgi.conf
- /etc/nginx/fastcgi.conf.default
- /etc/nginx/fastcgi_params
- /etc/nginx/fastcgi_params.default
- /etc/nginx/koi-utf
- /etc/nginx/koi-win
- /etc/nginx/mime.types
- /etc/nginx/mime.types.default
- /etc/nginx/nginx.conf
- /etc/nginx/nginx.conf.default
- /etc/nginx/scgi_params
- /etc/nginx/scgi_params.default
- /etc/nginx/uwsgi_params
- /etc/nginx/uwsgi_params.default
- /etc/nginx/win-utf
- /usr/bin/nginx-upgrade
- /usr/lib/.build-id
- /usr/lib/.build-id/2d
- /usr/lib/.build-id/2d/da6018ae12edb856ad3d2cf61bf586b6b4873c
- /usr/lib/systemd/system/nginx.service
- /usr/lib64/nginx/modules
- /usr/sbin/nginx
- /usr/share/doc/nginx
- /usr/share/doc/nginx/CHANGES
- /usr/share/doc/nginx/README
- /usr/share/doc/nginx/README.dynamic
- /usr/share/licenses/nginx
- /usr/share/licenses/nginx/LICENSE
- /usr/share/man/man3/nginx.3pm.gz
- /usr/share/man/man8/nginx-upgrade.8.gz
- /usr/share/man/man8/nginx.8.gz
- /usr/share/nginx/html/404.html
- /usr/share/nginx/html/50x.html
- /usr/share/nginx/html/index.html
- /usr/share/nginx/html/nginx-logo.png
- /usr/share/nginx/html/poweredby.png
- /usr/share/vim/vimfiles/ftdetect/nginx.vim
- /usr/share/vim/vimfiles/indent/nginx.vim
- /usr/share/vim/vimfiles/syntax/nginx.vim
- /var/lib/nginx
- /var/lib/nginx/tmp
- /var/log/nginx
//当不提供参数时,将会列出当前系统中所有已安装软件的文件列表
[root@master ~]# salt '*' pkg.file_list
192.168.200.145:
----------
errors:
files:
VALUE_TRIMMED
master:
----------
errors:
files:
VALUE_TRIMMED
192.168.200.147:
----------
errors:
files:
VALUE_TRIMMED
192.168.200.146:
----------
errors:
files:
VALUE_TRIMMED
//pkg.group_info 查看包组的信息
[root@master ~]# salt '*' pkg.group_info 'Development Tools'
192.168.200.146:
----------
conditional:
default:
- asciidoc
- byacc
- ctags
- diffstat
- elfutils-libelf-devel
- git
- intltool
- jna
- ltrace
- patchutils
- perl-Fedora-VSP
- perl-Sys-Syslog
- perl-generators
- pesign
- source-highlight
- systemtap
- valgrind
- valgrind-devel
description:
A basic development environment.
group:
Development Tools
id:
None
mandatory:
- autoconf
- automake
- binutils
- bison
- flex
- gcc
- gcc-c++
- gdb
- glibc-devel
- libtool
- make
- pkgconf
- pkgconf-m4
- pkgconf-pkg-config
- redhat-rpm-config
- rpm-build
- rpm-sign
- strace
optional:
- cmake
- expect
- rpmdevtools
- rpmlint
type:
package group
//pkg.group_list 列出系统中所有的包组
[root@master ~]# salt '*' pkg.group_list
192.168.200.146:
----------
available:
- Conflicts BaseOS
- Dial-up Networking Support
- Hardware Monitoring Utilities
- Hardware Support
- Large Systems Performance
- Legacy UNIX Compatibility
- Python Web
- Server product core
- Windows File Server
- Additional Development
- Anaconda tools
- Backup Client
- Base
- base-x
- Conflicts AppStream
- Container Management
- Debugging Tools
- Desktop Debugging and Performance Tools
- Development Tools
- .NET Core Development
- File and Storage Server
- Fonts
- FTP Server
- GNOME Applications
- GNOME
- Graphical Administration Tools
- Graphics Creation Tools
- Guest Agents
- Guest Desktop Agents
- Headless Management
- Infiniband Support
- Input Methods
- Internet Applications
- Internet Browser
- Java Platform
- Legacy X Window System Compatibility
- Mail Server
- Mainframe Access
- Multimedia
- Network File System Client
- Network Servers
- Networking Tools
- Common NetworkManager submodules
- Office Suite and Productivity
- Atomic Host ostree support
- Performance Tools
- Platform Development
- KVM platform specific packages
- Hyper-v platform specific packages
- Printing Client
- Remote Desktop Clients
- Remote Management for Linux
- RPM Development Tools
- Scientific Support
- Security Tools
- Smart Card Support
- Standard
- System Tools
- TeX formatting system
- Virtualization Client
- Virtualization Hypervisor
- Virtualization Platform
- Virtualization Tools
- Basic Web Server
- Workstation product core
available environments:
- Server with GUI
- Server
- Workstation
- Custom Operating System
- Virtualization Host
available languages:
----------
installed:
- Core
- VMware platform specific packages
installed environments:
- Minimal Install
//pkg.install安装软件
[root@master ~]# salt '*' pkg.install nginx
192.168.200.147:
----------
master:
----------
dejavu-fonts-common:
----------
new:
2.35-7.el8
old:
dejavu-sans-fonts:
----------
new:
2.35-7.el8
old:
fontconfig:
----------
new:
2.13.1-3.el8
old:
fontpackages-filesystem:
----------
new:
1.44-22.el8
old:
gd:
----------
new:
2.2.5-7.el8
old:
jbigkit-libs:
----------
new:
2.1-14.el8
old:
libX11:
----------
new:
1.6.8-4.el8
old:
libX11-common:
----------
new:
1.6.8-4.el8
old:
libXau:
----------
new:
1.0.9-3.el8
old:
libXpm:
----------
new:
3.5.12-8.el8
old:
libjpeg-turbo:
----------
new:
1.5.3-10.el8
old:
libtiff:
----------
new:
4.0.9-18.el8
old:
libwebp:
----------
new:
1.0.0-3.el8_4
old:
libxcb:
----------
new:
1.13.1-1.el8
old:
nginx:
----------
new:
1:1.14.1-9.module_el8.0.0+184+e34fea82
old:
nginx-all-modules:
----------
new:
1:1.14.1-9.module_el8.0.0+184+e34fea82
old:
nginx-filesystem:
----------
new:
1:1.14.1-9.module_el8.0.0+184+e34fea82
old:
nginx-mod-http-image-filter:
----------
new:
1:1.14.1-9.module_el8.0.0+184+e34fea82
old:
nginx-mod-http-perl:
----------
new:
1:1.14.1-9.module_el8.0.0+184+e34fea82
old:
nginx-mod-http-xslt-filter:
----------
new:
1:1.14.1-9.module_el8.0.0+184+e34fea82
old:
nginx-mod-mail:
----------
new:
1:1.14.1-9.module_el8.0.0+184+e34fea82
old:
nginx-mod-stream:
----------
new:
1:1.14.1-9.module_el8.0.0+184+e34fea82
old:
//pkg.list_downloaded 列出已下载到本地的软件包
192.168.200.147:
----------
apr:
----------
1.6.3-11.el8:
----------
creation_date_time:
2021-07-18T03:17:23
creation_date_time_t:
1626592643
path:
/var/cache/dnf/AppStream-a5e033d33ad24141/packages/apr-1.6.3-11.el8.x86_64.rpm
size:
127676
apr-devel:
----------
1.6.3-11.el8:
----------
creation_date_time:
2021-07-18T03:17:56
creation_date_time_t:
1626592676
path:
/var/cache/dnf/AppStream-a5e033d33ad24141/packages/apr-devel-1.6.3-11.el8.x86_64.rpm
size:
251812
apr-util:
----------
1.6.1-6.el8:
----------
creation_date_time:
2021-07-18T03:17:23
creation_date_time_t:
1626592643
path:
/var/cache/dnf/AppStream-a5e033d33ad24141/packages/apr-util-1.6.1-6.el8.x86_64.rpm
size:
107760
apr-util-bdb:
----------
1.6.1-6.el8:
----------
creation_date_time:
2021-07-18T03:17:23
creation_date_time_t:
1626592643
path:
/var/cache/dnf/AppStream-a5e033d33ad24141/packages/apr-util-bdb-1.6.1-6.el8.x86_64.rpm
size:
25120
apr-util-devel:
----------
1.6.1-6.el8:
----------
creation_date_time:
2021-07-18T03:17:56
creation_date_time_t:
1626592676
path:
/var/cache/dnf/AppStream-a5e033d33ad24141/packages/apr-util-devel-1.6.1-6.el8.x86_64.rpm
size:
87848
......
//pkg.list_pkgs以字典的方式列出当前已安装的软件包
[root@master ~]# salt '*' pkg.list_pkgs
master:
----------
NetworkManager:
1:1.22.8-4.el8
NetworkManager-libnm:
1:1.22.8-4.el8
NetworkManager-team:
1:1.22.8-4.el8
NetworkManager-tui:
1:1.22.8-4.el8
acl:
2.2.53-1.el8
ansible:
2.9.23-1.el8
audit:
3.0-0.17.20191104git1c2f876.el8
audit-libs:
3.0-0.17.20191104git1c2f876.el8
authselect:
1.1-2.el8
authselect-libs:
.....
//pkg.owner 列出指定文件是由哪个包提供的
[root@master ~]# salt '*' pkg.owner /usr/share/nginx
192.168.200.147:
nginx-filesystem
master:
nginx-filesystem
192.168.200.145:
nginx-filesystem
192.168.200.146:
nginx-filesystem
// pkg.remove 卸载指定软件
[root@master ~]# salt '*' pkg.remove nginx
master:
----------
dejavu-fonts-common:
----------
new:
old:
2.35-7.el8
dejavu-sans-fonts:
----------
new:
old:
2.35-7.el8
fontconfig:
----------
new:
old:
2.13.1-3.el8
fontpackages-filesystem:
----------
new:
old:
1.44-22.el8
gd:
----------
new:
old:
2.2.5-7.el8
jbigkit-libs:
----------
new:
old:
2.1-14.el8
libX11:
----------
new:
old:
1.6.8-4.el8
libX11-common:
----------
new:
old:
1.6.8-4.el8
libXau:
----------
new:
old:
1.0.9-3.el8
libXpm:
----------
new:
old:
3.5.12-8.el8
libjpeg-turbo:
----------
new:
old:
1.5.3-10.el8
libtiff:
----------
new:
old:
4.0.9-18.el8
libwebp:
----------
new:
old:
1.0.0-3.el8_4
libxcb:
----------
new:
old:
1.13.1-1.el8
nginx:
----------
new:
old:
1:1.14.1-9.module_el8.0.0+184+e34fea82
nginx-all-modules:
----------
new:
old:
1:1.14.1-9.module_el8.0.0+184+e34fea82
nginx-filesystem:
----------
new:
old:
1:1.14.1-9.module_el8.0.0+184+e34fea82
nginx-mod-http-image-filter:
----------
new:
old:
1:1.14.1-9.module_el8.0.0+184+e34fea82
nginx-mod-http-perl:
----------
new:
old:
1:1.14.1-9.module_el8.0.0+184+e34fea82
nginx-mod-http-xslt-filter:
----------
new:
old:
1:1.14.1-9.module_el8.0.0+184+e34fea82
nginx-mod-mail:
----------
new:
old:
1:1.14.1-9.module_el8.0.0+184+e34fea82
nginx-mod-stream:
----------
new:
old:
1:1.14.1-9.module_el8.0.0+184+e34fea82
//若要卸载多个文件,中间需要用逗号隔开
//pkg.upgrade 升级系统中所有的软件包或升级指定的软件包
[root@master ~]# salt '*' pkg.upgrade name=openssl
192.168.200.145:
----------
openssl:
----------
new:
1:1.1.1g-15.el8_3
old:
1:1.1.1c-15.el8
openssl-libs:
----------
new:
1:1.1.1g-15.el8_3
old:
1:1.1.1c-15.el8
......
//若想升级系统中所有的软件包则把 name 参数去掉即可
4.SaltStack常用模块之state
//state.show_highstate 显示当前系统中有哪些高级状态
[root@master ~]# salt '*' state.show_highstate
192.168.200.146:
----------
mariadb-install:
----------
__env__:
base
__sls__:
database.mariadb.install
pkg:
|_
----------
name:
mariadb-server
- installed
|_
----------
order:
10000
mariadb-service:
----------
__env__:
base
__sls__:
database.mariadb.install
service:
|_
----------
name:
mariadb
|_
----------
enable:
True
- running
|_
----------
order:
10001
......
//state.highstate 执行高级状态
[root@master ~]# salt '*' state.highstate
192.168.200.146:
----------
ID: mariadb-install
Function: pkg.installed
Name: mariadb-server
Result: True
Comment: All specified packages are already installed
Started: 13:59:13.219530
Duration: 1248.663 ms
Changes:
----------
ID: mariadb-service
Function: service.running
Name: mariadb
Result: True
Comment: The service mariadb is already running
Started: 13:59:14.477970
Duration: 95.812 ms
Changes:
Summary for 192.168.200.146
------------
Succeeded: 2
Failed: 0
------------
Total states run: 2
Total run time: 1.344 s
//state.show_state_usage 显示当前系统中的高级状态执行情况
[root@master ~]# salt '*' state.show_state_usage
master:
----------
base:
----------
count_all:
3
count_unused:
2
count_used:
1
unused:
- top
- web.nginx.install
used:
- database.mariadb.install
dev:
----------
count_all:
0
count_unused:
0
count_used:
0
unused:
used:
prod:
----------
count_all:
0
count_unused:
0
count_used:
0
unused:
used:
test:
----------
count_all:
0
count_unused:
0
count_used:
0
unused:
used:
.....
//state.show_top 返回minion将用于highstate的顶级数据
[root@master ~]# salt '*' state.show_top
192.168.200.145:
----------
base:
- database.mariadb.install
master:
----------
base:
- database.mariadb.install
192.168.200.147:
----------
base:
- web.nginx.install
- database.mariadb.install
// state.top 执行指定的top file,而不是默认的
[root@master ~]# salt '*' state.top top.sls
192.168.200.145:
----------
ID: mariadb-install
Function: pkg.installed
Name: mariadb-server
Result: True
Comment: All specified packages are already installed
Started: 14:18:09.357470
Duration: 833.239 ms
Changes:
----------
ID: mariadb-service
Function: service.running
Name: mariadb
Result: True
Comment: The service mariadb is already running
Started: 14:18:10.192903
Duration: 56.062 ms
Changes:
Summary for 192.168.200.145
------------
Succeeded: 2
Failed: 0
------------
Total states run: 2
Total run time: 889.301 ms
master:
----------
ID: mariadb-install
Function: pkg.installed
Name: mariadb-server
Result: True
Comment: All specified packages are already installed
Started: 02:18:10.223026
Duration: 694.787 ms
Changes:
----------
ID: mariadb-service
Function: service.running
Name: mariadb
Result: True
Comment: The service mariadb is already running
Started: 02:18:10.919759
Duration: 43.615 ms
Changes:
Summary for master
------------
Succeeded: 2
Failed: 0
------------
Total states run: 2
Total run time: 738.402 ms
//state.show_sls 显示 master 上特定sls或sls文件列表中的状态数据
[root@master ~]# salt '*' state.show_sls web.nginx.install
192.168.200.147:
----------
nginx-install:
----------
__env__:
base
__sls__:
web.nginx.install
pkg:
|_
----------
name:
httpd
- installed
|_
----------
order:
10000
nginx-service:
----------
__env__:
base
__sls__:
web.nginx.install
service:
|_
----------
name:
httpd
|_
----------
enable:
True
- running
|_
----------
order:
10001
5.SaltStack常用模块之user
//语法
CLI Example:
salt '*' user.add name <uid> <gid> <groups> <home> <shell>
//创建一个用户
[root@master ~]# salt '*' user.add name=xym
master:
True
192.168.200.145:
True
192.168.200.147:
True
//查看
[root@master ~]# salt '*' cmd.run 'id xym'
master:
uid=1000(xym) gid=1000(xym) groups=1000(xym)
192.168.200.147:
uid=1000(xym) gid=1000(xym) groups=1000(xym)
192.168.200.145:
uid=1000(xym) gid=1000(xym) groups=1000(xym)
//更改用户的全名
[root@master ~]# salt '*' user.chfullname xym 'zzz'
master:
True
192.168.200.147:
True
192.168.200.145:
True
//更改GID(前提是要有这个GID的组)
[root@master ~]# salt '*' user.chgid 'xym' 777
master:
True
192.168.200.147:
True
192.168.200.145:
True
//更改UID
[root@master ~]# salt '*' user.chuid xym 777
master:
True
192.168.200.147:
True
192.168.200.145:
True
//添加附属组(xx是我新创的组)
[root@master ~]# salt '*' user.chgroups xym root,xx Ture
192.168.200.147:
True
master:
True
192.168.200.145:
True
[root@master ~]# salt '*' cmd.run 'id xym '
master:
uid=777(xym) gid=777(cl) groups=777(cl),1001(xx),0(root)
192.168.200.147:
uid=777(xym) gid=777(cl) groups=777(cl),1001(xx),0(root)
192.168.200.145:
uid=777(xym) gid=777(cl) groups=777(cl),1001(xx),0(root)
//更改用户的家居目录,如果旧主页目录存在,则通过 True 将文件移动到新家庭目录。
[root@master ~]# salt '*' user.chhome xym /home/users/xym True
master:
True
192.168.200.147:
True
192.168.200.145:
True
//修改用户的默认shell
[root@master ~]# salt '*' user.chshell xym /bin/xym
master:
True
192.168.200.147:
True
192.168.200.145:
True
//返回指定用户所属的组列表
[root@master ~]# salt '*' user.list_groups xym
master:
- cl
- root
- xx
192.168.200.145:
- cl
- root
- xx
192.168.200.147:
- cl
- root
- xx
//返回所有用户的列表
[root@master ~]# salt '*' user.list_users
master:
- adm
- bin
- chrony
- daemon
- dbus
- ftp
- games
- halt
- lp
- mail
- mysql
- nginx
- nobody
- operator
- polkitd
- rngd
- root
- shutdown
- sshd
- sssd
- sync
- systemd-coredump
- systemd-resolve
- tss
- unbound
- xym
.....
//修改命名用户的用户名
[root@master ~]# salt '*' user.rename xym zzz
master:
False
192.168.200.147:
False
192.168.200.145:
False
[root@master ~]# salt '*' cmd.run 'id zzz '
192.168.200.147:
uid=777(zzz) gid=777(cl) groups=777(cl),1001(xx),0(root)
master:
uid=777(zzz) gid=777(cl) groups=777(cl),1001(xx),0(root)
192.168.200.145:
uid=777(zzz) gid=777(cl) groups=777(cl),1001(xx),0(root)
//返回用户信息
[root@master ~]# salt '*' user.info zzz
master:
----------
fullname:
zzz
gid:
777
groups:
- cl
- root
- xx
home:
/home/users/xym
homephone:
name:
zzz
other:
passwd:
x
roomnumber:
shell:
/bin/xym
uid:
777
workphone:
192.168.200.147:
----------
fullname:
zzz
gid:
777
groups:
- cl
- root
- xx
home:
/home/users/xym
homephone:
name:
zzz
other:
passwd:
x
roomnumber:
shell:
/bin/xym
uid:
777
workphone:
192.168.200.145:
----------
fullname:
zzz
gid:
777
groups:
- cl
- root
- xx
home:
/home/users/xym
homephone:
name:
zzz
other:
passwd:
x
roomnumber:
shell:
/bin/xym
uid:
777
workphone:
//删除用户
[root@master ~]# salt '*' user.delete zzz remove=True force=True(暴力删除)
master:
True
192.168.200.147:
True
192.168.200.145:
True
6.SaltStack常用模块之salt-cp
//拷贝单个文件到目标主机的/usr/src目录下
[root@master ~]# touch {xxx,ccc,zzz}
[root@master ~]# salt '*' cmd.run 'ls /root/'
master:
anaconda-ks.cfg
ccc
xxx
zzz
192.168.200.147:
anaconda-ks.cfg
192.168.200.145:
anaconda-ks.cfg
[root@master ~]# salt-cp '*' /root/xxx /root/
192.168.200.145:
----------
/root/xxx:
True
192.168.200.147:
----------
/root/xxx:
True
master:
----------
/root/xxx:
True
[root@master ~]# salt '*' cmd.run 'ls /root/'
master:
anaconda-ks.cfg
ccc
xxx
zzz
192.168.200.147:
anaconda-ks.cfg
xxx
192.168.200.145:
anaconda-ks.cfg
xxx
//拷贝多个文件到目标主机的/usr/src目录下
[root@master ~]# salt-cp '*' /root/zzz /root/ccc /root/
192.168.200.145:
----------
/root/ccc:
True
/root/zzz:
True
192.168.200.147:
----------
/root/ccc:
True
/root/zzz:
True
master:
----------
/root/ccc:
True
/root/zzz:
True
[root@master ~]# salt '*' cmd.run 'ls /root/'
master:
anaconda-ks.cfg
ccc
xxx
zzz
192.168.200.147:
anaconda-ks.cfg
ccc
xxx
zzz
192.168.200.145:
anaconda-ks.cfg
ccc
xxx
zzz
7. SaltStack常用模块之file
//file.access 检查指定路径是否存在
[root@master ~]# salt '*' cmd.run 'ls /root/'
master:
anaconda-ks.cfg
ccc
xxx
zzz
192.168.200.147:
anaconda-ks.cfg
ccc
xxx
zzz
192.168.200.145:
anaconda-ks.cfg
ccc
xxx
zzz
[root@master ~]# salt '*' file.access '/root/xxx' f
master:
True
192.168.200.145:
True
192.168.200.147:
True
[root@master ~]# salt '*' file.access '/root/abc' f
master:
False
192.168.200.147:
False
192.168.200.145:
False
//检查指定文件的权限信息
[root@master ~]# salt '*' cmd.run 'ls -l /root/xxx'
master:
-rw-r--r-- 1 root root 0 Nov 3 23:09 /root/xxx
192.168.200.147:
-rw-r--r-- 1 root root 0 Nov 3 23:09 /root/xxx
192.168.200.145:
-rw-r--r--. 1 root root 0 Nov 4 11:09 /root/xxx
[root@master ~]# salt '*' file.access /root/xxx r //是否有读权限
192.168.200.147:
True
master:
True
192.168.200.145:
True
[root@master ~]# salt '*' file.access /root/xxx w //是否有写权限
master:
True
192.168.200.147:
True
192.168.200.145:
True
[root@master ~]# salt '*' file.access /root/xxx x //是否有执行权限
192.168.200.145:
False
master:
False
192.168.200.147:
False
//file.append 往一个文件里追加内容,若此文件不存在则会报异常
[root@master ~]# salt '*' cmd.run 'ls /root/xxx'
master:
/root/xxx
192.168.200.147:
/root/xxx
192.168.200.145:
/root/xxx
[root@master ~]# salt '*' file.append /root/xxx 'wsnd' 'txv'
192.168.200.145:
Wrote 2 lines to "/root/xxx"
master:
Wrote 2 lines to "/root/xxx"
192.168.200.147:
Wrote 2 lines to "/root/xxx"
[root@master ~]# salt '*' cmd.run 'cat /root/xxx'192.168.200.145:
wsnd
txv
192.168.200.147:
wsnd
txv
master:
wsnd
txv
//file.basename 获取指定路径的基名
[root@master ~]# salt '*' file.basename /root/xxx
master:
xxx
192.168.200.147:
xxx
192.168.200.145:
xxx
//file.dirname 获取指定路径的目录名
[root@master ~]# salt '*' file.dirname /root/xxx
master:
/root
192.168.200.147:
/root
192.168.200.145:
/root
//file.check_hash 检查指定的文件与hash字符串是否匹配,匹配则返回 True 否则返回 False
[root@master ~]# salt '*' cmd.run 'md5sum /root/xxx'
master:
674ae28a374f317fe09dabd5114aab03 /root/xxx
192.168.200.145:
674ae28a374f317fe09dabd5114aab03 /root/xxx
192.168.200.147:
674ae28a374f317fe09dabd5114aab03 /root/xxx
[root@master ~]# salt '*' file.check_hash /root/xxx 674ae28a374f317fe09dabd5114aab03
192.168.200.145:
True
master:
True
192.168.200.147:
True
file.chattr
修改指定文件的属性
属性 | 对文件的意义 | 对目录的意义 |
---|---|---|
a | 只允许在这个文件之后追加数据, 不允许任何进程覆盖或截断这个文件 | 只允许在这个目录下建立和修改文件, 而不允许删除任何文件 |
i | 不允许对这个文件进行任何的修改, 不能删除、更改、移动 | 任何的进程只能修改目录之下的文件, 不允许建立和删除文件 |
给指定文件添加属性
//查看当前属性
[root@master ~]# salt '*' cmd.run 'lsattr /root/xxx'
master:
-------------------- /root/xxx
192.168.200.145:
-------------------- /root/xxx
192.168.200.147:
-------------------- /root/xxx
//添加属性
[root@master ~]# salt '*' file.chattr /root/xxx operator=add attributes=ia
master:
True
192.168.200.145:
True
192.168.200.147:
True
[root@master ~]# salt '*' cmd.run 'lsattr /root/xxx'
192.168.200.145:
----ia-------------- /root/xxx
master:
----ia-------------- /root/xxx
192.168.200.147:
----ia-------------- /root/xxx
//给指定文件去除属性
[root@master ~]# salt '*' file.chattr /root/xxx operator=remove attributes=i
master:
True
192.168.200.147:
True
192.168.200.145:
True
[root@master ~]# salt '*' cmd.run 'lsattr /root/xxx'
192.168.200.145:
-----a-------------- /root/xxx
master:
-----a-------------- /root/xxx
192.168.200.147:
-----a-------------- /root/xxx
//file.chown设置指定文件的属主,属组信息
[root@master ~]# salt '*' file.chown /root/xxx root root master:
None
192.168.200.147:
None
192.168.200.145:
None
[root@master ~]# salt '*' cmd.run 'ls -l /root/xxx'
master:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
192.168.200.145:
-rw-r--r--. 1 root root 9 Nov 4 11:40 /root/xxx
192.168.200.147:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
//file.copy 在远程主机上复制文件或目录拷贝文件
[root@master ~]# salt '*' cmd.run 'ls -l /root/xxx'
master:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
192.168.200.145:
-rw-r--r--. 1 root root 9 Nov 4 11:40 /root/xxx
192.168.200.147:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
//覆盖并拷贝目录,将会覆盖同名文件或目录
[root@master ~]# salt '*' file.copy /tmp/ /root/xym recurse=True
master:
True
192.168.200.147:
True
192.168.200.145:
True
//删除目标目录中同名的文件或目录并拷贝新内容至其中
[root@master ~]# salt '*' cmd.run 'ls -l /root/'
master:
total 12
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
192.168.200.145:
total 12
-rw-------. 1 root root 1179 Aug 31 16:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 9 Nov 4 14:40 bbb
-rw-r--r--. 1 root root 0 Nov 4 11:12 ccc
-rw-r--r--. 1 root root 9 Nov 4 11:40 xxx
-rw-r--r--. 1 root root 0 Nov 4 11:12 zzz
192.168.200.147:
total 12
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
[root@master ~]# salt '*' cmd.run 'ls -l /opt/'
master:
total 24
-rw-r--r--. 1 root root 20012 Jul 13 23:42 ansible.cfg
-rw-r--r--. 1 root root 31 Jul 13 02:12 inventory
192.168.200.147:
total 24
drwxr-xr-x 2 root root 6 Nov 4 03:41 adc
-rw-r--r--. 1 root root 20012 Jul 13 23:42 ansible.cfg
-rw-r--r--. 1 root root 31 Jul 13 02:12 inventory
[root@master ~]# salt '*' file.copy /opt/adc /root/abc recurse=True remove_existing=True
master:
True
192.168.200.147:
True
[root@master ~]# salt '*' cmd.run 'ls -l /root/abc '
master:
total 0
192.168.200.147:
total 0
//file.ditectory_exists 判断指定目录是否存在,存在则返回 True ,否则返回 False
[root@master ~]# salt '*' cmd.run 'ls -l /opt/ '
master:
total 24
drwxr-xr-x 2 root root 6 Nov 4 03:45 abc
drwxr-xr-x 2 root root 6 Nov 4 03:45 adc
-rw-r--r--. 1 root root 20012 Jul 13 23:42 ansible.cfg
-rw-r--r--. 1 root root 31 Jul 13 02:12 inventory
192.168.200.147:
total 24
drwxr-xr-x 2 root root 6 Nov 4 03:41 adc
-rw-r--r--. 1 root root 20012 Jul 13 23:42 ansible.cfg
-rw-r--r--. 1 root root 31 Jul 13 02:12 inventory
[root@master ~]# salt '*' file.directory_exists /opt/adc
master:
True
192.168.200.147:
True
//file.diskusage 递归计算指定路径的磁盘使用情况并以字节为单位返回
[root@master ~]# salt '*' cmd.run 'du -sb /opt'
master:
20119 /opt
192.168.200.147:
20102 /opt
[root@master ~]# salt '*' file.diskusage /opt
master:
20043
192.168.200.147:
20043
//file.file_exists 判断指定文件是否存在
[root@master ~]# salt '*' cmd.run 'ls -l /root/'
master:
total 16
drwxr-xr-x 2 root root 6 Nov 4 03:45 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
drwxrwxrwt 15 root root 4096 Nov 4 03:07 xym
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
192.168.200.147:
total 16
drwxr-xr-x 2 root root 6 Nov 4 03:41 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
drwxrwxrwt 16 root root 4096 Nov 4 03:07 xym
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
[root@master ~]# salt '*' file.file_exists /root/zzz
master:
True
192.168.200.147:
True
[root@master ~]# salt '*' file.file_exists /root/vvv
master:
False
192.168.200.147:
False
file.find 类似 find 命令并返回符合指定条件的路径列表
The options include match criteria:
name = path-glob # case sensitive
iname = path-glob # case insensitive
regex = path-regex # case sensitive
iregex = path-regex # case insensitive
type = file-types # match any listed type
user = users # match any listed user
group = groups # match any listed group
size = [+-]number[size-unit] # default unit = byte
mtime = interval # modified since date
grep = regex # search file contents
and/or actions:
delete [= file-types] # default type = 'f'
exec = command [arg ...] # where {} is replaced by pathname
print [= print-opts]
and/or depth criteria:
maxdepth = maximum depth to transverse in path
mindepth = minimum depth to transverse before checking files or directories
The default action is print=path
path-glob:
* = match zero or more chars
? = match any char
[abc] = match a, b, or c
[!abc] or [^abc] = match anything except a, b, and c
[x-y] = match chars x through y
[!x-y] or [^x-y] = match anything except chars x through y
{a,b,c} = match a or b or c
path-regex
: a Python Regex (regular expression) pattern to match pathnames
file-types
: a string of one or more of the following:
a: all file types
b: block device
c: character device
d: directory
p: FIFO (named pipe)
f: plain file
l: symlink
s: socket
users
: a space and/or comma separated list of user names and/or uids
groups
: a space and/or comma separated list of group names and/or gids
size-unit
:
b: bytes
k: kilobytes
m: megabytes
g: gigabytes
t: terabytes
interval:
[<num>w] [<num>d] [<num>h] [<num>m] [<num>s]
where:
w: week
d: day
h: hour
m: minute
s: second
print-opts: a comma and/or space separated list of one or more of the following:
group: group name
md5: MD5 digest of file contents
mode: file permissions (as integer)
mtime: last modification time (as time_t)
name: file basename
path: file absolute path
size: file size in bytes
type: file type
user: user name
示例:
[root@master ~]# salt '*' file.find / type=f name=\*.bak size=+10m
master:
192.168.200.147:
[root@master ~]# salt '*' file.find /var mtime=+30d size+10m print=path,size,mtime
.......
|_
- /var/spool/plymouth
- 6
- 1576012951
|_
- /var/spool/rhsm
- 19
- 1626051930
|_
- /var/spool/rhsm/debug
- 6
- 1585845443
|_
- /var/spool/up2date
- 6
- 1561109095
|_
- /var/yp
- 6
- 1534067174
[root@master ~]# salt '*' file.find /var/log name=\*.[0-9] mtime=+30d size=+10m delete
master:
192.168.200.147:
// file.get_gid 获取指定文件的gid
[root@master ~]# salt '*' cmd.run 'ls -l /root/xxx'
master:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
192.168.200.147:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
[root@master ~]# salt '*' file.get_gid /root/xxx
master:
0
192.168.200.147:
0
//file.get_group 获取指定文件的组名
[root@master ~]# salt '*' cmd.run 'ls -l /root/xxx'
master:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
192.168.200.147:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
[root@master ~]# salt '*' file.get_group /root/xxx
master:
root
192.168.200.147:
root
//file.get_hash 获取指定文件的hash值,该值通过 sha256 算法得来
[root@master ~]# salt '*' cmd.run 'sha256sum /root/xxx'
master:
d039285bd1798e44360f80a34708223caadb688b489a0bdeaa1ad1d415913071 /root/xxx
192.168.200.147:
d039285bd1798e44360f80a34708223caadb688b489a0bdeaa1ad1d415913071 /root/xxx
[root@master ~]# salt '*' file.get_hash /root/xxx
master:
d039285bd1798e44360f80a34708223caadb688b489a0bdeaa1ad1d415913071
192.168.200.147:
d039285bd1798e44360f80a34708223caadb688b489a0bdeaa1ad1d415913071
//file.get_mode 获取指定文件的权限,以数字方式显示
[root@master ~]# salt '*' cmd.run 'ls -l /root/xxx'
master:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
192.168.200.147:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
[root@master ~]# salt '*' file.get_mode /root/xxx
master:
0644
192.168.200.147:
0644
//file.get_selinux_context 获取指定文件的 SELINUX 上下文信息
[root@master ~]# salt '*' cmd.run 'ls -Z /root/anaconda-ks.cfg'
master:
system_u:object_r:admin_home_t:s0 /root/anaconda-ks.cfg
192.168.200.147:
system_u:object_r:admin_home_t:s0 /root/anaconda-ks.cfg
[root@master ~]# salt '*' file.get_selinux_context /root/anaconda-ks.cfg
192.168.200.147:
system_u:object_r:admin_home_t:s0
master:
system_u:object_r:admin_home_t:s0
file.get_sum
按照指定的算法计算指定文件的特征码并显示,默认使用的sha256算法。
该函数可使用的算法参数有:
- md5
- sha1
- sha224
- sha256 (default)
- sha384
- sha512
[root@master ~]# salt '*' cmd.run 'sha256sum /root/xxx'
master:
d039285bd1798e44360f80a34708223caadb688b489a0bdeaa1ad1d415913071 /root/xxx
192.168.200.147:
d039285bd1798e44360f80a34708223caadb688b489a0bdeaa1ad1d415913071 /root/xxx
[root@master ~]# salt '*' file.get_sum /root/xxx
master:
d039285bd1798e44360f80a34708223caadb688b489a0bdeaa1ad1d415913071
192.168.200.147:
d039285bd1798e44360f80a34708223caadb688b489a0bdeaa1ad1d415913071
[root@master ~]# salt '*' cmd.run 'md5sum /root/xxx'
master:
674ae28a374f317fe09dabd5114aab03 /root/xxx
192.168.200.147:
674ae28a374f317fe09dabd5114aab03 /root/xxx
[root@master ~]# salt '*' file.get_sum /root/xxx md5
master:
674ae28a374f317fe09dabd5114aab03
192.168.200.147:
674ae28a374f317fe09dabd5114aab03
//file.get_uid与file.get_user 获取指定文件的 uid 或 用户名
[root@master ~]# salt '*' cmd.run 'ls -l /root/xxx'
master:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
192.168.200.147:
-rw-r--r-- 1 root root 9 Nov 3 23:40 /root/xxx
[root@master ~]# sa
salt salt-master salt-unity
salt-call salt-minion sasldblistusers2
salt-cp salt-proxy saslpasswd2
salt-key salt-run
[root@master ~]# salt '*' file.get_uid /root/xxx
master:
0
192.168.200.147:
0
[root@master ~]# salt '*' file.get_user /root/xxx
master:
root
192.168.200.147:
root
//file.gid_to_group 将指定的 gid 转换为组名并显示
[root@master ~]# salt '*' file.get_uid /root/xxx
master:
0
192.168.200.147:
0
[root@master ~]# salt '*' file.get_user /root/xxx
master:
root
192.168.200.147:
root
[root@master ~]# salt '*' file.gid_to_group 1000
master:
xym
192.168.200.147:
xym
[root@master ~]# salt '*' file.gid_to_group 0
master:
root
192.168.200.147:
root
//file.group_to_gid 将指定的组名转换为 gid 并显示
[root@master ~]# salt '*' file.group_to_gid root
master:
0
192.168.200.147:
0
[root@master ~]# salt '*' file.group_to_gid xym
master:
1000
192.168.200.147:
1000
//file.grep在指定文件中检索指定内容该函数支持通配符,若在指定的路径中用通配符则必须用双引号引起来
[root@master ~]# salt '*' file.grep /etc/passwd root
master:
----------
pid:
571568
retcode:
0
stderr:
stdout:
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
192.168.200.147:
----------
pid:
580292
retcode:
0
stderr:
stdout:
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
salt '*' file.grep /etc/sysconfig/network-scripts/ifcfg-eth0 ipaddr -- -i
salt '*' file.grep /etc/sysconfig/network-scripts/ifcfg-eth0 ipaddr -- -i -B2
salt '*' file.grep "/etc/sysconfig/network-scripts/*" ipaddr -- -i -l
//file.is_blkdev 判断指定的文件是否是块设备文件
[root@master ~]# salt '*' cmd.run 'ls -l /dev/sr0'
master:
brw-rw---- 1 root cdrom 11, 0 Nov 3 22:39 /dev/sr0
192.168.200.147:
brw-rw---- 1 root cdrom 11, 0 Nov 3 22:39 /dev/sr0
[root@master ~]# salt '*' file.is_blkdev /dev/sr0
master:
True
192.168.200.147:
True
//file.lsattr 检查并显示出指定文件的属性信息
[root@master ~]# salt '*' cmd.run 'lsattr /root/xxx'
master:
-------------------- /root/xxx
192.168.200.147:
-------------------- /root/xxx
[root@master ~]# salt '*' cmd.run 'chattr +i /root/xxx'
master:
192.168.200.147:
[root@master ~]# salt '*' cmd.run 'lsattr /root/xxx'
master:
----i--------------- /root/xxx
192.168.200.147:
----i--------------- /root/xxx
[root@master ~]# salt '*' file.lsattr /root/xxx
master:
----------
/root/xxx:
- i
192.168.200.147:
----------
/root/xxx:
- i
[root@master ~]# salt '*' cmd.run 'lsattr /root/xxx'
master:
-------------------- /root/xxx
192.168.200.147:
-------------------- /root/xxx
[root@master ~]# salt '*' cmd.run 'chattr +i /root/xxx'
master:
192.168.200.147:
[root@master ~]# salt '*' cmd.run 'lsattr /root/xxx'
master:
----i--------------- /root/xxx
192.168.200.147:
----i--------------- /root/xxx
[root@master ~]# salt '*' file.lsattr /root/xxx
master:
----------
/root/xxx:
- i
192.168.200.147:
----------
/root/xxx:
- i
//file.mkdir创建目录并设置属主、属组及权限
[root@master ~]# salt '*' cmd.run 'ls -l /root'
master:
total 16
drwxr-xr-x 2 root root 6 Nov 4 03:45 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
drwxrwxrwt 15 root root 4096 Nov 4 03:07 xym
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
192.168.200.147:
total 16
drwxr-xr-x 2 root root 6 Nov 4 03:41 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
drwxrwxrwt 16 root root 4096 Nov 4 03:07 xym
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
[root@master ~]# salt '*' file.mkdir /root/www
master:
True
192.168.200.147:
True
[root@master ~]# salt '*' cmd.run 'ls -l /root'
master:
total 16
drwxr-xr-x 2 root root 6 Nov 4 03:45 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
drwxr-xr-x 2 root root 6 Nov 4 04:47 www
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
drwxrwxrwt 15 root root 4096 Nov 4 03:07 xym
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
192.168.200.147:
total 16
drwxr-xr-x 2 root root 6 Nov 4 03:41 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
drwxr-xr-x 2 root root 6 Nov 4 04:47 www
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
drwxrwxrwt 16 root root 4096 Nov 4 03:07 xym
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
[root@master ~]# salt '*' file.mkdir /root/xixi xym xym 400
master:
True
192.168.200.147:
True
[root@master ~]# salt '*' cmd.run 'ls -l /root'
192.168.200.147:
total 16
drwxr-xr-x 2 root root 6 Nov 4 03:41 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
drwxr-xr-x 2 root root 6 Nov 4 04:47 www
dr-------- 2 root root 6 Nov 4 04:48 xixi
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
drwxrwxrwt 16 root root 4096 Nov 4 03:07 xym
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
master:
total 16
drwxr-xr-x 2 root root 6 Nov 4 03:45 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 4 02:40 bbb
-rw-r--r-- 1 root root 0 Nov 3 23:12 ccc
drwxr-xr-x 2 root root 6 Nov 4 04:47 www
dr-------- 2 root root 6 Nov 4 04:48 xixi
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
drwxrwxrwt 15 root root 4096 Nov 4 03:07 xym
-rw-r--r-- 1 root root 0 Nov 3 23:12 zzz
//file.move 移动或重命名
[root@master ~]# salt '*' cmd.run 'ls -l /root/'
master:
total 12
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 3 23:40 ccc
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
192.168.200.147:
total 12
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 3 23:40 ccc
-rw-r--r-- 1 root root 9 Nov 3 23:40 xxx
192.168.200.145:
total 4
-rw-------. 1 root root 1179 Aug 31 16:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Nov 5 11:43 xxx
[root@master ~]# salt '*' file.move /root/xxx /root/bbb
master:
----------
comment:
'/root/xxx' moved to '/root/bbb'
result:
True
192.168.200.147:
----------
comment:
'/root/xxx' moved to '/root/bbb'
result:
True
192.168.200.145:
----------
comment:
'/root/xxx' moved to '/root/bbb'
result:
True
[root@master ~]# salt '*' cmd.run 'ls -l /root/'
master:
total 12
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
-rw-r--r-- 1 root root 9 Nov 3 23:40 ccc
192.168.200.147:
total 12
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
-rw-r--r-- 1 root root 9 Nov 3 23:40 ccc
192.168.200.145:
total 4
-rw-------. 1 root root 1179 Aug 31 16:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Nov 5 11:43 bbb
//移动
[root@master ~]# salt '*' cmd.run 'ls -l /opt/'
master:
total 0
192.168.200.147:
total 0
192.168.200.145:
total 0
[root@master ~]# salt '*' file.move /root/bbb /opt/
master:
----------
comment:
'/root/bbb' moved to '/opt/'
result:
True
192.168.200.147:
----------
comment:
'/root/bbb' moved to '/opt/'
result:
True
192.168.200.145:
----------
comment:
'/root/bbb' moved to '/opt/'
result:
True
[root@master ~]# salt '*' cmd.run 'ls -l /opt/'
192.168.200.147:
total 4
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
master:
total 4
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
192.168.200.145:
total 0
-rw-r--r--. 1 root root 0 Nov 5 11:43 bbb
//file.prepend 把文本插入指定文件的开头
[root@master ~]# salt '*' cmd.run 'cat /root/ccc'master:
wsnd
txv
192.168.200.145:
wsnd
txv
192.168.200.147:
wsnd
txv
[root@master ~]# salt '*' file.prepend /root/ccc "sb" "sb" "sb"
master:
Prepended 3 lines to "/root/ccc"
192.168.200.147:
Prepended 3 lines to "/root/ccc"
192.168.200.145:
Prepended 3 lines to "/root/ccc"
[root@master ~]# salt '*' cmd.run 'cat /root/ccc'master:
sb
sb
sb
wsnd
txv
192.168.200.147:
sb
sb
sb
wsnd
txv
192.168.200.145:
sb
sb
sb
wsnd
txv
//file.sed 修改文本文件的内容
[root@master ~]# salt '*' cmd.run 'cat /root/ccc'
master:
sb
sb
sb
wsnd
txv
192.168.200.147:
sb
sb
sb
wsnd
txv
192.168.200.145:
sb
sb
sb
wsnd
txv
[root@master ~]# salt '*' file.sed /root/ccc "sb" "xb"
master:
----------
pid:
166264
retcode:
0
stderr:
stdout:
192.168.200.147:
----------
pid:
159037
retcode:
0
stderr:
stdout:
192.168.200.145:
----------
pid:
34734
retcode:
0
stderr:
stdout:
[root@master ~]# salt '*' cmd.run 'cat /root/ccc'
192.168.200.147:
xb
xb
xb
wsnd
txv
master:
xb
xb
xb
wsnd
txv
192.168.200.145:
xb
xb
xb
wsnd
txv
[root@master ~]# salt '*' cmd.run 'cat /root/ccc'master:
sb xk
sb xm
xb
xb
xb
wsnd
txv
192.168.200.147:
sb xk
sb xm
xb
xb
xb
wsnd
txv
192.168.200.145:
sb xk
sb xm
xb
xb
xb
wsnd
txv
[root@master ~]# salt '*' file.sed /root/ccc "sb" " xumeng" flags=1
master:
----------
pid:
181919
retcode:
0
stderr:
stdout:
192.168.200.147:
----------
pid:
174195
retcode:
0
stderr:
stdout:
192.168.200.145:
----------
pid:
49894
retcode:
0
stderr:
stdout:
[root@master ~]# salt '*' cmd.run 'cat /root/ccc'master:
xumeng xk
xumeng xm
xb
xb
xb
wsnd
txv
192.168.200.147:
xumeng xk
xumeng xm
xb
xb
xb
wsnd
txv
192.168.200.145:
xumeng xk
xumeng xm
xb
xb
xb
wsnd
txv
// file.read 读取文件内容
[root@master ~]# salt '*' cmd.run 'cat /root/ccc'master:
sb xm
192.168.200.147:
sb xm
192.168.200.145:
sb xm
[root@master ~]# salt '*' file.read /root/ccc
master:
sb xm
192.168.200.147:
sb xm
192.168.200.145:
sb xm
// file.readdir 列出指定目录下的所有文件或目录,包括隐藏文件
[root@master ~]# salt '*' file.readdir /root
master:
- .
- ..
- .bash_logout
- .bash_profile
- .bashrc
- .cshrc
- .tcshrc
- anaconda-ks.cfg
- .config
- .bash_history
- .ansible
- .ssh
- .cache
- .viminfo
- ccc.bak
- ccc
192.168.200.147:
- .
- ..
- .bash_logout
- .bash_profile
- .bashrc
- .cshrc
- .tcshrc
- anaconda-ks.cfg
- .config
- .bash_history
- .ansible
- .ssh
- .viminfo
- ccc.bak
- ccc
192.168.200.145:
- .
- ..
- .bash_logout
- .bash_profile
- .bashrc
- .cshrc
- .tcshrc
- anaconda-ks.cfg
- .config
- .bash_history
- .viminfo
- ccc.bak
- ccc
// file.remove 删除指定的文件或目录,若给出的是目录,将递归删除
[root@master ~]# salt '*' cmd.run 'ls -l /root/'
master:
total 12
drwxr-xr-x 2 root root 6 Nov 5 01:14 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 6 Nov 5 00:07 ccc
-rw-r--r-- 1 root root 30 Nov 5 00:05 ccc.bak
192.168.200.147:
total 12
drwxr-xr-x 2 root root 6 Nov 5 01:14 abc
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 6 Nov 5 00:07 ccc
-rw-r--r-- 1 root root 30 Nov 5 00:05 ccc.bak
192.168.200.145:
total 12
drwxr-xr-x. 2 root root 6 Nov 5 13:14 abc
-rw-------. 1 root root 1179 Aug 31 16:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 6 Nov 5 12:07 ccc
-rw-r--r--. 1 root root 30 Nov 5 12:05 ccc.bak
[root@master ~]# salt '*' file.remove /root/ccc
192.168.200.147:
True
master:
True
192.168.200.145:
True
[root@master ~]# salt '*' file.remove /root/abc
master:
True
192.168.200.145:
True
192.168.200.147:
True
[root@master ~]# salt '*' cmd.run 'ls -l /root/'
192.168.200.147:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 ccc.bak
master:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 ccc.bak
192.168.200.145:
total 8
-rw-------. 1 root root 1179 Aug 31 16:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 30 Nov 5 12:05 ccc.bak
// file.rename 重命名文件或目录
[root@master ~]# salt '*' file.rename /root/ccc.bak /root/vvv
192.168.200.145:
True
192.168.200.147:
True
master:
True
[root@master ~]# salt '*' cmd.run 'ls -l /root/'
master:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 vvv
192.168.200.145:
total 8
-rw-------. 1 root root 1179 Aug 31 16:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 30 Nov 5 12:05 vvv
192.168.200.147:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 vvv
//file.set_mode 给指定文件设置权限
[root@master ~]# salt '*' file.set_mode /root/vvv 0644
192.168.200.147:
0644
master:
0644
192.168.200.145:
0644
[root@master ~]# salt '*' cmd.run 'ls -l /root/'
master:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 vvv
192.168.200.147:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 vvv
192.168.200.145:
total 8
-rw-------. 1 root root 1179 Aug 31 16:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 30 Nov 5 12:05 vvv
//file.symlink 给指定的文件创建软链接
[root@master ~]# salt '*' cmd.run 'ls -l /root/'
192.168.200.145:
total 8
-rw-------. 1 root root 1179 Aug 31 16:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 30 Nov 5 12:05 vvv
master:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 vvv
192.168.200.147:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 vvv
[root@master ~]# salt '*' file.symlink /root/vvv /opt/aaa
master:
True
192.168.200.145:
True
192.168.200.147:
True
[root@master ~]# salt '*' cmd.run 'ls -l /root/;ls -l /opt/'
192.168.200.145:
total 8
-rw-------. 1 root root 1179 Aug 31 16:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 30 Nov 5 12:05 vvv
total 0
lrwxrwxrwx. 1 root root 9 Nov 5 13:21 aaa -> /root/vvv
-rw-r--r--. 1 root root 0 Nov 5 11:43 bbb
192.168.200.147:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 vvv
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
master:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Nov 5 00:05 vvv
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
//file.touch 创建空文件或更新时间戳
[root@master ~]# salt '*' cmd.run 'ls -l /opt'
master:
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
192.168.200.147:
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
192.168.200.145:
total 0
lrwxrwxrwx. 1 root root 9 Nov 5 13:21 aaa -> /root/vvv
-rw-r--r--. 1 root root 0 Nov 5 11:43 bbb
[root@master ~]# salt '*' file.touch /opt/zzz
master:
True
192.168.200.145:
True
192.168.200.147:
True
[root@master ~]# salt '*' file.touch /opt/xxx
master:
True
192.168.200.147:
True
192.168.200.145:
True
[root@master ~]# salt '*' cmd.run 'ls -l /opt'
master:
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
-rw-r--r-- 1 root root 0 Nov 5 01:23 xxx
-rw-r--r-- 1 root root 0 Nov 5 01:23 zzz
192.168.200.145:
total 0
lrwxrwxrwx. 1 root root 9 Nov 5 13:21 aaa -> /root/vvv
-rw-r--r--. 1 root root 0 Nov 5 11:43 bbb
-rw-r--r--. 1 root root 0 Nov 5 13:23 xxx
-rw-r--r--. 1 root root 0 Nov 5 13:23 zzz
192.168.200.147:
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
-rw-r--r-- 1 root root 0 Nov 5 01:23 xxx
-rw-r--r-- 1 [root@master ~]# salt '*' file.uid_to_user 0
master:
root
192.168.200.145:
root
192.168.200.147:
root
// file.uid_to_user将指定的 uid 转换成用户名显示出来
[root@master ~]# salt '*' file.uid_to_user 0
master:
root
192.168.200.145:
root
192.168.200.147:
root
[root@master ~]# salt '*' file.uid_to_user 1000
master:
1000
192.168.200.145:
1000
192.168.200.147:
xym
//file.user_to_uid将指定的用户转换成 uid 并显示出来
[root@master ~]# salt '*' file.user_to_uid xym
master:
192.168.200.145:
192.168.200.147:
1000
[root@master ~]# salt '*' file.user_to_uid root
master:
0
192.168.200.145:
0
192.168.200.147:
0
//file.write 往一个指定的文件里覆盖写入指定内容
[root@master ~]# salt '*' cmd.run 'cat /root/vvv'
master:
sb xk
sb xm
xb
xb
xb
wsnd
txv
192.168.200.145:
sb xk
sb xm
xb
xb
xb
wsnd
txv
192.168.200.147:
sb xk
sb xm
xb
xb
xb
wsnd
txv
[root@master ~]# salt '*' file.write /root/vvv "wo shi xu meng ta die"
master:
Wrote 1 lines to "/root/vvv"
192.168.200.147:
Wrote 1 lines to "/root/vvv"
192.168.200.145:
Wrote 1 lines to "/root/vvv"
[root@master ~]# salt '*' cmd.run 'cat /root/vvv'master:
wo shi xu meng ta die
192.168.200.145:
wo shi xu meng ta die
192.168.200.147:
wo shi xu meng ta die
5 00:05 vvv
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r–r-- 1 root root 9 Nov 3 23:40 bbb
master:
total 8
-rw-------. 1 root root 1182 Jul 11 21:07 anaconda-ks.cfg
-rw-r–r-- 1 root root 30 Nov 5 00:05 vvv
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r–r-- 1 root root 9 Nov 3 23:40 bbb
```bash
//file.touch 创建空文件或更新时间戳
[root@master ~]# salt '*' cmd.run 'ls -l /opt'
master:
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
192.168.200.147:
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
192.168.200.145:
total 0
lrwxrwxrwx. 1 root root 9 Nov 5 13:21 aaa -> /root/vvv
-rw-r--r--. 1 root root 0 Nov 5 11:43 bbb
[root@master ~]# salt '*' file.touch /opt/zzz
master:
True
192.168.200.145:
True
192.168.200.147:
True
[root@master ~]# salt '*' file.touch /opt/xxx
master:
True
192.168.200.147:
True
192.168.200.145:
True
[root@master ~]# salt '*' cmd.run 'ls -l /opt'
master:
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
-rw-r--r-- 1 root root 0 Nov 5 01:23 xxx
-rw-r--r-- 1 root root 0 Nov 5 01:23 zzz
192.168.200.145:
total 0
lrwxrwxrwx. 1 root root 9 Nov 5 13:21 aaa -> /root/vvv
-rw-r--r--. 1 root root 0 Nov 5 11:43 bbb
-rw-r--r--. 1 root root 0 Nov 5 13:23 xxx
-rw-r--r--. 1 root root 0 Nov 5 13:23 zzz
192.168.200.147:
total 4
lrwxrwxrwx 1 root root 9 Nov 5 01:21 aaa -> /root/vvv
-rw-r--r-- 1 root root 9 Nov 3 23:40 bbb
-rw-r--r-- 1 root root 0 Nov 5 01:23 xxx
-rw-r--r-- 1 [root@master ~]# salt '*' file.uid_to_user 0
master:
root
192.168.200.145:
root
192.168.200.147:
root
// file.uid_to_user将指定的 uid 转换成用户名显示出来
[root@master ~]# salt '*' file.uid_to_user 0
master:
root
192.168.200.145:
root
192.168.200.147:
root
[root@master ~]# salt '*' file.uid_to_user 1000
master:
1000
192.168.200.145:
1000
192.168.200.147:
xym
//file.user_to_uid将指定的用户转换成 uid 并显示出来
[root@master ~]# salt '*' file.user_to_uid xym
master:
192.168.200.145:
192.168.200.147:
1000
[root@master ~]# salt '*' file.user_to_uid root
master:
0
192.168.200.145:
0
192.168.200.147:
0
//file.write 往一个指定的文件里覆盖写入指定内容
[root@master ~]# salt '*' cmd.run 'cat /root/vvv'
master:
sb xk
sb xm
xb
xb
xb
wsnd
txv
192.168.200.145:
sb xk
sb xm
xb
xb
xb
wsnd
txv
192.168.200.147:
sb xk
sb xm
xb
xb
xb
wsnd
txv
[root@master ~]# salt '*' file.write /root/vvv "wo shi xu meng ta die"
master:
Wrote 1 lines to "/root/vvv"
192.168.200.147:
Wrote 1 lines to "/root/vvv"
192.168.200.145:
Wrote 1 lines to "/root/vvv"
[root@master ~]# salt '*' cmd.run 'cat /root/vvv'master:
wo shi xu meng ta die
192.168.200.145:
wo shi xu meng ta die
192.168.200.147:
wo shi xu meng ta die