一网络配置
1.将Linux主机接入到网络,需要配置网络相关设置
主机名
IP/netmask
路由:默认网关
DNS服务器
2.网络配置命令
配置网络接口 ifconfig命令
ifconfig [interface]
ifconfig -a
ifconfig IFACE [up|down]
路由管理命令 route 命令
查看:route -n
添加:route add
删除:route del
显示网络连接 netstat命令
-t: tcp协议相关
-u: udp协议相关
-w: raw socket相关
-l: 处于监听状态
-a: 所有状态
-n: 以数字显示IP和端口
-e:扩展格式
-p: 显示相关进程及PID
配置Linux网络属性:ip 命令
ip addr { add | del } IFADDR dev STRING
[label LABEL]:添加地址时指明网卡别名
[scope {global|link|host}]:指明作用域
global: 全局可用
link: 仅链接可用
host: 本机可用
添加路由:ip route add
主机路由:IP 网络路由:NETWORK/MASK
添加网关:ip route add default via GW dev IFACE
删除路由:ip route del TARGET
显示路由:ip route show|list
清空路由表:ip route flush [dev IFACE]
ss命令
-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established 显示所有已建立的 ssh连接
ss -o state established 显示所有已建立 的HTTP连接
ss -s 列出当前socket详细信息
3.网络配置文件
IP、MASK、GW、DNS相关配置文件
/etc/sysconfig/networkscripts/ifcfg-IFACE
路由相关的配置文件
/etc/sysconfig/network-scripts/route-IFACE
/etc/sysconfig/network-scripts/ifcfg-IFACE
注意:需service network restart生效
ONBOOT:在系统引导时是否激活此设备
TYPE:接口类型;常见有的Ethernet, Bridge
UUID:设备的惟一标识
IPADDR:指明IP地址
NETMASK:子网掩码
GATEWAY: 默认网关
DNS1:第一个DNS服务器指向
DNS2:第二个DNS服务器指向
USERCTL:普通用户是否可控制此设备
PEERDNS:如果BOOTPROTO的值为“dhcp”,YES将允许dhcp server分配 的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
配置当前主机的主机名:
hostname [HOSTNAME] /etc/sysconfig/network
bonding配置
创建bonding设备的配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS= “miimon=100 mode=0”
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
查看bond0状态:/proc/net/bonding/bond0
删除bond0
ifconfig bond0 down
rmmod bonding
创建软件网桥
nmcli con add con-name mybr0 type bridge con-name br0 ifname br0
nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual
nmcli con add con-name br0-port0 type bridge-slave ifname eth0 master br0
查看配置文件
cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
工具包 yum install bridge-utils
查看网桥 brctl show
查看CAM表 brctl showmacs br0
添加和删除网桥 brctl addbr | delbr br0
添加和删除网桥中网卡 brctl addif | delif br0 eth0
注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口
二进程和计划任务
内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
Process: 运行中的程序的一个副本,是被载入内存的一个指令集合
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID、和SELinux语境决定对文件系统的存取和访问权限
通常从执行进程的用户来继承
进程创建:
init:第一个进程
进程:都由其父进程创建,fork(),父子关系,CoW
进程类型:
守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
睡眠态:可中断:interruptable 不可中断uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
进程优先级:
系统优先级:数字越小,优先级越高
0-139:各有140个运行队列和过期队列
实时优先级: 99-0 值最大优先级最高
nice值:-20到19,对应系统优先级100-139
查看进程命令ps
选项:默认显示当前终端中的进程
a 选项包括所有终端中的进程
x 选项包括不链接终端的进程
u 选项显示进程所有者的信息
f 选项显示进程树,相当于 --forest
k|--sort 属性 对属性排序,属性前加- 表示倒序
o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
L 显示支持的属性列表
搜索进程
最灵活:ps 选项 | 其它命令
按预定义的模式:
pgrep pgrep [options] pattern
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程
按确切的程序名称:/sbin/pidof pidof bash
kill命令:向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开 头(可省略),不区分大小写
显示当前系统可用信号: kill –l 或者 trap -l
常用信号:man 7 signal
1) SIGHUP 无须关闭进程而让其重读配置文件
2) SIGINT 中止正在运行的进程;相当于Ctrl+c
3) SIGQUIT 相当于ctrl+\
9) SIGKILL 强制杀死正在运行的进程
15) SIGTERM 终止正在运行的进程
18) SIGCONT 继续运行
19) SIGSTOP 后台休眠
并行运行
同时运行多个进程,提高效率
方法1
vi all.sh f1.sh& f2.sh& f3.sh&
方法2 (f1.sh&);(f2.sh&);(f3.sh&)
方法3 { f1.sh& f2.sh& f3.sh& }
计划任务
at 命令:at [option] TIME
常用选项:
-V 显示版本信息
-t time 时间格式 [[CC]YY]MMDDhhmm[.ss]
-l 列出指定队列中等待运行的作业;相当于atq
-d 删除指定的作业;相当于atrm
-c 查看具体作业任务
-f /path/file 指定的文件中读取任务
-m 当任务被完成之后,将给用户发送邮件,即使没有标准输出
周期性任务计划:cron
相关的程序包:
cronie:主程序包,提供crond守护进程及相关辅助工具
crontabs:包含CentOS提供系统维护任务
系统cron任务:/etc/crontab
时间格式
yearly 0 0 1 1 *
annually 0 0 1 1 *
monthly 0 0 1 * *
weekly 0 0 * * 0
daily 0 0 * * *
hourly 0 * * * *
reboot Run once after reboot
系统的计划任务:
/etc/crontab 配置文件
/etc/cron.d/ 配置文件
/etc/cron.hourly/ 脚本
/etc/cron.daily/ 脚本
/etc/cron.weekly/ 脚本
/etc/cron.monthly/ 脚本
三sehll脚本进阶
for循环
for 变量名 in 列表;do 循环体 done
执行机制: 依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直 到列表中的元素耗尽,循环结束
列表生成方式:
(1) 直接给出列表
(2) 整数列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的命令 $(COMMAND)
(4) 使用glob,如:*.sh
(5) 变量引用 $@, $*
while循环
while CONDITION; do 循环体 done
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后 会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false” 终止循环
因此CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被 修正
进入条件:CONDITION为true
退出条件:CONDITION为false
循环控制语句
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为 第1层
while CONDTIITON1; do CMD1 ...
if CONDITION2; then continue
fi CMDn ... done
break [N]:提前结束第N层循环,最内层为第1层
while CONDTIITON1; do CMD1 ...
if CONDITION2; then break
fi CMDn ... done
shift [n]
用于将参量列表 list 左移指定次数,缺省为左移一次。
参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍 历位置参量列表时,常用到 shift
./doit.sh a b c d e f g h ?./shfit.sh a b c d e f g h
select循环与菜单
select variable in list do 循环体命令 done
select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上, 并显示 PS3 提示符,等待用户输入
用户输入菜单列表中的某个数字,执行相应的命令
用户输入被保存在内置变量 REPLY 中
select 是个无限循环,因此要记住用 break 命令退出循环,或用 exit 命令终止 脚本。也可以按 ctrl+c 退出循环
select 经常和 case 联合使用
与 for 循环类似,可以省略 in list,此时使用位置参量
函数
函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程
它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运 行,而是shell程序的一部分
函数和shell程序比较相似,区别在于
Shell程序在子Shell中运行
Shell函数在当前Shell中运行。因此在当前Shell中,函数可以对shell中变 量进行修改
定义函数
函数由两部分组成:函数名和函数体
语法一:
f_name (){
...函数体...
}
语法二:
function f_name {
...函数体...
}
语法三:
function f_name () {
...函数体...
}
函数的定义和使用:
可在交互式环境下定义函数
可将函数放在脚本文件中作为它的一部分
可放在只包含函数的单独文件中
调用:函数只有被调用才会执行
调用:给定函数名
函数名出现的地方,会被自动替换为函数代码
函数的生命周期:被调用时创建,返回时终止
函数返回值:
函数的执行结果返回值:
(1) 使用echo等命令进行输出
(2) 函数体中调用命令的输出结果
函数的退出状态码:
(1) 默认取决于函数中执行的最后一条命令的退出状态码
(2) 自定义退出状态码,其格式为:
return 从函数中返回,用最后状态命令决定返回值
return 0 无错误返回
return 1-255 有错误返回
交互式环境定义使用函数
示例:
dir() {
> ls -l
> > }
定义该函数后,若在$后面键入dir,其显示结果同ls -l的作用相同 dir
该dir函数将一直保留到用户从系统退出,或执行了如下所示的unset命令 unset dir
脚本中定义使用函数
函数在使用前必须定义,因此应将函数定义放在脚本开始部分,直至shell首次发现它 后才能使用
调用函数仅使用其函数名即可
使用函数文件
可以将经常使用的函数存入函数文件,然后将函数文件载入shell
文件名可任意选取,但最好与相关任务有某种联系。例如:functions.main
一旦函数文件载入shell,就可以在命令行或脚本中调用函数。可以使用set命 令查看所有定义的函数,其输出列表包括已经载入shell的所有函数
若要改动函数,首先用unset命令从shell中删除函数。改动完毕后,再重新载 入此文件
函数可以接受参数:
传递参数给函数:调用函数时,在函数名后面以空白分隔给定参数列表即可; 例如“testfunc arg1 arg2 ...”
在函数体中当中,可使用$1, $2, ...调用这些参数;还可以使用$@, $*, $# 等特殊变量
函数变量
变量作用域:
环境变量:当前shell和子shell有效
本地变量:只在当前shell进程有效,为执行脚本会启动专用子shell进程; 因此,本地变量的作用范围是当前shell脚本程序文件,包括脚本中的函数
局部变量:函数的生命周期;函数结束时变量被自动销毁 ?
注意:如果函数中有局部变量,如果其名称同本地变量,使用局部变量
在函数中定义局部变量的方法 local NAME=VALUE
数组
变量:存储单个元素的内存空间
数组:存储多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引
索引:编号从0开始,属于数值索引
注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引, bash4.0版本之后开始支持
bash的数组支持稀疏格式(索引不连续)
声明数组:
declare -a ARRAY_NAME
declare -A ARRAY_NAME 关联数组
注意:两者不可相互转换
expect命令
选项
-c:从命令行执行expect脚本,默认expect是交互地执行的
-d:可以输出输出调试信息
expect中相关命令
spawn 启动新的进程
send 用于向进程发送字符串
expect 从进程接收字符串
interact 允许用户交互
exp_continue 匹配多个字符串在执行动作后加此命令
原文:https://blog.51cto.com/14451156/2432371