linux系统管理技巧-日常基础命令三
保存和备份iptables规则
用户自设定的防火墙规则只保存在内存中,并未保存至文件中,当系统重启后,以前设定的规则就没有了,所以,你设定的规则可以先保存下:
service iptables save ---保存规则
[root[@localhost](https://my.oschina.net/u/570656) ~]# service iptables saveiptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ][root[@localhost](https://my.oschina.net/u/570656) ~]# 由上可看出 规则保存至 /etc/sysconfig/iptables 文件内,这个文件就是iptables的规则,所以如果需要备份防火墙规则的话,可以直接复制一个这个文件的副本即可。
停止防火墙服务
service iptables stop
但是如果你重新设定规则,哪怕只有一条,也会自动开启防火墙。
备份防火墙演示
[root[@localhost](https://my.oschina.net/u/570656) ceshi]# iptables-save > my.ipt [root[@localhost](https://my.oschina.net/u/570656) ceshi]# cat my.ipt Generated by iptables-save v1.4.21 on Fri Jun 1 00:42:58 2018*filter:INPUT ACCEPT [171:13932]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [107:11100]-A INPUT -s 192.168.1.0/24 -p tcpCOMMITCompleted on Fri Jun 1 00:42:58 2018[root[@localhost](https://my.oschina.net/u/570656) ceshi]#
备份完毕,现在来看下我的备份文件
[root@localhost ceshi]# cat /etc/sysconfig/iptablesGenerated by iptables-save v1.4.21 on Fri Jun 1 00:42:49 2018*filter:INPUT ACCEPT [136:11416]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [83:8828]-A INPUT -s 192.168.1.0/24 -p tcpCOMMITCompleted on Fri Jun 1 00:42:49 2018[root@localhost ceshi]#
接下来我在my.ipt里增加了一条规则
[root@localhost ceshi]# cat my.ipt Generated by iptables-save v1.4.21 on Fri Jun 1 00:42:58 2018*filter:INPUT ACCEPT [171:13932]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [107:11100]-A INPUT -s 192.168.1.0/24 -p tcp-A INPUT -p tcp -m tcp --dport 80 -j ACCEPTCOMMITCompleted on Fri Jun 1 00:42:58 2018[root@localhost ceshi]#
现在我去删除现有的规则,然后保存。
[root@localhost ceshi]# iptables -F[root@localhost ceshi]# iptables -nvLChain INPUT (policy ACCEPT 24 packets, 1718 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 17 packets, 1528 bytes) pkts bytes target prot opt in out source destination [root@localhost ceshi]# service iptables saveiptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ][root@localhost ceshi]# iptables -nvLChain INPUT (policy ACCEPT 90 packets, 6718 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 68 packets, 6916 bytes) pkts bytes target prot opt in out source destination
接下来使用命令 iptables-restore < my.ipt 恢复备份的防火墙规则
[root@localhost ceshi]# iptables-restore < my.ipt [root@localhost ceshi]# iptables -nvLChain INPUT (policy ACCEPT 11 packets, 758 bytes) pkts bytes target prot opt in out source destination 10 724 tcp -- * * 192.168.1.0/24 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 6 packets, 728 bytes) pkts bytes target prot opt in out source destination [root@localhost ceshi]#
恢复后可查看到规则。
firewalld操作
firewalld有二个基础概念
1 . zone --- 每一个zone里有不同的iptables规则,默认一个九个zone,而Centos7默认的zone为public。2 . service 九种zone,每个zone中都使用了不同的service,而service就是针对一个服务(端口)做的iptables规则。
获取系统所有的zone
[root@localhost ~]# firewall-cmd --get-zonesblock dmz drop external home internal public trusted work
获取系统默认的zone
[root@localhost ~]# firewall-cmd --get-default-zonepublic[root@localhost ~]#
zone介绍
drop(丢弃): 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。block(限制): 任何接收的网络连接都被 IPV4 的 icmp-host-prohibited 信息和 IPV6 的 icmp6-adm-prohibited 信息所拒绝。public(公共): 在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,只能接收进过选取的连接。external(外部): 特别是为路由器启动了伪装功能的外部网。你不能信任来自网络的其它计算,不能相信它们不会对你的计算机造成危害,仅能接收经过选择的连接。dmz(非军事区): 用于你的非军事区内的计算机,此区域可公开访问,可以有限地进入你的内部网络,仅仅接收经过选择的连接。work(工作): 用于工作区。你基本可以相信网络内的其他计算机不会危害你的计算机。仅仅接收经过选择的连接。home(家庭): 用于家庭网络。你可以基本上信任网络内的其他计算机不会威胁你的计算机。仅仅接收经过选择的连接。internal(内部): 用于内部网络。你可以基本上信任网络内的其他计算机。仅仅接收经过选择的连接。trusted(信任): 可接受所有的网络连接。
zone使用
firewall-cmd --set-default-zone=work ---- 设定默认的zone为work
[root@localhost ~]# firewall-cmd --set-default-zone=worksuccess[root@localhost ~]# firewall-cmd --get-default-zonework[root@localhost ~]#
firewall-cmd --get-zone-of-interface=ens33 ---- 查看指定网卡所在的zone
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33public[root@localhost ~]#
firewall-cmd --zone=public -add-interface=lo ---- 给指定网卡设置zone
firewall-cmd -zone=dmz --change-interface=lo ---- 针对网卡更改zone
firewall-cmd -zone=dmz --remove-interface=lo ---- 针对网卡删除zone
firewall-cmd --get-active-zones ---- 查看系统所有网卡所在的zone
service使用
列出系统所有的service
firewall-cmd --get-service[root@localhost ~]# firewall-cmd --get-serviceRH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin- testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server[root@localhost ~]#
这些service都是由一个个配置文件定义的,配置文件模板在 /usr/lib/firewalld/services/ 目录下,而真正生效的配置都在 /etc/firewalld/services 目录下面(默认为空):
[root@localhost ~]# ls /usr/lib/firewalld/services/ | tailtinc.xmltor-socks.xmltransmission-client.xmlvdsm.xmlvnc-server.xmlwbem-https.xmlxmpp-bosh.xmlxmpp-client.xmlxmpp-local.xmlxmpp-server.xml[root@localhost ~]#
firewall-cmd --list-services ---- 查看当前zone下有哪些service
[root@localhost ~]# firewall-cmd --list-servicessh dhcpv6-client[root@localhost ~]#
指定zone查看其下的service
[root@localhost ~]# firewall-cmd --zone=public --list-servicessh dhcpv6-client[root@localhost ~]#
给指定zone增加service
[root@localhost ~]# firewall-cmd --zone=public --add-service=httpsuccess[root@localhost ~]# firewall-cmd --zone=public --list-servicessh dhcpv6-client http[root@localhost ~]# 这个仅在内存中生效,并没有修改配置文件。如想修改配置文件,则如下操作:[root@localhost ~]# firewall-cmd --zone=public --add-service=http --parmanent一旦修改了某个配置文件,则会在 /usr/lib/firewalld/zones/下面生成对应的zone配置文件(.xml的后缀名)。这样就修改完成了。
zone的配置文件
配置文件目录为 /usr/lib/firewalld/zones/[root@localhost ~]# ls /usr/lib/firewalld/zones/block.xml dmz.xml drop.xml external.xml home.xml internal.xml public.xml trusted.xml work.xml[root@localhost ~]#
需求:在服务器上配置一个ftp服务,端口为1121,且在work zone 下放行ftp。操作如下
[root@localhost ceshi]# cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/[root@localhost ceshi]# vim /etc/firewalld/services/ftp.xml [root@localhost ceshi]# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/[root@localhost ceshi]# vim /etc/firewalld/zones/work.xml [root@localhost ceshi]# firewall-cmd --reloadFirewallD is not running[root@localhost ceshi]# systemctl start firewalld[root@localhost ceshi]# firewall-cmd --reloadsuccess[root@localhost ceshi]# firewall-cmd --zone=work --list-servicesssh ftp dhcpv6-client[root@localhost ceshi]# /usr/lib/firewalld/services/ 目录下存放的是service的模板配置文件/etc/firewalld/services/ 目录下的配置文件才会生效先拷贝模板文件去 service 配置文件目录下,然后进去修改 ftp.xml 文件 把端口改为1121再拷贝模板文件去 zones配置文件目录下 进去修改work.xml里 增加一项内容。其次使用命令 firewall-cmd --reload //重新加载最后可以查看使用命令 firewall-cmd --zone=work --list-services 查看是否生效!
linux系统任务计划
命令crontab
常用参数:
-u:表示指定哪个用户,不加-u选项则为当前用户。-e:表示制定计划任务。-l :表示列出计划任务。-r :表示删除计划任务。格式: 分 时 日 月 周 user command
crontab -e 其实是打开了 /var/spool/cron/username 文件 username 代表你的用户名
[root@localhost ceshi]# cat /var/spool/cron/root01 10 05 06 3 echo 'OK' > /tmp/cron.log[root@localhost ceshi]#
crontab配置文件
[root@localhost ceshi]# cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootFor details see man 4 crontabsExample of job definition:.---------------- minute (0 - 59)| .------------- hour (0 - 23)| | .---------- day of month (1 - 31)| | | .------- month (1 - 12) OR jan,feb,mar,apr ...| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat| | | | |* * * * * user-name command to be executed[root@localhost ceshi]#
crontab命令演示:
[root@localhost ceshi]# crontab -eno crontab for root - using an empty onecrontab: installing new crontab[root@localhost ceshi]# crontab -l01 10 05 06 3 echo 'OK' > /root/ceshi/cron.log[root@localhost ceshi]# crontab -r[root@localhost ceshi]# crontab -lno crontab for root[root@localhost ceshi]# 上述命令表示在6月5号10点01分且当天必须是周三 时执行 echo 'OK' > /root/ceshi/cron.log
做完任务计划后,需要去查看crond服务是否启动。
[root@localhost ceshi]# systemctl status crond● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since 三 2018-05-30 00:29:58 CST; 2 days ago Main PID: 516 (crond) CGroup: /system.slice/crond.service └─516 /usr/sbin/crond -n5月 30 00:29:58 localhost.localdomain systemd[1]: Started Command Scheduler.5月 30 00:29:58 localhost.localdomain systemd[1]: Starting Command Scheduler...5月 30 00:29:58 localhost.localdomain crond[516]: (CRON) INFO (RANDOM_DELAY will be scaled with fac...d.)5月 30 00:29:59 localhost.localdomain crond[516]: (CRON) INFO (running with inotify support)Hint: Some lines were ellipsized, use -l to show in full.[root@localhost ceshi]# active状态一行 active(running) 代表启动 inactive(dead)表示 未启动
linux系统服务管理
chkconfig服务管理工具
CentOS6上的服务管理工具为chkconfig,linux系统所有的预设服务都可以通过查看/etc/init.d/目录得到[root@localhost ceshi]# ls /etc/init.d/functions netconsole network README[root@localhost ceshi]# 只有屈指可数的几个文件,因为CentOS7已经不再延续CentOS6的服务管理方案了,但是chkconfig还是可以使用的。
列出所有的服务及其每个级别的状态
[root@localhost ceshi]# chkconfig --list注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。 查看在具体 target 启用的服务请执行 'systemctl list-dependencies [target]'。netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关network 0:关 1:关 2:开 3:开 4:开 5:开 6:关[root@localhost ceshi]#
级别介绍:
- 等级0表示:表示关机
- 等级1表示:单用户模式
- 等级2表示:多用户模式,少nfs服务
- 等级3表示:多用户模式,不带图形
- 等级4表示:是一种保留的级别
- 等级5表示:带图形界面的多用户模式
- 等级6表示:重新启动
chkconfig命令演示:
[root@localhost ceshi]# chkconfig --level 3 network off[root@localhost ceshi]# chkconfig --list |grep network注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。 查看在具体 target 启用的服务请执行 'systemctl list-dependencies [target]'。network 0:关 1:关 2:开 3:关 4:开 5:开 6:关[root@localhost ceshi]#
--level 指定级别 后面是服务名,然后跟状态是 off 或者 on
可以指定多个级别
[root@localhost ceshi]# chkconfig --level 345 netconsole on[root@localhost ceshi]# chkconfig --list | grep netconsole注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。 查看在具体 target 启用的服务请执行'systemctl list-dependencies [target]'。netconsole 0:关 1:关 2:关 3:开 4:开 5:开 6:关[root@localhost ceshi]#
省略级别操作
[root@localhost ceshi]# chkconfig netconsole on[root@localhost ceshi]# chkconfig --list | grep netconsole注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。 查看在具体 target 启用的服务请执行 'systemctl list-dependencies [target]'。netconsole 0:关 1:关 2:开 3:开 4:开 5:开 6:关[root@localhost ceshi]# 省略级别操作 默认针对2.3.4.5级别操作得。
删除服务/加入服务 操作
[root@localhost ceshi]# chkconfig --del network[root@localhost ceshi]# chkconfig --list | grep network注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。 查看在具体 target 启用的服务请执行 'systemctl list-dependencies [target]'。[root@localhost ceshi]# chkconfig --add network[root@localhost ceshi]# chkconfig --list | grep network注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。 查看在具体 target 启用的服务请执行 'systemctl list-dependencies [target]'。network 0:关 1:关 2:开 3:开 4:开 5:开 6:关[root@localhost ceshi]#
systemd服务管理
systemd是centos7管理的一个服务机制
systemd支持多个服务并发启动,而sysV只能一个个启动。导致systemd方式启动会快上许多
列出系统所有的服务:
[root@localhost ceshi]# systemctl list-units --all --type=service |head UNIT LOAD ACTIVE SUB DESCRIPTION auditd.service loaded active running Security Auditing Service brandbot.service loaded inactive dead Flexible Branding Service chronyd.service loaded active running NTP client/server cpupower.service loaded inactive dead Configure CPU power related settings crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message Bus● display-manager.service not-found inactive dead display-manager.service dracut-shutdown.service loaded inactive dead Restore /run/initramfs ebtables.service loaded inactive dead Ethernet Bridge Filtering tables[root@localhost ceshi]# 由于太多,只列出前十
列出服务对应的启动脚本文件:
[root@localhost ceshi]# ls /usr/lib/systemd/system/ | headarp-ethers.serviceauditd.serviceautovt@.servicebasic.targetbasic.target.wantsblk-availability.servicebluetooth.targetbrandbot.pathbrandbot.servicechrony-dnssrv@.service[root@localhost ceshi]#
常用服务相关命令
- systemctl enable crond.service //让服务开机启动
- systemctl disable crond //不让开机启动
- systemctl status crond //查看状态
- systemctl stop crond //停止服务
- systemctl start crond //启动服务
- systemctl restart crond //重启服务
- systemctl is-enabled crond //检查服务是否开机启动
unit介绍
ls /usr/lib/systemd/system //系统所有unit:
- service 系统服务
- target 多个unit组成的组
- device 硬件设备
- mount 文件系统挂载点
- automount 自动挂载点
- path 文件或路径
- scope 不是由systemd启动的外部进程
- slice 进程组
- snapshot systemd快照
- socket 进程间通信套接字
- swap swap文件
- timer 定时器
unit相关命令
systemctl list-units //列出正在运行的unit systemctl list-units --all //列出所有,包括失败的或者inactive的systemctl list-units --all --state=inactive //列出inactive的unitsystemctl list-units --all --type=service //列出所有状态的servicesystemctl list-units --type=service //列出状态为active的servicesystemctl is-active crond.service //查看某个unit是否为active
target介绍
target是多个unit的组合,就是系统用target来管理unit
列出当前系统所有的target
[root@localhost ceshi]# systemctl list-unit-files --type=target |headUNIT FILE STATE basic.target static bluetooth.target static cryptsetup-pre.target static cryptsetup.target static ctrl-alt-del.target disableddefault.target enabled emergency.target static final.target static getty.target static [root@localhost ceshi]# 由于过多,只列出了十个。
查看一个target包含的unit
[root@localhost ceshi]# systemctl list-dependencies multi-user.target |headmulti-user.target● ├─auditd.service● ├─brandbot.path● ├─chronyd.service● ├─crond.service● ├─dbus.service● ├─firewalld.service● ├─httpd.service● ├─irqbalance.service● ├─kdump.service[root@localhost ceshi]# 以树形方式列出来。清晰直观。由于过多,只列出了十个。
设置默认的target
[root@localhost ceshi]# systemctl set-default multi-user.target
列出系统默认target
[root@localhost ceshi]# systemctl get-defaultmulti-user.target[root@localhost ceshi]#
service、unit以及target之间的联系:
- 一个service属于一种unit;
- 多个unit一起组成了一个target;
- 一个target里包含了多个service,可以查看/usr/lib/systemd/system/sshd.service里面 [install]部分的内容,其内容是定义了该service属于哪一个target。 [root@localhost ceshi]# cat /usr/lib/systemd/system/sshd.service [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target [root@localhost ceshi]#
扩展内容
iptables系列文章
anacron
systemd自定义启动脚本