SaltStack常用的模块
文章目录
1. SaltStack模块介绍
Module是日常使用SaltStack接触最多的一个组件,其用于管理对象操作,这也是SaltStack通过Push的方式进行管理的入口,比如我们日常简单的执行命令、查看包安装情况、查看服务运行情况等工作都是通过SaltStack Module来实现的。
当安装好Master和Minion包后,系统上会安装很多Module,大家可以通过以下命令查看支持的所有Module列表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
查看所有module列表 [root@master ~]# salt '192.168.153.141' sys.list_modules 192.168.153.141: - acl - aliases - alternatives - ansible - apache - archive - artifactory - augeas - beacons - bigip - btrfs - buildout - cloud - cmd - composer - config - 此处省略N行 查看指定module的所有function [root@master ~]# salt '192.168.153.141' sys.list_functions cmd 192.168.153.141: - cmd.exec_code - cmd.exec_code_all - cmd.has_exec - cmd.powershell - cmd.powershell_all - cmd.retcode - cmd.run - cmd.run_all - cmd.run_bg - cmd.run_chroot - cmd.run_stderr - cmd.run_stdout - cmd.script - cmd.script_retcode - cmd.shell - cmd.shell_info - cmd.shells - cmd.tty - cmd.which - cmd.which_bin 查看指定module的用法 [root@master ~]# salt '192.168.153.141' sys.doc cmd 'cmd.exec_code:' Pass in two strings, the first naming the executable language, aka - python2, python3, ruby, perl, lua, etc. the second string containing the code you wish to execute. The stdout will be returned. CLI Example: salt '*' cmd.exec_code ruby 'puts "cheese"' ...此处省略N行... SaltStack默认也支持一次执行多个Module,Module之间通过逗号隔开,默认传参之间也是用逗号分隔,也支持指定传参分隔符号--args-separator=@即可 [root@master ~]# salt '192.168.153.141' test.echo,cmd.run,service.status hello,hostname,salt-minion 192.168.153.141: ---------- cmd.run: minion service.status: True test.echo: hello |
2. SaltStack常用模块
2.1 SaltStack常用模块之network
2.1.1 network.active_tcp
返回所有活动的tcp连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
[root@master ~]# salt '*' network.active_tcp 192.168.153.141: ---------- 0: ---------- local_addr: 192.168.153.141 local_port: 35826 remote_addr: 192.168.153.136 remote_port: 4505 1: ---------- local_addr: 192.168.153.141 local_port: 22 remote_addr: 192.168.153.1 remote_port: 11476 192.168.153.136: ---------- 0: ---------- local_addr: 192.168.153.136 local_port: 47888 remote_addr: 192.168.153.136 remote_port: 4505 1: ---------- local_addr: 192.168.153.136 local_port: 4505 remote_addr: 192.168.153.136 remote_port: 47888 2: ---------- local_addr: 192.168.153.136 local_port: 22 remote_addr: 192.168.153.1 remote_port: 10505 3: ---------- local_addr: 192.168.153.136 local_port: 4505 remote_addr: 192.168.153.141 remote_port: 35826 |
2.1.2 network.calc_net
通过IP和子网掩码计算出网段
1 2 3 4 5 6 7 8 9 10 11 |
[root@master ~]# salt '*' network.calc_net 192.168.153.141 255.255.255.0 192.168.153.141: 192.168.153.0/24 192.168.153.136: 192.168.153.0/24 [root@master ~]# salt '*' network.calc_net 192.168.153.141 255.255.255.240 192.168.153.141: 192.168.153.128/28 192.168.153.136: 192.168.153.128/28 |
2.1.3 network.connect
测试minion至某一台服务器的网络是否连通
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@master ~]# salt '*' network.connect baidu.com 80 192.168.153.141: ---------- comment: Successfully connected to baidu.com (39.156.69.79) on tcp port 80 result: True 192.168.153.136: ---------- comment: Successfully connected to baidu.com (220.181.38.148) on tcp port 80 result: True |
2.1.4 network.default_route
查看默认路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
[root@master ~]# salt '*' network.default_route 192.168.153.141: |_ ---------- addr_family: inet destination: 0.0.0.0 flags: UG gateway: 192.168.153.2 interface: ens32 netmask: 0.0.0.0 192.168.153.136: |_ ---------- addr_family: inet destination: 0.0.0.0 flags: UG gateway: 192.168.153.2 interface: ens32 netmask: 0.0.0.0 |_ ---------- addr_family: inet6 destination: ::/0 flags: !n gateway: :: interface: lo netmask: |_ ---------- addr_family: inet6 destination: ::/0 flags: !n gateway: :: interface: lo netmask: |
2.1.5 network.get_fqdn
查看主机的fqdn(完全限定域名)
1 2 3 4 5 |
[root@master ~]# salt '*' network.get_fqdn 192.168.153.141: minion 192.168.153.136: master |
2.1.6 network.get_hostname
获取主机名
1 2 3 4 5 |
[root@master ~]# salt '*' network.get_hostname 192.168.153.141: minion 192.168.153.136: master |
2.1.7 network.get_route
查询到一个目标网络的路由信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@master ~]# salt '*' network.get_route 10.0.34.209 192.168.153.136: ---------- destination: 10.0.34.209 gateway: 192.168.153.2 interface: ens32 source: 192.168.153.136 192.168.153.141: ---------- destination: 10.0.34.209 gateway: 192.168.153.2 interface: ens32 source: 192.168.153.141 |
2.1.8 network.hw_addr
返回指定网卡的MAC地址
1 2 3 4 5 |
[root@master ~]# salt '*' network.hw_addr ens32 192.168.153.141: 00:0c:29:65:2d:90 192.168.153.136: 00:0c:29:95:7a:7f |
2.1.9 network.ifacestartswith
从特定CIDR检索接口名称
1 2 3 4 5 |
[root@master ~]# salt '*' network.ifacestartswith 192.168 192.168.153.141: - ens32 192.168.153.136: - ens32 |
2.1.10 network.in_subnet
判断当前主机是否在某一个网段内
1 2 3 4 5 |
[root@master ~]# salt '*' network.in_subnet 192.168.153.0/24 192.168.153.136: True 192.168.153.141: True |
2.1.11 network.interface
返回指定网卡的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@master ~]# salt '*' network.interface ens32 192.168.153.141: |_ ---------- address: 192.168.153.141 broadcast: 192.168.153.255 label: ens32 netmask: 255.255.255.0 192.168.153.136: |_ ---------- address: 192.168.153.136 broadcast: 192.168.153.255 label: ens32 netmask: 255.255.255.0 |
2.1.12 network.interface_ip
返回指定网卡的IP地址
1 2 3 4 5 |
[root@master ~]# salt '*' network.interface_ip ens32 192.168.153.136: 192.168.153.136 192.168.153.141: 192.168.153.141 |
2.1.13 network.interfaces
返回当前系统中所有的网卡信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
[root@master ~]# salt '*' network.interfaces 192.168.153.141: ---------- ens32: ---------- hwaddr: 00:0c:29:65:2d:90 inet: |_ ---------- address: 192.168.153.141 broadcast: 192.168.153.255 label: ens32 netmask: 255.255.255.0 inet6: |_ ---------- address: fe80::20c:29ff:fe65:2d90 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 192.168.153.136: ---------- ens32: ---------- hwaddr: 00:0c:29:95:7a:7f inet: |_ ---------- address: 192.168.153.136 broadcast: 192.168.153.255 label: ens32 netmask: 255.255.255.0 inet6: |_ ---------- address: fe80::20c:29ff:fe95:7a7f 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 |
2.1.14 network.ip_addrs
返回一个IPv4的地址列表
该函数将会忽略掉127.0.0.1
的地址
1 2 3 4 5 |
[root@master ~]# salt '*' network.ip_addrs 192.168.153.141: - 192.168.153.141 192.168.153.136: - 192.168.153.136 |
2.1.15 network.netstat
返回所有打开的端口和状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 |
[root@master ~]# salt '*' network.netstat 192.168.153.136: |_ ---------- inode: 38622 local-address: 0.0.0.0:22 program: 6673/sshd proto: tcp recv-q: 0 remote-address: 0.0.0.0:* send-q: 0 state: LISTEN user: 0 |_ ---------- inode: 92692 local-address: 0.0.0.0:4505 program: 23522/python proto: tcp recv-q: 0 remote-address: 0.0.0.0:* send-q: 0 state: LISTEN user: 0 |_ ---------- inode: 40609 local-address: 127.0.0.1:25 program: 7166/master proto: tcp recv-q: 0 remote-address: 0.0.0.0:* send-q: 0 state: LISTEN user: 0 |_ ---------- inode: 92698 local-address: 0.0.0.0:4506 program: 23528/python proto: tcp recv-q: 0 remote-address: 0.0.0.0:* send-q: 0 state: LISTEN user: 0 |_ ---------- inode: 92882 local-address: 192.168.153.136:47888 program: 21887/python proto: tcp recv-q: 0 remote-address: 192.168.153.136:4505 send-q: 0 state: ESTABLISHED user: 0 |_ ---------- inode: 92883 local-address: 192.168.153.136:4505 program: 23522/python proto: tcp recv-q: 0 remote-address: 192.168.153.136:47888 send-q: 0 state: ESTABLISHED user: 0 |_ ---------- inode: 0 local-address: 192.168.153.136:54608 program: - proto: tcp recv-q: 0 remote-address: 192.168.153.136:4506 send-q: 0 state: TIME_WAIT user: 0 |_ ---------- inode: 41377 local-address: 192.168.153.136:22 program: 7358/sshd: proto: tcp recv-q: 0 remote-address: 192.168.153.1:10505 send-q: 0 state: ESTABLISHED user: 0 |_ ---------- inode: 0 local-address: 192.168.153.136:54604 program: - proto: tcp recv-q: 0 remote-address: 192.168.153.136:4506 send-q: 0 state: TIME_WAIT user: 0 |_ ---------- inode: 92890 local-address: 192.168.153.136:4505 program: 23522/python proto: tcp recv-q: 0 remote-address: 192.168.153.141:35826 send-q: 0 state: ESTABLISHED user: 0 |_ ---------- inode: 0 local-address: 127.0.0.1:48486 program: - proto: tcp recv-q: 0 remote-address: 127.0.0.1:4506 send-q: 0 state: TIME_WAIT user: 0 |_ ---------- inode: 0 local-address: 127.0.0.1:48478 program: - proto: tcp recv-q: 0 remote-address: 127.0.0.1:4506 send-q: 0 state: TIME_WAIT user: 0 |_ ---------- inode: 0 local-address: 127.0.0.1:48482 program: - proto: tcp recv-q: 0 remote-address: 127.0.0.1:4506 send-q: 0 state: TIME_WAIT user: 0 |_ ---------- inode: 69295 local-address: :::21 program: 15811/vsftpd proto: tcp6 recv-q: 0 remote-address: :::* send-q: 0 state: LISTEN user: 0 |_ ---------- inode: 38631 local-address: :::22 program: 6673/sshd proto: tcp6 recv-q: 0 remote-address: :::* send-q: 0 state: LISTEN user: 0 |_ ---------- inode: 40610 local-address: ::1:25 program: 7166/master proto: tcp6 recv-q: 0 remote-address: :::* send-q: 0 state: LISTEN user: 0 |_ ---------- inode: 36433 local-address: 0.0.0.0:68 program: 6145/dhclient proto: udp recv-q: 0 remote-address: 0.0.0.0:* send-q: 0 user: 0 |_ ---------- inode: 33876 local-address: 127.0.0.1:323 program: 5948/chronyd proto: udp recv-q: 0 remote-address: 0.0.0.0:* send-q: 0 user: 0 |_ ---------- inode: 0 local-address: 192.168.153.136:35580 program: 99487 proto: udp recv-q: 0 remote-address: 192.168.153.2:53 send-q: 0 user: ESTABLISHED |_ ---------- inode: 33877 local-address: ::1:323 program: 5948/chronyd proto: udp6 recv-q: 0 remote-address: :::* send-q: 0 user: 0 192.168.153.141: |_ ---------- inode: 36388 local-address: *:68 program: dhclient proto: udp recv-q: 0 remote-address: *:* send-q: 0 user: 0 |_ ---------- inode: 33601 local-address: 127.0.0.1:323 program: chronyd proto: udp recv-q: 0 remote-address: *:* send-q: 0 user: 0 |_ ---------- inode: 33602 local-address: ::1:323 program: chronyd proto: udp recv-q: 0 remote-address: :::* send-q: 0 user: 0 |_ ---------- inode: 38691 local-address: *:22 program: sshd proto: tcp recv-q: 0 remote-address: *:* send-q: 128 state: LISTEN user: 0 |_ ---------- inode: 40631 local-address: 127.0.0.1:25 program: master proto: tcp recv-q: 0 remote-address: *:* send-q: 100 state: LISTEN user: 0 |_ ---------- inode: 0 local-address: 192.168.153.141:43866 program: proto: tcp recv-q: 0 remote-address: 192.168.153.136:4506 send-q: 0 state: TIME-WAIT user: 0 |_ ---------- inode: 42111 local-address: 192.168.153.141:35826 program: salt-minion proto: tcp recv-q: 0 remote-address: 192.168.153.136:4505 send-q: 0 state: ESTABLISHED user: 0 |_ ---------- inode: 41776 local-address: 192.168.153.141:22 program: sshd proto: tcp recv-q: 0 remote-address: 192.168.153.1:11476 send-q: 0 state: ESTABLISHED user: 0 |_ ---------- inode: 0 local-address: 192.168.153.141:43864 program: proto: tcp recv-q: 0 remote-address: 192.168.153.136:4506 send-q: 0 state: TIME-WAIT user: 0 |_ ---------- inode: 39031 local-address: :::80 program: httpd proto: tcp recv-q: 0 remote-address: :::* send-q: 128 state: LISTEN user: 0 |_ ---------- inode: 38618 local-address: :::21 program: vsftpd proto: tcp recv-q: 0 remote-address: :::* send-q: 32 state: LISTEN user: 0 |_ ---------- inode: 38700 local-address: :::22 program: sshd proto: tcp recv-q: 0 remote-address: :::* send-q: 128 state: LISTEN user: 0 |_ ---------- inode: 40632 local-address: ::1:25 program: master proto: tcp recv-q: 0 remote-address: :::* send-q: 100 state: LISTEN user: 0 |
2.1.16 network.ping
使用ping命令测试到某主机的连通性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@master ~]# salt '*' network.ping baidu.com 192.168.153.136: 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=27.9 ms 64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=128 time=31.8 ms 64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=128 time=28.9 ms 64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=4 ttl=128 time=28.7 ms --- baidu.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 27.986/29.376/31.888/1.505 ms 192.168.153.141: PING baidu.com (39.156.69.79) 56(84) bytes of data. 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=29.1 ms 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=33.2 ms 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=3 ttl=128 time=28.3 ms 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=4 ttl=128 time=28.7 ms --- baidu.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3007ms rtt min/avg/max/mdev = 28.324/29.860/33.217/1.973 ms |
2.1.17 network.reverse_ip
返回一个指定的IP地址的反向地址
1 2 3 4 5 |
[root@master ~]# salt '*' network.reverse_ip 10.0.34.209 192.168.153.141: 209.34.0.10.in-addr.arpa 192.168.153.136: 209.34.0.10.in-addr.arpa |
2.2 SaltStack常用模块之service
2.2.1 service.available
判断指定的服务是否存在
1 2 3 4 5 6 7 8 9 10 |
[root@master ~]# salt '*' service.available sshd 192.168.153.141: True 192.168.153.136: True [root@master ~]# salt '*' service.available vsftpd 192.168.153.141: False //已卸载,所以才显示false 192.168.153.136: True |
2.2.2 service.get_all
获取所有正在运行的服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[root@master ~]# salt '*' service.get_all 192.168.153.141: - NetworkManager - NetworkManager-dispatcher - NetworkManager-wait-online - arp-ethers - auditd - autovt@ - basic.target - blk-availability - bluetooth.target - brandbot - brandbot.path - console-getty - console-shell - container-getty@ - cpupower - crond - 此处省略N行 |
2.2.3 service.disabled
检查指定服务是否开机不自动启动
1 2 3 4 5 |
[root@master ~]# salt '*' service.disabled httpd 192.168.153.141: False //这个是开机自启的,所以显示false 192.168.153.136: True //本机并没有安装httpd服务,特别注意一下 |
2.2.4 service.enabled
检查指定服务是否开机自动启动
1 2 3 4 5 |
[root@master ~]# salt '*' service.enabled httpd 192.168.153.141: True //这个是开机自启的,所以显示true 192.168.153.136: False //本机并没有安装httpd服务,特别注意一下 |
2.2.5 service.disable
设置指定服务开机不自动启动
1 2 3 4 5 6 7 8 9 10 |
[root@master ~]# salt '*' service.disable httpd 192.168.153.136: False 192.168.153.141: True [root@master ~]# salt '*' service.enabled httpd 192.168.153.141: False 192.168.153.136: False |
2.2.6 service.enable
设置指定服务开机自动启动
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@master ~]# salt '*' service.enable httpd 192.168.153.136: //因为未安装此服务 ERROR: Running scope as unit run-26832.scope. Failed to execute operation: No such file or directory 192.168.153.141: True ERROR: Minions returned with non-zero exit code [root@master ~]# salt '*' service.enabled httpd 192.168.153.141: True 192.168.153.136: False |
2.2.7 service.reload
重新加载指定服务
1 2 3 4 5 6 7 |
[root@master ~]# salt '*' service.reload httpd 192.168.153.136: //因为未安装此服务 ERROR: Running scope as unit run-26957.scope. Failed to reload httpd.service: Unit not found. 192.168.153.141: True ERROR: Minions returned with non-zero exit code |
2.2.8 service.stop
停止指定服务
1 2 3 4 5 6 |
[root@master ~]# salt '*' service.stop httpd 192.168.153.136: //因为未安装此服务 False 192.168.153.141: True ERROR: Minions returned with non-zero exit code |
2.2.9 service.start
启动指定服务
1 2 3 4 5 6 7 |
[root@master ~]# salt '*' service.start httpd 192.168.153.136: //因为未安装此服务 ERROR: Running scope as unit run-27181.scope. Failed to start httpd.service: Unit not found. 192.168.153.141: True ERROR: Minions returned with non-zero exit code |
2.2.10 service.restart
重启指定服务
1 2 3 |
[root@master ~]# salt '192.168.153.141' service.restart httpd 192.168.153.141: True |
2.2.11 service.status
查看指定服务的状态
1 2 3 |
[root@master ~]# salt '192.168.153.141' service.status httpd 192.168.153.141: True |
2.3 SaltStack常用模块之pkg
2.3.1 pkg.download
只下载软件包但不安装
此功能将会下载指定的软件包及其依赖的所有软件包,但是需要在minion端安装yum-utils
,可以使用 cmd.run 进行远程安装
1 2 3 4 5 6 7 8 9 |
[root@master ~]# salt '*' pkg.download wget 192.168.153.141: ---------- wget: /var/cache/yum/packages/wget-1.14-18.el7_6.1.x86_64.rpm 192.168.153.136: ---------- wget: /var/cache/yum/packages/wget-1.14-18.el7_6.1.x86_64.rpm //下载好的软件放在这里 |
2.3.2 pkg.file_list
列出指定包或系统中已安装的所有包的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
列出已安装的apache软件包提供的所有文件 [root@master ~]# salt '*' pkg.file_list httpd 192.168.153.141: ---------- errors: files: - /etc/httpd - /etc/httpd/conf - /etc/httpd/conf.d - /etc/httpd/conf.d/README - /etc/httpd/conf.d/autoindex.conf - /etc/httpd/conf.d/userdir.conf - /etc/httpd/conf.d/welcome.conf - /etc/httpd/conf.modules.d -......省略n行...... - /var/cache/httpd - /var/cache/httpd/proxy - /var/lib/dav - /var/log/httpd - /var/www - /var/www/cgi-bin - /var/www/html 192.168.153.136: //没安装 ---------- errors: files: - package httpd is not installed ERROR: Minions returned with non-zero exit code 当不提供参数时,将会列出当前系统中所有已安装软件的文件列表 [root@master ~]# salt '192.168.153.141' pkg.file_list 192.168.153.141 ---------- errors: files: - /lib/kbd/keymaps/legacy - /lib/kbd/keymaps/legacy/amiga - /lib/kbd/keymaps/legacy/amiga/amiga-de.map.gz - /lib/kbd/keymaps/legacy/amiga/amiga-us.map.gz - /lib/kbd/keymaps/legacy/atari - /lib/kbd/keymaps/legacy/atari/atari-de.map.gz - /lib/kbd/keymaps/legacy/atari/atari-se.map.gz - /lib/kbd/keymaps/legacy/atari/atari-uk-falcon.map.gz - /lib/kbd/keymaps/legacy/atari/atari-us.map.gz - /lib/kbd/keymaps/legacy/i386 - /lib/kbd/keymaps/legacy/i386/azerty - /lib/kbd/keymaps/legacy/i386/azerty/azerty.map.gz - /lib/kbd/keymaps/legacy/i386/azerty/be-latin1.map.gz - /lib/kbd/keymaps/legacy/i386/azerty/fr-latin0.map.gz - /lib/kbd/keymaps/legacy/i386/azerty/fr-latin1.map.gz - /lib/kbd/keymaps/legacy/i386/azerty/fr-latin9.map.gz |
2.3.3 pkg.group_info
查看包组的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
[root@master ~]# salt '192.168.153.141' pkg.group_info 'Development Tools' 192.168.153.141: ---------- conditional: default: - byacc - cscope - ctags - diffstat - doxygen - elfutils - gcc-gfortran - git - indent - intltool - patchutils - rcs - subversion - swig - systemtap description: A basic development environment. group: Development Tools id: development mandatory: - autoconf - automake - binutils - bison - flex - gcc - gcc-c++ - gettext - libtool - make - patch - pkgconfig - redhat-rpm-config - rpm-build - rpm-sign optional: - ElectricFence - ant - babel - bzr - ccache - chrpath - clips - clips-devel - clips-doc - clips-emacs - clips-xclips - clipsmm-devel - clipsmm-doc - cmake - cmucl - colordiff - compat-gcc-44 - compat-gcc-44-c++ - cvs - cvsps - darcs - dejagnu - email2trac - expect - ftnchek - gcc-gnat - gcc-objc - gcc-objc++ - ghc - git - haskell-platform - imake - javapackages-tools - ksc - libstdc++-docs - lua - mercurial - mock - mod_dav_svn - nasm - nqc - nqc-doc - ocaml - perltidy - python-docs - qgit - rpmdevtools - rpmlint - sbcl - scorep - systemtap-sdt-devel - systemtap-server - trac - trac-git-plugin - trac-mercurial-plugin - trac-webadmin - translate-toolkit type: package group |
2.3.4 pkg.group_list
列出系统中所有的包组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
[root@master ~]# salt '192.168.153.141' pkg.group_list 192.168.153.141: ---------- available: - Additional Development - Anaconda Tools - Backup Client - Backup Server - Base - Buildsystem building group - CentOS Linux Client product core - CentOS Linux ComputeNode product core - CentOS Linux Server product core - CentOS Linux Workstation product core - Cinnamon - Common NetworkManager submodules - Compatibility Libraries - Conflicts (Client) - Conflicts (ComputeNode) - Conflicts (Server) - Conflicts (Workstation) - Console Internet Tools - Core - DNS Name Server - Debugging Tools - Desktop Debugging and Performance Tools - Dial-up Networking Support - Directory Client - Directory Server - E-mail Server - Educational Software - Electronic Lab - Emacs - FTP Server - Fedora Packager - File and Storage Server - Fonts - GNOME - GNOME Applications - General Purpose Desktop - Graphical Administration Tools - Graphics Creation Tools - Guest Agents - Guest Desktop Agents - Hardware Monitoring Utilities - Haskell - High Availability - Hyper-v platform specific packages - Identity Management Server - Infiniband Support - Input Methods - Internet Applications - Internet Browser - Java Platform - KDE - KDE Applications - KDE Multimedia Support - KVM platform specific packages - Large Systems Performance - Legacy UNIX Compatibility - Legacy X Window System Compatibility - Load Balancer - MATE - Mainframe Access - MariaDB Database Client - MariaDB Database Server - Milkymist - Multimedia - Network File System Client - Network Infrastructure Server - Networking Tools - Office Suite and Productivity - PHP Support - Performance Tools - Perl Support - Perl for Web - Platform Development - PostgreSQL Database Client - PostgreSQL Database Server - Print Server - Printing Client - Python - Remote Desktop Clients - Remote Management for Linux - Resilient Storage - Ruby Support - Scientific Support - Security Tools - Smart Card Support - System Administration Tools - System Management - Technical Writing - TurboGears application framework - VMware platform specific packages - Virtualization Client - Virtualization Hypervisor - Virtualization Platform - Virtualization Tools - Web Server - Web Servlet Engine - X Window System - Xfce available environments: - Minimal Install - Compute Node - Infrastructure Server - File and Print Server - Cinnamon Desktop - MATE Desktop - Basic Web Server - Virtualization Host - Server with GUI - GNOME Desktop - KDE Plasma Workspaces - Development and Creative Workstation available languages: ---------- installed: - Development Tools installed environments: |
2.3.5 pkg.install
安装软件
1 2 3 4 5 6 7 8 |
[root@master ~]# salt '192.168.153.141' pkg.install wget 192.168.153.141: ---------- wget: ---------- new: 1.14-18.el7_6.1 old: |
2.3.6 pkg.list_downloaded
列出已下载到本地的软件包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@master ~]# salt '192.168.153.141' pkg.list_downloaded 192.168.153.141: ---------- wget: ---------- 1.14-18.el7_6.1: ---------- creation_date_time: 2019-07-23T20:50:28 creation_date_time_t: 1563886228 path: /var/cache/yum/packages/wget-1.14-18.el7_6.1.x86_64.rpm size: 560272 |
2.3.7 pkg.list_pkgs
以字典的方式列出当前已安装的软件包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@master ~]# salt '192.168.153.141' pkg.list_pkgs 192.168.153.141: ---------- GeoIP: 1.5.0-13.el7 NetworkManager: 1:1.12.0-6.el7 NetworkManager-libnm: 1:1.12.0-6.el7 NetworkManager-team: 1:1.12.0-6.el7 NetworkManager-tui: 1:1.12.0-6.el7 PyYAML: 3.11-1.el7 abrt: 2.1.11-52.el7.centos ...此处省略N行 |
2.3.8 pkg.owner
列出指定文件是由哪个包提供的
1 2 3 4 5 6 7 8 9 10 |
[root@master ~]# salt '192.168.153.141' pkg.owner /usr/sbin/apachectl 192.168.153.141: httpd [root@master ~]# salt '192.168.153.141' pkg.owner /usr/sbin/apachectl /etc/httpd/conf/httpd.conf 192.168.153.141: ---------- /etc/httpd/conf/httpd.conf: httpd /usr/sbin/apachectl: httpd |
2.3.9 pkg.remove
卸载指定软件
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@master ~]# salt '192.168.153.141' cmd.run 'rpm -qa|grep wget' 192.168.153.141: wget-1.14-18.el7_6.1.x86_64 [root@master ~]# salt '192.168.153.141' pkg.remove wget 192.168.153.141: ---------- wget: ---------- new: old: 1.14-18.el7_6.1 若要卸载多个文件,中间需要用逗号隔开 |
2.3.10 pkg.upgrade
升级系统中所有的软件包或升级指定的软件包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@master ~]# salt '192.168.153.141' pkg.upgrade name=openssl 192.168.153.141: ---------- openssl: ---------- new: 1:1.0.2k-16.el7_6.1 old: 1:1.0.2k-16.el7 openssl-libs: ---------- new: 1:1.0.2k-16.el7_6.1 old: 1:1.0.2k-16.el7 若想升级系统中所有的软件包则把 name 参数去掉即可 |
2.4 SaltStack常用模块之state
2.4.1 state.show_highstate
显示当前系统中有哪些高级状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
[root@master ~]# salt '192.168.153.141' state.show_highstate 192.168.153.141: ---------- apache-install: ---------- __env__: base __sls__: web.apache.apache pkg: |_ ---------- name: httpd - installed |_ ---------- order: 10000 apache-service: ---------- __env__: base __sls__: web.apache.apache service: |_ ---------- name: httpd |_ ---------- enable: True - running |_ ---------- order: 10001 vsftpd_install: ---------- __env__: base __sls__: fspub.vsftpd pkg: |_ ---------- names: - vsftpd - httpd-tools - installed |_ ---------- order: 10002 vsftpd_systemctl: ---------- __env__: base __sls__: fspub.vsftpd service: |_ ---------- name: vsftpd |_ ---------- enable: True - running |_ ---------- order: 10003 |
2.4.2 state.highstate
执行高级状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
[root@master ~]# salt '192.168.153.141' state.highstate web.apache.apache 192.168.153.141: ---------- ID: apache-install Function: pkg.installed Name: httpd Result: True Comment: All specified packages are already installed Started: 21:15:25.562208 Duration: 801.609 ms Changes: ---------- ID: apache-service Function: service.running Name: httpd Result: True Comment: The service httpd is already running Started: 21:15:26.364491 Duration: 47.159 ms Changes: ---------- ID: vsftpd_install Function: pkg.installed Name: vsftpd Result: None Comment: The following packages would be installed/updated: vsftpd Started: 21:15:26.411943 Duration: 29.414 ms Changes: ---------- ID: vsftpd_install Function: pkg.installed Name: httpd-tools Result: True Comment: All specified packages are already installed Started: 21:15:26.441517 Duration: 16.284 ms Changes: ---------- ID: vsftpd_systemctl Function: service.running Name: vsftpd Result: None Comment: Service vsftpd not present; if created in this state run, it would have been started Started: 21:15:26.457960 Duration: 13.709 ms Changes: Summary for 192.168.153.141 ------------ Succeeded: 5 (unchanged=2) Failed: 0 ------------ Total states run: 5 Total run time: 908.175 ms |
2.4.3 state.show_state_usage
显示当前系统中的高级状态执行情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
[root@master ~]# salt '192.168.153.141' state.show_state_usage 192.168.153.141: ---------- base: ---------- count_all: 3 count_unused: 1 count_used: 2 unused: - top used: - fspub.vsftpd - web.apache.apache 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: |
2.4.4 state.show_top
返回minion将用于highstate的顶级数据
1 2 3 4 5 6 7 8 9 10 |
[root@master ~]# salt '*' state.show_top 192.168.153.136: ---------- base: - fspub.vsftpd 192.168.153.141: ---------- base: - web.apache.apache - fspub.vsftpd |
2.4.5 state.top
执行指定的top file,而不是默认的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
[root@master ~]# cd /srv/salt/base/ [root@master base]# ls fspub top.sls web [root@master base]# vim runtime.sls [root@master base]# cat runtime.sls base: '192.168.153.141': - web.apache.apache [root@master base]# salt '192.168.153.141' state.top runtime.sls 192.168.153.141: ---------- ID: apache-install Function: pkg.installed Name: httpd Result: True Comment: All specified packages are already installed Started: 21:19:42.868584 Duration: 776.231 ms Changes: ---------- ID: apache-service Function: service.running Name: httpd Result: True Comment: The service httpd is already running Started: 21:19:43.645611 Duration: 50.381 ms Changes: Summary for 192.168.153.141 ------------ Succeeded: 2 Failed: 0 ------------ Total states run: 2 Total run time: 826.612 ms |
2.4.6 state.show_sls
显示 master 上特定sls或sls文件列表中的状态数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
[root@master base]# salt '192.168.153.141' state.show_sls web.apache.apache 192.168.153.141: ---------- apache-install: ---------- __env__: base __sls__: web.apache.apache pkg: |_ ---------- name: httpd - installed |_ ---------- order: 10000 apache-service: ---------- __env__: base __sls__: web.apache.apache service: |_ ---------- name: httpd |_ ---------- enable: True - running |_ ---------- order: 10001 |
2.5 SaltStack常用模块之salt-cp
salt-cp
能够很方便的把 master 上的文件批量传到 minion上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
拷贝单个文件到目标主机的/usr/src目录下 [root@master base]# salt '192.168.153.141' cmd.run 'ls /usr/src/' 192.168.153.141: debug kernels [root@master base]# salt-cp '192.168.153.141' /etc/passwd /usr/src/ 192.168.153.141: ---------- /usr/src/passwd: True [root@master base]# salt '192.168.153.141' cmd.run 'ls /usr/src/' 192.168.153.141: debug kernels passwd 拷贝多个文件到目标主机的/usr/src目录下 [root@master base]# salt-cp '192.168.153.141' /etc/shadow /etc/group /usr/src 192.168.153.141: ---------- /usr/src/group: True /usr/src/shadow: True [root@master base]# salt '192.168.153.141' cmd.run 'ls /usr/src' 192.168.153.141: debug group kernels passwd shadow |
2.6 SaltStack常用模块之file
2.6.1 file.access
检查指定路径是否存在
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@master base]# salt '192.168.153.141' cmd.run 'ls /usr/src' 192.168.153.141: debug group kernels passwd shadow [root@master base]# salt '192.168.153.141' file.access /usr/src/passwd f 192.168.153.141: True [root@master base]# salt '192.168.153.141' file.access /usr/src/abc f 192.168.153.141: False |
检查指定文件的权限信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@master base]# salt '192.168.153.141' cmd.run 'ls -l /usr/src/' 192.168.153.141: total 12 drwxr-xr-x. 2 root root 6 Apr 11 2018 debug -rw-r--r-- 1 root root 516 Jul 23 21:21 group drwxr-xr-x. 3 root root 35 Jun 13 21:32 kernels -rw-r--r-- 1 root root 986 Jul 23 21:21 passwd -rw-r--r-- 1 root root 624 Jul 23 21:21 shadow [root@master ~]# salt '192.168.153.141' file.access /usr/src/passwd r //是否有读权限 192.168.153.141: True [root@master ~]# salt '192.168.153.141' file.access /usr/src/passwd w //是否有写权限 192.168.153.141: True [root@master ~]# salt '192.168.153.141' file.access /usr/src/passwd x //是否有执行权限 192.168.153.141: False |
2.6.2 file.append
往一个文件里追加内容,若此文件不存在则会报异常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root/a' 192.168.153.141: ls: cannot access /root/a: No such file or directory ERROR: Minions returned with non-zero exit code [root@master base]# salt '192.168.153.141' cmd.run 'touch /root/a' 192.168.153.141: [root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root/a' 192.168.153.141: -rw-r--r-- 1 root root 0 Jul 23 21:25 /root/a [root@master base]# salt '192.168.153.141' file.append /root/a "hello world" "haha" "xixi" 192.168.153.141: Wrote 3 lines to "/root/a" [root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root/a' 192.168.153.141: -rw-r--r-- 1 root root 22 Jul 23 21:25 /root/a [root@master base]# salt '192.168.153.141' cmd.run 'cat /root/a' 192.168.153.141: hello world haha xixi |
2.6.3 file.basename
获取指定路径的基名
1 2 3 |
[root@master base]# salt '192.168.153.141' file.basename '/root/zabbix/abc' 192.168.153.141: abc |
2.6.4 file.dirname
获取指定路径的目录名
1 2 3 |
[root@master base]# salt '192.168.153.141' file.dirname '/root/zabbix/abc' 192.168.153.141: /root/zabbix |
2.6.5 file.check_hash
检查指定的文件与hash字符串是否匹配,匹配则返回 True 否则返回 False
1 2 3 4 5 6 |
[root@master base]# salt '192.168.153.141' cmd.run 'md5sum /etc/passwd' 192.168.153.141: 10e702fb46cac2747dc8e048d2cad238 /etc/passwd [root@master base]# salt '192.168.153.141' file.check_hash /etc/passwd 10e702fb46cac2747dc8e048d2cad238 192.168.153.141: True |
2.6.6 file.chattr
修改指定文件的属性
属性 | 对文件的意义 | 对目录的意义 |
---|---|---|
a | 只允许在这个文件之后追加数据, 不允许任何进程覆盖或截断这个文件 | 只允许在这个目录下建立和修改文件, 而不允许删除任何文件 |
i | 不允许对这个文件进行任何的修改, 不能删除、更改、移动 | 任何的进程只能修改目录之下的文件, 不允许建立和删除文件 |
给指定文件添加属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
查看当前属性 [root@master ~]# salt '192.168.153.141' cmd.run 'lsattr /root' 192.168.153.141: ---------------- /root/anaconda-ks.cfg ---------------- /root/a 添加属性 [root@master base]# salt '192.168.153.141' file.chattr /root/a operator=add attributes=ai 192.168.153.141: True [root@master base]# salt '192.168.153.141' cmd.run 'lsattr /root' 192.168.153.141: ---------------- /root/anaconda-ks.cfg ----ia---------- /root/a |
给指定文件去除属性
1 2 3 4 5 6 7 |
[root@master base]# salt '192.168.153.141' file.chattr /root/a operator=remove attributes=i 192.168.153.141: True [root@master base]# salt '192.168.153.141' cmd.run 'lsattr /root' 192.168.153.141: ---------------- /root/anaconda-ks.cfg -----a---------- /root/a |
2.6.7 file.chown
设置指定文件的属主、属组信息
1 2 3 4 5 6 7 8 9 10 11 |
[root@master base]# salt '192.168.153.141' cmd.run 'ls -l /home/itw/' 192.168.153.141: total 0 -rw-rw-r-- 1 itw itw 0 Jul 23 21:31 a [root@master base]# salt '192.168.153.141' file.chown /home/itw/a root root 192.168.153.141: None [root@master base]# salt '192.168.153.141' cmd.run 'ls -l /home/itw/' 192.168.153.141: total 0 -rw-rw-r-- 1 root root 0 Jul 23 21:31 a |
2.6.8 file.copy
在远程主机上复制文件或目录
拷贝文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 8 -rw-r--r-- 1 root root 22 Jul 23 21:25 a -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg [root@master base]# salt '192.168.153.141' file.copy /root/a /root/cc 192.168.153.141: True [root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 12 -rw-r--r-- 1 root root 22 Jul 23 21:25 a -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:33 cc |
覆盖并拷贝目录,将会覆盖同名文件或目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 12 -rw-r--r-- 1 root root 22 Jul 23 21:25 a -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:33 cc [root@master base]# salt '192.168.153.141' file.copy /tmp/ /root/abc recurse=True 192.168.153.141: True [root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 16 -rw-r--r-- 1 root root 22 Jul 23 21:25 a drwxrwxrwt 17 root root 4096 Jul 23 21:34 abc -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:33 cc |
删除目标目录中同名的文件或目录并拷贝新内容至其中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root/abc' 192.168.153.141: total 0 drwxr-xr-x 3 root root 17 Jul 23 21:34 systemd-private-5e805277f3ed440b8b6db03270de8f4c-chronyd.service-Suzhr4 drwxr-xr-x 3 root root 17 Jul 23 21:34 systemd-private-5e805277f3ed440b8b6db03270de8f4c-httpd.service-dKWiiz drwxr-xr-x 2 root root 6 Jul 23 21:34 vmware-root_5879-1958554277 drwxr-xr-x 2 root root 6 Jul 23 21:34 vmware-root_5887-1992240299 drwxr-xr-x 2 root root 6 Jul 23 21:34 vmware-root_5888-969455348 drwxr-xr-x 2 root root 6 Jul 23 21:34 vmware-root_5897-1950165796 drwxr-xr-x 2 root root 6 Jul 23 21:34 vmware-root_5900-994685311 drwxr-xr-x 2 root root 6 Jul 23 21:34 vmware-root_5904-1002483940 drwxr-xr-x 2 root root 6 Jul 23 21:34 vmware-root_5905-1949772602 drwxr-xr-x 2 root root 6 Jul 23 21:34 vmware-root_5916-960608111 [root@master base]# salt '192.168.153.141' cmd.run 'ls -l /opt/' 192.168.153.141: total 0 drwxr-xr-x 2 root root 187 Jul 22 14:25 yum.bak 拷贝目录 [root@master base]# salt '192.168.153.141' file.copy /opt/ /root/abc/ recurse=True remove_existing=True 192.168.153.141: True [root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root/abc' 192.168.153.141: total 0 drwxr-xr-x 2 root root 187 Jul 22 14:25 yum.bak |
2.6.9 file.ditectory_exists
判断指定目录是否存在,存在则返回 True ,否则返回 False
1 2 3 4 5 6 7 |
[root@master base]# salt '192.168.153.141' cmd.run 'ls -l /opt' 192.168.153.141: total 0 drwxr-xr-x 2 root root 187 Jul 22 14:25 yum.bak [root@master base]# salt '192.168.153.141' file.directory_exists /opt/yum.bak 192.168.153.141: True |
2.6.10 file.diskusage
递归计算指定路径的磁盘使用情况并以字节为单位返回
1 2 3 4 5 6 |
[root@master base]# salt '192.168.153.141' cmd.run 'du -sb /opt' 192.168.153.141: 11806 /opt [root@master base]# salt '192.168.153.141' file.diskusage /opt 192.168.153.141: 11598 |
2.6.11 file.file_exists
判断指定文件是否存在
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@master base]# salt '192.168.153.141' cmd.run 'ls -l /root/' 192.168.153.141: total 12 -rw-r--r-- 1 root root 22 Jul 23 21:25 a drwxr-xr-x 3 root root 21 Jul 22 14:25 abc -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:33 cc [root@master base]# salt '192.168.153.141' file.file_exists /root/a 192.168.153.141: True [root@master base]# salt '192.168.153.141' file.file_exists /root/abc 192.168.153.141: False //返回False是因为abc是目录而非文件 |
2.6.12 file.find
类似 find 命令并返回符合指定条件的路径列表
The options include match criteria:
1 2 3 4 5 6 7 8 9 10 |
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:
1 2 3 |
delete [= file-types] # default type = 'f' exec = command [arg ...] # where {} is replaced by pathname print [= print-opts] |
and/or depth criteria:
1 2 |
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:
1 2 3 4 5 6 7 |
* = 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:
1 2 3 4 5 6 7 8 |
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
:
1 2 3 4 5 |
b: bytes k: kilobytes m: megabytes g: gigabytes t: terabytes |
interval:
1 2 3 4 5 6 7 8 |
[<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:
1 2 3 4 5 6 7 8 9 |
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 |
示例:
1 2 3 |
salt '*' file.find / type=f name=\*.bak size=+10m salt '*' file.find /var mtime=+30d size=+10m print=path,size,mtime salt '*' file.find /var/log name=\*.[0-9] mtime=+30d size=+10m delete |
2.6.13 file.get_gid
获取指定文件的gid
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/a' 192.168.153.141: -rw-r--r-- 1 root root 22 Jul 23 21:25 /root/a [root@master ~]# salt '192.168.153.141' file.get_gid /root/a 192.168.153.141: 0 |
2.6.14 file.get_group
获取指定文件的组名
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/a' 192.168.153.141: -rw-r--r-- 1 root root 22 Jul 23 21:25 /root/a [root@master ~]# salt '192.168.153.141' file.get_group /root/a 192.168.153.141: root |
2.6.15 file.get_hash
获取指定文件的hash值,该值通过 sha256 算法得来
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' cmd.run 'sha256sum /root/a' 192.168.153.141: 11129dfb248c6bc5784c1d439877552aa34f3408f14dbb38572e802e4831b77a /root/a [root@master ~]# salt '192.168.153.141' file.get_hash /root/a 192.168.153.141: 11129dfb248c6bc5784c1d439877552aa34f3408f14dbb38572e802e4831b77a |
2.6.16 file.get_mode
获取指定文件的权限,以数字方式显示
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/a' 192.168.153.141: -rw-r--r-- 1 root root 22 Jul 23 21:25 /root/a [root@master ~]# salt '192.168.153.141' file.get_mode /root/a 192.168.153.141: 0644 |
2.6.17 file.get_selinux_context
获取指定文件的 SELINUX 上下文信息
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -Z /root/a' 192.168.153.141: -rw-r--r-- root root ? /root/a [root@master ~]# salt '192.168.153.141' file.get_selinux_context /root/a 192.168.153.141: No selinux context information is available for /root/a |
2.6.18 file.get_sum
按照指定的算法计算指定文件的特征码并显示,默认使用的sha256算法。 该函数可使用的算法参数有:
- md5
- sha1
- sha224
- sha256 (default)
- sha384
- sha512
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@master ~]# salt '192.168.153.141' cmd.run 'sha256sum /root/a' 192.168.153.141: 11129dfb248c6bc5784c1d439877552aa34f3408f14dbb38572e802e4831b77a /root/a [root@master ~]# salt '192.168.153.141' file.get_sum /root/a 192.168.153.141: 11129dfb248c6bc5784c1d439877552aa34f3408f14dbb38572e802e4831b77a [root@master ~]# salt '192.168.153.141' cmd.run 'md5sum /root/a' 192.168.153.141: 671ded4ec86c82a8779c8df17823f810 /root/a [root@master ~]# salt '192.168.153.141' file.get_sum /root/a md5 192.168.153.141: 671ded4ec86c82a8779c8df17823f810 |
2.6.19 file.get_uid与file.get_user
获取指定文件的 uid 或 用户名
1 2 3 4 5 6 7 8 9 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/a' 192.168.153.141: -rw-r--r-- 1 root root 22 Jul 23 21:25 /root/a [root@master ~]# salt '192.168.153.141' file.get_uid /root/a 192.168.153.141: 0 [root@master ~]# salt '192.168.153.141' file.get_user /root/a 192.168.153.141: root |
2.6.20 file.gid_to_group
将指定的 gid 转换为组名并显示
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' file.gid_to_group 1000 192.168.153.141: itw [root@master ~]# salt '192.168.153.141' file.gid_to_group 0 192.168.153.141: root |
2.6.21 file.group_to_gid
将指定的组名转换为 gid 并显示
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' file.group_to_gid root 192.168.153.141: 0 [root@master ~]# salt '192.168.153.141' file.group_to_gid itw 192.168.153.141: 1000 |
2.6.22 file.grep
在指定文件中检索指定内容 该函数支持通配符,若在指定的路径中用通配符则必须用双引号引起来
1 2 3 4 |
salt '*' file.grep /etc/passwd nobody 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 |
2.6.23 file.is_blkdev
判断指定的文件是否是块设备文件
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /dev/sr0' 192.168.153.141: brw-rw---- 1 root cdrom 11, 0 Jul 23 20:06 /dev/sr0 [root@master ~]# salt '192.168.153.141' file.is_blkdev /dev/sr0 192.168.153.141: True |
2.6.24 file.lsattr
检查并显示出指定文件的属性信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@master ~]# salt '192.168.153.141' cmd.run 'lsattr /root/a' 192.168.153.141: -----a---------- /root/a [root@master ~]# salt '192.168.153.141' cmd.run 'chattr +i /root/a' 192.168.153.141: [root@master ~]# salt '192.168.153.141' cmd.run 'lsattr /root/a' 192.168.153.141: ----ia---------- /root/a [root@master ~]# salt '192.168.153.141' file.lsattr /root/a 192.168.153.141: ---------- /root/a: - i - a 加了这些属性,如果不解锁,无法操作这些文件 |
2.6.25 file.mkdir
创建目录并设置属主、属组及权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 12 -rw-r--r-- 1 root root 22 Jul 23 21:25 a drwxr-xr-x 3 root root 21 Jul 22 14:25 abc -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:33 cc [root@master ~]# salt '192.168.153.141' file.mkdir /root/abc 192.168.153.141: True [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 12 -rw-r--r-- 1 root root 22 Jul 23 21:25 a drwxr-xr-x 3 root root 21 Jul 22 14:25 abc -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:33 cc [root@master ~]# salt '192.168.153.141' file.mkdir /root/haha itw itw 400 192.168.153.141: True [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/' 192.168.153.141: total 12 -rw-r--r-- 1 root root 22 Jul 23 21:25 a drwxr-xr-x 3 root root 21 Jul 22 14:25 abc -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:33 cc dr-------- 2 itw itw 6 Jul 23 21:47 haha |
2.6.26 file.move
移动或重命名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
重命名 [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 12 -rw-r--r-- 1 root root 22 Jul 23 21:25 a drwxr-xr-x 3 root root 39 Jul 23 21:50 abc -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:33 cc dr-------- 2 itw itw 6 Jul 23 21:47 haha [root@master ~]# salt '192.168.153.141' file.move /root/a /root/b 192.168.153.141: ---------- comment: '/root/a' moved to '/root/b' result: True [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 12 drwxr-xr-x 3 root root 39 Jul 23 21:50 abc -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:25 b -rw-r--r-- 1 root root 22 Jul 23 21:33 cc dr-------- 2 itw itw 6 Jul 23 21:47 haha 移动 [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 12 drwxr-xr-x 3 root root 39 Jul 23 21:50 abc -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 22 Jul 23 21:25 b -rw-r--r-- 1 root root 22 Jul 23 21:33 cc dr-------- 2 itw itw 6 Jul 23 21:47 haha [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /opt' 192.168.153.141: total 4 -rw-r--r-- 1 root root 22 Jul 23 21:25 a drwxr-xr-x 2 root root 187 Jul 22 14:25 yum.bak [root@master ~]# salt '192.168.153.141' file.move /root/cc /opt/ 192.168.153.141: ---------- comment: '/root/cc' moved to '/opt/' result: True [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /opt' 192.168.153.141: total 8 -rw-r--r-- 1 root root 22 Jul 23 21:25 a -rw-r--r-- 1 root root 22 Jul 23 21:33 cc drwxr-xr-x 2 root root 187 Jul 22 14:25 yum.bak |
2.6.27 file.prepend
把文本插入指定文件的开头
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@master ~]# salt '192.168.153.141' cmd.run 'cat /root/b' 192.168.153.141: hello world haha xixi [root@master ~]# salt '192.168.153.141' file.prepend /root/b "hehe" "xixi" "haha" 192.168.153.141: Prepended 3 lines to "/root/b" [root@master ~]# salt '192.168.153.141' cmd.run 'cat /root/b' 192.168.153.141: hehe xixi haha hello world haha xixi |
2.6.28 file.sed
修改文本文件的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
[root@master ~]# salt '192.168.153.141' cmd.run 'cat /root/b' 192.168.153.141: hehe xixi haha hellow hellow hellow world hellow hellow haha xixi [root@master ~]# salt '192.168.153.141' file.sed /root/b 'hello' 'itw' 192.168.153.141: ---------- pid: 10202 retcode: 0 stderr: stdout: [root@master ~]# salt '192.168.153.141' cmd.run 'cat /root/b' 192.168.153.141: hehe xixi haha itww itww itww world itww itww haha xixi [root@master ~]# salt '192.168.153.141' file.sed /root/b 'itw' 'design' flags=2 192.168.153.141: ---------- pid: 10214 retcode: 0 stderr: stdout: [root@master ~]# salt '192.168.153.141' cmd.run 'cat /root/b' 192.168.153.141: hehe xixi haha itww designw itww world itww itww haha xixi |
2.6.29 file.read
读取文件内容
1 2 3 4 5 6 7 8 9 10 |
[root@master ~]# salt '192.168.153.141' cmd.run 'cat /root/cca' 192.168.153.141: hellow world hellow itw itw.design [root@master ~]# salt '192.168.153.141' file.read /root/cca 192.168.153.141: hellow world hellow itw itw.design |
2.6.30 file.readdir
列出指定目录下的所有文件或目录,包括隐藏文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@master ~]# salt '192.168.153.141' file.readdir /root 192.168.153.141: - . - .. - .bash_logout - .bash_profile - .bashrc - .cshrc - .tcshrc - anaconda-ks.cfg - .bash_history - .pki - abc - haha - b.bak - b - cca - .viminfo |
2.6.31 file.remove
删除指定的文件或目录,若给出的是目录,将递归删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/' 192.168.153.141: total 16 drwxr-xr-x 3 root root 39 Jul 23 21:50 abc -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 59 Jul 23 22:23 b -rw-r--r-- 1 root root 56 Jul 23 22:22 b.bak -rw-r--r-- 1 root root 35 Jul 23 22:25 cca dr-------- 2 itw itw 6 Jul 23 21:47 haha [root@master ~]# salt '192.168.153.141' file.remove /root/b 192.168.153.141: True [root@master ~]# salt '192.168.153.141' file.remove /root/abc 192.168.153.141: True [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/' 192.168.153.141: total 12 -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 56 Jul 23 22:22 b.bak -rw-r--r-- 1 root root 35 Jul 23 22:25 cca dr-------- 2 itw itw 6 Jul 23 21:47 haha |
2.6.32 file.rename
重命名文件或目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/' 192.168.153.141: total 12 -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 56 Jul 23 22:22 b.bak -rw-r--r-- 1 root root 35 Jul 23 22:25 cca dr-------- 2 itw itw 6 Jul 23 21:47 haha [root@master ~]# salt '192.168.153.141' file.rename /root/b.bak /root/b 192.168.153.141: True [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/' 192.168.153.141: total 12 -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 56 Jul 23 22:22 b -rw-r--r-- 1 root root 35 Jul 23 22:25 cca dr-------- 2 itw itw 6 Jul 23 21:47 haha |
2.6.33 file.set_mode
给指定文件设置权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 12 -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -rw-r--r-- 1 root root 56 Jul 23 22:22 b -rw-r--r-- 1 root root 35 Jul 23 22:25 cca dr-------- 2 itw itw 6 Jul 23 21:47 haha [root@master ~]# salt '192.168.153.141' file.set_mode /root/b 0400 192.168.153.141: 0400 [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root' 192.168.153.141: total 12 -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -r-------- 1 root root 56 Jul 23 22:22 b -rw-r--r-- 1 root root 35 Jul 23 22:25 cca dr-------- 2 itw itw 6 Jul 23 21:47 haha |
2.6.34 file.symlink
给指定的文件创建软链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root/' 192.168.153.141: total 12 -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -r-------- 1 root root 56 Jul 23 22:22 b -rw-r--r-- 1 root root 35 Jul 23 22:25 cca dr-------- 2 itw itw 6 Jul 23 21:47 haha [root@master ~]# salt '192.168.153.141' file.symlink /root/b /opt/a 192.168.153.141: True [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /root;ls -l /opt/' 192.168.153.141: total 12 -rw-------. 1 root root 1313 Jun 13 21:37 anaconda-ks.cfg -r-------- 1 root root 56 Jul 23 22:22 b -rw-r--r-- 1 root root 35 Jul 23 22:25 cca dr-------- 2 itw itw 6 Jul 23 21:47 haha total 4 lrwxrwxrwx 1 root root 7 Jul 23 22:30 a -> /root/b -rw-r--r-- 1 root root 22 Jul 23 21:33 cc drwxr-xr-x 2 root root 187 Jul 22 14:25 yum.bak |
2.6.35 file.touch
创建空文件或更新时间戳
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /opt' 192.168.153.141: total 4 lrwxrwxrwx 1 root root 7 Jul 23 22:30 a -> /root/b -rw-r--r-- 1 root root 22 Jul 23 21:33 cc drwxr-xr-x 2 root root 187 Jul 22 14:25 yum.bak [root@master ~]# salt '192.168.153.141' file.touch /opt/aa 192.168.153.141: True [root@master ~]# salt '192.168.153.141' file.touch /opt/bb 192.168.153.141: True [root@master ~]# salt '192.168.153.141' cmd.run 'ls -l /opt' 192.168.153.141: total 4 lrwxrwxrwx 1 root root 7 Jul 23 22:30 a -> /root/b -rw-r--r-- 1 root root 0 Jul 23 22:31 aa -rw-r--r-- 1 root root 0 Jul 23 22:31 bb -rw-r--r-- 1 root root 22 Jul 23 21:33 cc drwxr-xr-x 2 root root 187 Jul 22 14:25 yum.bak |
2.6.36 file.uid_to_user
将指定的 uid 转换成用户名显示出来
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' file.uid_to_user 0 192.168.153.141: root [root@master ~]# salt '192.168.153.141' file.uid_to_user 1000 192.168.153.141: itw |
2.6.37 file.user_to_uid
将指定的用户转换成 uid 并显示出来
1 2 3 4 5 6 |
[root@master ~]# salt '192.168.153.141' file.user_to_uid itw 192.168.153.141: 1000 [root@master ~]# salt '192.168.153.141' file.user_to_uid root 192.168.153.141: 0 |
2.6.38 file.write
往一个指定的文件里覆盖写入指定内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@master ~]# salt '192.168.153.141' cmd.run 'cat /root/b' 192.168.153.141: hehe xixi haha itww itww itww world itww itww haha xixi [root@master ~]# salt '192.168.153.141' file.write /root/b "I'm tom" "haha" "xixi" 192.168.153.141: Wrote 3 lines to "/root/b" [root@master ~]# salt '192.168.153.141' cmd.run 'cat /root/b' 192.168.153.141: I'm tom haha xixi |