马哥Linux SysAdmin学习笔记(二)

Linux网络属性管理:
局域网:以太网,令牌环网
Ethernet:CSMA/CD
冲突域
广播域
MAC:media access control地址
48bit:
24bits
24bits 
IP:Internet protocol
routing protocol
routed protocol
OSI,ICP/IP
tcp/ip分层:
application layer
transport layer
internet layer
datalink layer
pysical layer
传输层协议:
tcp,udp,sctp
网络层协议:
ip
ip协议:
IPv4地址分类:
点分十进制:0-255
0000 0000 - 1111 1111
0.0.0.0-255.255.255.255
A类:
0 000 0000 - 0 111 1111:1-127
网络数:126,127
每个网络中的主机数:2^24-2
默认子网掩码:255.0.0.0
私网地址:10.0.0.0/8
B类:
10 00 0000 - 10 11 1111:128-191
网络数:2^14
每个网络中的主机数:2^16-2
默认子网掩码:255.255.0.0
私网地址:172.16.0.0/16-172.31.0.0/16
C类:
110 0 0000 - 110 1 1111:192-223
网络数:2^21
每个网络中的主机数:2^8-2
默认子网掩码:255.255.255.0
私网地址:192.168.0.0/24-192.168.255.0/24
D类:组播
1110 0000 - 1110 1111:224-239
E类:
240-255
子网掩码:
跨网络通信:路由
主机路由
网络路由
默认路由
将Linux主机接入到网络中:
IP/mask
路由:默认网关
DNS服务器
主DNS服务器
次DNS服务器
第三DNS服务器
配置方式:
静态指定
ifcfg:ifconfig,route
ip:link,addr,route
配置文件:
system-config-network-tui (setup)
CentOS 7:
nmcli,nmtui
动态分配
DHCP:dynamic host configuration protocol
配置网络接口:
接口命名方式:
CentOS:
以太网:eth[0,1,2...]
ppp:ppp[0,1,2..]
ifconfig命令:
ifconfig [interface]
ifconfig -a
ifconfig IFACE
ifconfig interface [aftype] options | address ...
ifconfig IFACE IP/mask [up]
ifconfig TFACE IP netmask MASK
注意:立即生效
启用混杂模式:[-]promisc
route命令:
路由管理命令
查看:route -n
添加:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
目标192.168.1.3 网关:172.16.0.1
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
目标:192.168.0.0 网关:172.16.0.1
route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
默认路由,网关:172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add default gw 172.16.0.1
删除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [metric N] [[dev] If]
目标:192.168.1.3 网关:172.16.0.1
route del -host 192.168.1.3
目标:192.168.0.0 网关:172.16.0.1
route del -net 192.168.0.0 netmask 255.255.255.0
DNS服务器指定:
/etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
正解:FQDN-->IP
dig -t A FQDN
host -t A FQDN
反解:IP-->FQDN
dig -x IP
host -t PTR IP
FQDN:www.kernel.org
netstat命令:
netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
显示网络连接:
netstat  [--tcp|-t]  [--udp|-u]  [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
-t:tcp协议相关
-u:udp协议相关
-r:raw socket相关
-l:处于监听状态
-a:所有状态
-n:以数字显示ip和端口
-e:扩展格式的信息
-p:显示相关的进程及pid
常用组合:
-tan,-uan,-tnl,-unl
显示路由表:
netstat {--route|-r} [--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n]
-r:显示内核路由表
-n:数字格式
显示接口统计数据:
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
netstat -i
netstat -I IFACE
总结:ifcfg家族命令配置:
ifconfig/route/netstat
ifup/ifdown
linux网络配置(2):
配置linux网络属性:ip命令
ip命令:
ip - show / manipulate routing, devices, policy routing and tunnels
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }
link OBJECT:
ip link - network device configuration
set
dev IFACE
可设置属性:
up and down:
show
[dev IFACE]:指定接口
[up]:仅显示处于激活状态的接口
ip addr
ip addr {add | del} IFADDR dev STRING
[LABEL label]:添加地址时指明网卡别名
[scope {global|link|host}]:指明作用域
global:全局可用
link:仅链接可用
host:本机可用
[broadcast ADDRESS]
ip addr show
[dev DEVICE]
[label PATTERN]
[primary and secondary]
ip address flush - flush protocol addresses
使用格式同show
ip route
ip route add
添加路由:ip route add TARGET via GW dev IFACE src SOURCE_IP
TARGET:
主机路由:ip
网络路由:NETWORK/MASK
添加网关:ip route add default via GW dev IFACE
ip route delete
删除路由:ip route del TARGET
ip route show
ip route flush
dev IFACE:
via PREFIX:
ss命令:
格式:ss [OPTION]... [FILTER]
选项:
-t:tcp协议相关
-u:upd协议相关
-w:裸套接字相关
-x:unix sock相关
-l:listen状态的连接
-a:所有
-n:数字格式
-p:相关的程序及PID
-e:扩展的信息
-m:内存用量
-o:计时器信息
FILTER := [stat TCP-STATE] [EXPRESSION]
TCP的常见状态:
tcp finite state machine
LISTEN:监听
ESTABLISHED:已建立的连接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
EXPRESSION:
dport
sport = :22
示例:'( dport = :ssh or sport = :ssh )'
常用组合:
-tan,-tanl,-tanlp,-uan
Linux网络属性配置(3):修改配置文件
IP,MASK,GW,DNS相关配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
路由相关的配置文件(默认不存在):/etc/sysconfig/network-scripts/route-IFACE
/etc/sysconfig/network-scripts/ifcfg-IFACE:
DEVICE:此配置文件应用到的设备
HWADDR:对应的设备MAC地址
TYPE:接口类型,常见的有Ethernet,Bridge
UUID:设备唯一标识
ONBOOT:在系统引导时是否激活此设备
NM_CONTROLLED:NM是NetworkManager简写,此网卡是否接受NM控制,CentOS6建议为no
BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp,static,none,bootp
IPADDR:指明ip地址
NETMASK:子网掩码
GATEWAY:默认网关
DNS1:第一个DNS服务器指向
DNS2:第二个DNS服务器指向
USERCTL:普通用户是否可控制此设备
PEERDNS:如果BOOTPROTO的值为DHCP,是否允许DHCP服务器分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件
/etc/sysconfig/network-scripts/route-IFACE:
两种风格:
1.TARGET via GW
2.每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
给网卡配置多地址:
ifconfig
ifconfig IFACE_ALIAS
ip
ip addr add
配置文件:
ifcfg-IFACE_ALIAS
DEVICE=IFACE_ALIAS
注意:网卡别名不能使用dhcp协议引导
Linux网络属性配置的tui(text user interface)
system-config-network-tui
也可以使用setup找到
注:记得重启网络服务
配置当前主机的主机名:
hostname [HOSTNAME]
/etc/sysconfig/network
HOSTNAME=
网络接口识别并命名相关的udev配置文件:
/etc/udev/rules.d/70-persistent-net.rules
lsmod 查看硬件驱动
卸载网卡驱动:
modprobe -r e1000
装载网卡驱动:
modprobe e1000
CentOS 7 网络属性配置:
传统命名:以太网eth[0,1,2..],wlan[0,1,2..]
可预测功能:
udev支持多种不同的命名方案
Firmware,拓扑结构
1.网卡命名机制:
systemd对网络设备的命名方式:
a.如果firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测,则根据此索引进行命名,例如eno1
b.如果firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如eth1
c:如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0
d:如果用户显式启动,也可根据MAC地址进行命名,enx2387a1dc56
e:上述均不可用时,则使用传统命名机制
上述命名机制中,有的需要biosdevname程序的参与
2.名称组成格式:
en:ethernet
wl:wlan
ww:wwan
名称类型:
o<index>:集成设备的设备索引号
s<slot>:扩展槽的索引号
x<MAC>:基于MAC地址的命名
p<bus>s<slot>:enp2s1
网卡设备的命名过程:
第一步:
udev,辅助工具程序/lib/udev/rename_device,/usr/lib/udev/rules.d/60-net.rules
第二步:
biosdevname根据/usr/lib/udev/rules.d/71-biosdevname.rules
第三步:
通过检测网络接口设备,根据/usr/lib/udev/rules.d/75-net-description
ID_NET_NAME_ONBOARD,ID_NET_NAME_SLOT,ID_NET_NAME_PATH
回归传统命名方式:
1.编辑/etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0 rhgb quiet"
2.位grub2生产其配置文件
grub2-mkconfig -o /etc/grub2.cfg
3.重启系统
地址配置工具:nmcli
nmcli  [ OPTIONS ] OBJECT { COMMAND | help }
device 
connection
如何修改IP地址等属性:
nmcli connection modify IFACE [+|-] setting.property value
setting.property
ipv4.addresses
ipv4.gateway
ipv4.dns1
ipv4.method
manual
网络接口配置tui工具:nmtui
主机名称配置工具:hostnamectl
status
set-hostname
网络客户端工具:
lftp,ftp,lftpget,wget
lftp [-p port ] [-u user[,password]] SERVER
子命令:
get
mget
ls
help
lftpget URL
ftp
wget [option]... [URL]...
-q:静默模式
-c:续传
-O:保存位置
--limit-rates=:指定传输速率
Linux进程及作业管理:
内核的功用:进程管理,文件系统,网络功能,内存管理,驱动程序,安全功能
Process:运行中程序的一个副本
存在生命周期
Linux内核存储进程信息的固定格式:task struct
多个任务的task struct组件的链表:task list
进程创建:
init
父子关系
进程:都由其父进程创建
fork(),clone()
进程优先级:
0-139
1-99:实时优先级
数字越大,优先级越高
100-139:静态优先级
数字越小,优先级越高
Nice值:
-20,19
Big O
O(1),O(logn),O(n),O(n^2),O(2^n)
进程内存:
Page Frame:页框.用来存储页面数据
存储Page
MMU:Memory Management Unit
IPC:Inter Process Communication
同一主机上:
signal
shm:shared memory
semerphor
不同主机上:
rpc:remote procecure call
socket:
Linux内核:抢占式多任务
进程类型:
守护进程:daemon,在系统引导过程中启动的进程,跟终端无关的进程
前台进程:跟终端相关,通过终端启动的进程
注意:也可把在前台启动的进程送往后台,以守护模式运行
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:暂停于内存中,但不会被调度,除非手动启动,stopped
僵死态:zombie
进程的分类:
CPU-Bound
IO-Bound
《Linux内核设计与实现》 《深入理解Linux内核》
Linux进程查看及管理的工具:pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup
pstree:
pstree - display a tree of processes
ps:process state
ps - report a snapshot of the current processes.
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
ps [OPTION]..
选项:支持两种风格
常用组合:aux
u:以用户为中心组织进程状态信息显示
a:与终端相关的进程
x:与终端无关的进程
ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
VSZ:Virtual memory SiZe,虚拟内存集
RSS:ReSident Size,常驻内存集
STAT:进程状态
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:stopped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader
常用组合:-ef
-e:显示所有进程
-f:显示完整格式的程序信息
常用组合:-eFH
-F:显示完整格式的进程信息
-H:以进程层级格式显示进程相关信息
常用组合:-eo,axo
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -Ao pid,tt,user,fname,tmout,f,wchan
ni:nice值
pri:priority,优先级
psr:processor.CPU
rtprio:实时优先级
pgrep,pkill:
pgrep [option] pattern
pkill [option] pattern
-u uid:effective user
-U uid:real user
-t terminal:与指定终端相关进程
-l:显示进程名
-a:显示完整格式的进程名
-P pid:显示其父进程为此处指定的进程的进程列表
pidof:
根据进程名获取pid
top:
有许多内置命令:
排序:
P:以占据的CPU百分比
M:占据内存百分比
T:累计占据CPU时长
首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1
memory信息:m命令
退出:q
修改刷新时间间隔:s
终止指定进程:k
选项:
-d #:指定刷新时间间隔,默认3秒
-b:以批次方式
-n #:显示多少批次
htop命令:
选项:
-d #:指定延迟时间
-u username:仅显示指定用户的进程
-s COLOMN:以指定字段进行排序
命令:
s:跟踪选定进程的系统调用
l:跟踪选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t:显示进程树
注意:Fedora-EPEL源
回顾:
Linux基础:
CPU:timeslice
memory:线性地址空间
I/O:
分时复用
进程查看工具:pstree,os,pgrep,pidof,top,htop
Linux进程查看及管理2:
vmstat:
vmstat [options] [delay [count]]
procs:
r:等待运行的进程的个数
b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
memory:
swpd:交换内存的使用总量
free:空闲物理内存总量
buff:用于buffer的内存总量
cache:用于cache的内存总量
swap:
si:数据进入swap中的数据速率(kb/s)
so:数据离开swap中的数据速率
io:
bi:从块设备读入数据到系统的速率(kb/s)
bo:保存数据至块设备的速率
system:
in:interrupts,中断速率
cs:context switch,进程切换速率
cpu:
us
sy
id
wa
st
选项:
-s:显示内存的统计数据
pmap命令:
pmap - report memory map of a process
pmap [options] pid [...]
-x:显示详细格式的信息
另外一种实现:
cat /proc/PID/maps
glances命令:
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
内建命令:
a  Sort processes automatically     l  Show/hide logs
c  Sort processes by CPU%           b  Bytes or bits for network I/O
m  Sort processes by MEM%           w  Delete warning logs
p  Sort processes by name           x  Delete warning and critical logs
i  Sort processes by I/O rate       1  Global CPU or per-CPU stats
d  Show/hide disk I/O stats         h  Show/hide this help screen
f  Show/hide file system stats      t  View network I/O as combination
n  Show/hide network stats          u  View cumulative network I/O
s  Show/hide sensors stats          q  Quit (Esc and Ctrl-C also work)
y  Show/hide hddtemp stats
常用选项:
-b:以byte为单位显示网卡数据速率
-d:关闭磁盘I/O模块
-f /path/to/somefile:设置输出文件的位置及格式
-o {HTML|CSV}:输出格式
-m:禁用mount模块
-n:禁用网络模块
-t #:延迟时间间隔
-1:每个CPU的相关数据单独显示
C/S模式下运行glances:
服务模式:
glances -s -B IPADDR
IPADDR:指明监听本机哪个地址
客户端模式:
glances -c IPADDR
IPADDR:服务器地址
dstat命令:
dstat [-afv] [options..] [delay [count]]
-c:显示cpu相关信息
-C #,#,...,total
-d:显示disk相关信息
-D total,sda,sdb..
-g:显示page相关统计数据
-m:显示memory相关统计数据
-n:显示network相关统计数据
-p:显示process相关统计数据
-r:显示io请求相关的统计数据
-s:显示swapped相关的统计数据
--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu:显示最占用CPU的进程
--top-io:显示最占用io的进程
--top-mem:显示最占内存的进程
--top-lantency:显示延迟最大的进程
kill命令:
向进程发送控制信号,以实现进程管理
显示当前系统可用信号:
kill -l
man 7 signal
常用信号:
1.SIGHUP:无须关闭进程而让其重读配置文件
2.SIGINI:终止正在运行的进程,相当于ctrl+c
9.SIGKILL:杀死正在运行的进程
15.SIGTERM:终止正在运行的进程
18.SIGCONT
19.SIGSTOP
指定信号的方法:
1.信号的数字表示:1,2,9
2.信号完整名称,SIGHUP
3.信号的简写名称,HUP
向进程发信号:
kill [-SIGNAL] PID
终止名称之下的所有进程:
killall [-SIGNAL] program
Linux的作业控制:
前台作业:通过终端启动,且启动后一直占据终端
后台作业:可以通过终端启动,但启动后即转入后台运行(释放终端)
如何让作业运行于后台:
1.运行中的作业:
ctrl+z
2.尚未启动的作业:
COMMAND &
此类作业虽然被送往后台运行,但其依然与终端相关;如果希望送往后台后,剥离与终端的关系:
nohup COMMAND &
查看所有作业情况:
jobs
作业控制:
fg [[%]JOB_NUM]:把指定的后台作业调回前台
bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
kill [%JOB_NUM]:终止指定的作业
进程优先级调整:
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120
nice命令:
nice [OPTION] [COMMAND [ARG]...]
nice,renice
renice命令:
renice [-n] priority pid...
查看:
ps axo pid,comm,ni
未涉及到的命令:sar,tsar,iostat,iftop
Linux任务计划,周期性任务执行:
未来的某时间点执行一次任务:at,batch
周期性运行某任务:cron
电子邮件服务:
smtp:simple mail transmission protocol,用于传送邮件
pop3:post office protocol
imap4:Internet mail access protocol
mailx - send and receive internet mail
MUA:mail user agent
mailx [-s 'SUBJECT'] username[@localhost]
邮件正文的生成:
1.直接给出,ctrl+d
2.输入重定向
3.通过管道
echo -e "" | mail
mailx
at命令:
at [option] TIME
TIME:
HH:MM [YYYY-mm-dd]
noon,midnight,teatime
tomorrow
now+#(minutes,hours,days,OR weeks)
常用选项:
-q QUEUE:
-l:列出指定队列中等待运行的作业,相当于atq
-d:删除指定的作业.相当于atrm
-c:查看具体作业任务
-f /path/from/somefile:从指定的文件中读取任务
注意:作业的执行结果以邮件通知给相关用户
batch命令:
让系统自行选择空闲时间去执行此处指定的任务
周期性任务计划:cron
相关的程序包:
cronie:主程序包,提供了crond守护进程及相关辅助工具
cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况.如果cronie中的任务在过去应该运行的时间点未能运行,则anacron会随后启动一次此任务
crontabs:包含CentOS提供系统维护任务
确保crond守护进程处于运行状态
CentOS7:
systemctl status crond
CentOS6:
service crond status
计划要周期性执行的任务提交给crond,由其来实现到点运行
系统cron任务:
/etc/crontab
用户cron任务:
crontab任务
系统cron任务:
# Example 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
例如:晚上9点10分运行echo命令
10 21 * * * gentoo /bin/echo "e"
时间表示法:
1.特定值:
给定时间点有效取值范围内的值
2.*
给定时间点上有效取值范围内的所有值
表示 每...
3.离散取值,
#,#,#
4.连续取值:-
#-#
5.在指定时间范围上,定义步长
/#:#即为步长
*/3
例如:每3小时echo命令
0 */3 * * * gentoo /bin/echo "howdy!"
用户cron:
crontab命令定义:每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME
crontab命令:
crontab [-u user] [-l | -r | -e] [-i] [-s]
-l:列出所有任务
-e:编辑任务
-r:移除所有任务
-i:同-r一同使用,有选择的移除指定任务,交互模式
-u user:仅root可运行,代为为指定用户创建cron任务
注意:运行结果以邮件通知给相关用户
1.COMMAND > /dev/null
2.COMMAND &> /dev/null
对于cron任务来讲,%有特殊用途,如果在命令中要使用%,则需要转义.不过,如果把%放置于单引号中,也可用不用转义
思考:
1.如何在秒级别运行任务
* * * * * for min in 0 1 2;do echo "h1";sleep 20;done
2.如何实现每7分钟运行一次任务
sleep命令:
sleep NUMBER[SUFFIX]...
SUFFIX:
s:秒
m:分
h:小时
d:天
练习:
1.每4小时备份一次/etc目录至/backup目录中,保存的文件名称格式为"etc-yyyy-mm-dd-HH.tar.xz"
2.每周2,4,7备份/var/log/message文件至/logs目录中,文件名"message-yyyymmdd"
3.每2小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中
4.工作日时间内,每小时执行一次ip addr show命令
posted @ 2017-07-10 14:33  Redheat  阅读(714)  评论(0编辑  收藏  举报