linux基础
#       Linux
  bond
添加bond:
1、创建个 ifcfg-bond0文件
2、DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.38.100
PREFIX=24
GATEWAY=192.168.38.2
DNS=180.76.76.76
BONDING_OPTS="mode=1 miimon=100"
3、添加从属网卡 vim ifcfg-eth0
DEVICE=eth0
MASKER=bond0
SLAVE=yes
vim ifcfg-eth1
DEVICE=eth1
MASKER=bond0
SLAVE=yes
4、cat /proc/net/bonding/bond0 可以查看当前用的是哪块网卡
ifconfig -a 查看所有活动和禁用的网卡
删除bond
1、rm -f ifcfg-bond0
2、修改改过的eth0 eth1网卡
3、lsmod | grep bond 查看bond的驱动模块
4、rmmod bonding 删除bond驱动模块
5、启用eth1 eth0 网卡
centos7网卡配置
centos7更改网卡名称,在/etc/default/grub,在倒数第二行的后面加上 net.ifnames=0
改完之后,执行 grub2-mkconfig -o /boot/grub2/grub.cfg 把/boot/grub2/grub.cfg 覆盖
ubuntu
和centos7相似,就是最后覆盖命令是 grub-mkconfig -o /boot/grub/grub.cfg
ubuntu 网卡配置文件
1、/etc/netplan/01-netcfg.yaml yaml格式的文件必须严格遵守格式
2、把ens33: 改成eth0:
3、netplan apply ubuntu重启网络服务
手动配置ubuntu网卡配置文件
eth0:
addresses:
- 192.168.38.9/24
- 10.0.0.9/8
gateway4: 192.168.38.2
nameservers:
search: [magedu.com, example.com] 域名后缀
addresses: [ 180.76.76.76, 114.114.114.114]
cat /run/systemd/resolve/stub-resolv,conf 查看生成的域后缀
systemd resolve --status 查看DNS
ubuntu 改主机名文件 /etc/hostname
改主机名和配置文件命令和centos7一样
centos7 主机名的配置文件 /etc/hostname
hostnamectl set-hostname centos7.6 更改cento7的主机名,连着配置文件一起改,改完之后再更改 /etc/hosts文件,在127后面加上新的主机名字 centos7.6
nm-connection-editor 图形界面更改网卡配置工具
nmtui 更改网卡配置工具
nmcli device 查看网卡状态 (主要查看数据链路层)
nmcli device show eth1 显示eth1网卡的详细信息
nmcli connection 查看当前网卡连接状态 (主要查看网络层)
nmcli connection reload 加载一下修改完的网卡配置文件
nmcli connection add con-name con-home-eth0 type ethernet ifname eth0 ipv4.method manual ipv4.addresses 10.0.0.100/24 ipv4.gateway 10.0.0.1 给同一块网卡添加多个不同的IP的配置文件
nmcli connection up con-home-eth0 启用名字为con-home-eth0这个配置文件的IP
nmcli connection modify con-home-eth0 connection.id con-house-eth0 给con-home-eth0这个网卡的名字修改为con-house-eth0
nmcli connection modify con-house-eth0 autoconnect no 把这个名字的网卡IP,设置为开机不启动
nmcli connection modify con-house-eth0 +ipv4.addresses 1.1.1.1/24 给con-house-eth0这个名字的网卡增加一个ip地址
nmcli connection delete con-house-eth0 删除这个名字的网卡IP和配置文件
ifconfig eht0 0 清除ip地址
lsmod 查看加载到内存里的驱动模块
brctl show 查看网桥的具体信息
brctl stp
brctl stp br0 on 启动br0设备的生成树协议
使用 nmcli 添加bond
1、nmcli connection add type bond con-name mybond0 ifname bond0 mode active-backup ipv4.method manual ipv4.addresses 192.168.38.200/24 ipv4.gateway 192.168.38.2
2、添加从属设备
nmcli connection add type bond-slave master mybond0 ifname eth0
nmcli connection add type bond-slave master mybond0 ifname eth1
3、启用设备
nmcli connetcion up bond-slave-eth0
nmcli connetcion up bond-slave-eth1
卸载bond设备
1、nmcli connection down mybond0 先down掉mybond0
2、nmcli connection delete mybond0 bond-slave-eth{0,1} 删除网卡状态和配置文件及其从属设备
网桥
linux可以充当网桥
路由器两边网段不能一样
网桥的作用就是把物理上不是一个网段的两台设备接通,可以相互通信
网桥本身不用配IP地址,但如果是为了管理用,可以配IP地址
配置网桥 (临时配置)
hostA (vmnet8)--------------(vmnet8)网桥 (vmnet1) -----------------------------(vmnet1)hostB
hostA IP:192.168.38.6/24
hostB IP: 192.168.38.16/24
1、清除网桥上的IP地址 ifconfig eth0 0
ifconfig eth1 0
2、brctl addbr br0 创建名为br0的网桥
3、brctl addif br0 eth0 给br0这个网桥设备添加两个网卡设备
brctl addif br0 eth1
4、启动网桥
ip link set br0 up
5、如果想远程管理充当网桥的Linux主机就得给网桥配IP
ifconfig br0 192.168.38.123/24
虚拟机桥接模式就是把windows物理网卡模拟成一个交换机或者是网桥,然后把物理网卡的网线插到虚拟交换机上,桥接网卡插到虚拟交换机上,这样虚拟机就可以和物理网络连通了
删除网桥
brctl delbr br0 删除br0网桥
brctl delif br0 eth1 删除br0网桥里面的接口
brctl delif br0 eth0
长期配置网桥,生成配置文件
1、nmcli connection add type bridge con-name mybr0 ifname br0 创建网桥br0
2、nmcli connection add type bridge-slave con-name br0-port0 ifname eth0 master br0 往网桥里添加设备
mcli connection add type bridge-slave con-name br0-port1 ifname eth1 master br0
3、nmcli connection up br0-port0 启动网卡
nmcli connection up br0-port1
nmcli connection up mybr0
删除网桥和配置文件
1、nmcli connection down mybr0 删除之前先down掉br0这个网桥
2、nmcli connection delete mybr0 br0-port{0,1} 删除网桥和两个从属设备
进程在运行的时候,内存会分配给他五个内存空间
进程是资源使用单位
线程是执行单位
tail -f /var/log/messages 跟踪messages文件
ls /prco/16002 查看16002这个进程所使用的资源
pstree -p 查看进程信息,可以看到PID
ps 显示当前终端开启的进程
ps aux a表示查看所有进程,x 表示包括和终端无关的进程,u表示查看以谁的身份执行进程
用户一登录就会开启个bash
ps auxf 可以看到父子进程关系
ps L 查看可以挑选的属性
ps axo pid,%cpu,%mem,cmd 挑选查看进程,如pid,cpu等
ps axo pid,%cpu.%mem.cmd k -%cpu 按照CPU大小进行倒序排序
ps -ef 查看进程详细信息
ps axo pid,%cpu,%mem,cmd,psr 还可以查看进程使用的是哪颗cpu
ps axo pid,%cpu,%mem,cmd,nice 可以查看进程nice优先级
nice -n -20 ping -f 127.0.0.2 指定ping命令的nice优先级为-20
ps axo pid,%cpu,%mem,cmd,nice,pri 可以查看进程的ps优先级
renice -n 10 27886 从新设置27886这个进程编号的进程优先级为10
ps axo pid,%cpu,%mem,cmd,rtprio 可以查看进程的实时优先级
ps axo pid,cmd,user,ruser 查看进程的真正执行者
pgrep -U dong 查看真正以dong用户执行的进程
pgrep -u dong 查看dong用户执行生效的进程
pgrep -lu dong 查看dong用户执行生效的进程和命令
pgrep -aU dong 查看真正以dong用户执行的进程和路径
pgrep -aP 66371 查看66371这个进程编号的子进程是谁
pgrep -t pts/0 查看pts0这个终端的进程
pgrep -l "^pin" 查看以pin开头的进程,pgrep支持正则表达式
pidof ping 查看ping命令的进程编号
ls /proc/`pidof tail`/fd -l 查看tail命令打开了哪些文件
/proc/uptime 记录了开机时长和cpu空闲时间
uptime 显示时间和负载信息
top 实时跟踪进程状态 在TOP 中按M,P,T可以按CPU 内存,时间等情况进行排序,还有上面显示栏的按键,如 l、t、1、m;s:设置刷新间隔 k:杀掉进程
top -H -p `pidof mysqld` 查看mysql进程编号的线程列表
echo 3 > /proc/sys/vm/drop_caches 释放buffer和cache空间
vmstat 查看空间情况
vmstat 1 1秒钟刷新一次
dd if=/dev/sda of=/dev/null 从磁盘读
dd if=/dev/zero of=/data/f1 bs=1G count=1 往磁盘里写
iostat 查看磁盘的io
iostat 1 10 一秒钟刷新一次,显示10秒
iftop -n -i eth0 监控eth0网卡
pmap 1 查看进程编号为1的进程使用内存情况
pmap -x 1 显示更详细的进程内存使用情况
ss -ntl 查看端口状态
glances 只能适用于同一个版本的centos
glances -s 充当服务器端
glances -c 192.168.38.7 充当客户端,监控192.168.38.7这个服务器
dstat 是vmstat iostat 的结合,可以观察磁盘io和网络io
dstat 1 10 一秒一次,扫描十秒
iotop 查看磁盘io情况
nload 监控网卡情况
nload eth0 eth1 显示两个网卡的情况
lsof -c tail 查看tail这个进程都打开了哪些文件
lsof -d 1 查看文件编号为1的进程
lsof -p `pidof tail` 查看这个进程编号的进程所打开的有哪些文件
lsof +D /var/log 递归显示被打开的文件
lsof 恢复正在运行中被删除的文件(前提是这个文件正在运行中,如果是没有被访问的文件被删除,则无法恢复)
1、lsof | grep ana 查看进程是不是在访问中的,然后看看访问文件用的是什么命令
2、pidof tail 查看进程的进程编号
3、ls /proc/`pidof tail`/fd 看看能不能在访问进程所打开的文件中找到删除的文件
4、cat /proc/`pidof tail`/fd/3 看看删除的文件能不能看
5、cat /proc/`pidof tail`/fd/3 > /root/a.txt 把文件的内容存放在root目录下的a.txt文件中
6、mv /root/a.txt /root/anaconda-ks.cfg 然后把a.txt改成原来文件的名字
kill -l 列出kill的信号
rpm -qc bash 查看bash的配置文件
配置文件可以用source生效,或者是 .
kill -1 32143 重读这个进程编号的配置文件
kill -2 `pidof ping` 终止这个进程
kill -3 `pidof bc` 关闭进程
kill `pidof bc` 杀进程,默认是 -15
kill -9 27309 强制杀进程
killall ping 终止所有ping进程
systemctl status autofs 查看服务启动状态
kill -0 6620 查看进程状态 配合 echo $?
killall -0 automount 查看进程状态 配合 echo $?
killall -0 automount &> /dev/null || systemctl restart autofs 如果前面是正确的,就不执行后续操作,如果是错的,就执行后续操作
systemctl stop autofs 终止服务
systemctl restart autofs 重新启动服务
pgrep -lU dong 显示真正以dong用户开启的进程的进程编号及进程名称
pkill -9 -U dong 把真正以dong执行的进程强制杀掉
pkill sle.* 杀掉sleep进程,pkill支持正则表达式
sleep 100 & 把sleep命令放到后台运行 后台运行不占用终端资源,前台运行占用终端资源
ctrl + z 把正在运行的进程放到后台运行,但是是停止状态
jobs 可以看到处于后台运行的所有进程
bg 1 把后台处于休眠状态的1进程变成运行状态,但还是在后台工作
fg 1 把后台工作的1进程放到前台工作,也可以把后台休眠的也放到前台
killall -19 ping 把运行中的进程变成停止状态
killall -18 ping 把停止中的进程变成运行状态
screen 创建一个screen窗口,防止备份的时候误关闭终端,造成备份失败
screen -ls 查看当前都有哪几个screen会话
screen -r 加入screen 会话
nohup ping 127.1 &> /dev/null nohup也是防止终端关闭造成进程结束,会自动在当前目录中生成一个nohup.out文件,要想不生成文件,就把标准输出放到垃圾箱中,也可以后端执行进程 nohup ping 127.1 &> /dev/null &
kill %1 结束1这个作业编号的进程
(ping 127.1&);(ping 127.2&) 同时执行两个进程,开两个子进程,但是是作为系统的第一个进程的两个子进程
{ ping 127.1& ping 127.2& } 并行执行两个进程,是所谓bash的两个子进程
计划任务
包里看到service的就得启动起来
systemctl status atd 查看服务当前状态
at 10:10 在10点10分的时候执行下面的任务
wall at job (广播)
touch /data/a.txt
echo "echo at job"|at 10:05 计划任务会把标准输出发送到邮件中,计划任务的脚本不要带标准输出的命令
at -l 查看计划任务列表
at 10:00 < at.txt 计划任务支持标准输入,把要执行的计划任务放到一个文件中
at 10:12 <<EOF 计划任务支持多层重定向
at -f at.txt 10:00 10点执行at.txt文件中的计划任务
at -c 6 查看6这个计划任务的内容
at -d 10 删除10这个计划任务
atrm 7 删除7这个计划任务
atq=at -l
at now+10minutes 现在开始10分钟之后发送个广播
wall at job
白名单 ( /etc/allow ):白名单里面有的人,则可以执行计划任务;白名单里没有的人,则不可以执行计划任务
黑名单 ( /etc/deny ):黑名单里有的人,不能执行计划任务;黑名单里没有的人,则可以执行计划任务
执行计划任务顺序:先看白名单,白名单里面有人,则直接生效白名单;白名单里没有人,看黑名单,黑名单有人,则生效;两个名单文件都不存在,则只有root可以执行计划任务
run-parts /data/dir/ 可以让dir目录里的所有脚本都执行一遍
/etc/crontab 只有root才能执行的计划任务,往里面写计划任务 时间顺序:分、小时、天、月、星期 身份、具体文件 * 表示 每 的意思
/var/log/cron 计划任务的日志
date 082302292019.30 设置时间 顺序是 月、日、小时、分、年、秒
mail -s "disk warning" root 给root发邮件,标题是 disk warning
WARNING=10
USE=`df | sed -nr '/^\/dev\/sd/s#.* ([0-9]+).*$#\1#p'|sort -nr|head -1`
if [ $USE -gt $WARNING ];then
echo "Disk will be full"| mail -s "disk warning" root
fi
crontab -e 创建周期性的任务计划
里面的内容是 * * * * * /data/dir/disk.sh 普通用户也能执行,不用加用户,默认的是当前用户
*/10 * * * * 表示每10分钟 0 * * * * 表示每小时
0 * 1,10,20 1-10 0,6 0,6表示每周的周日周六 1-10表示每年的1月到10月 1,10,20 表示每月的1号,10号,20号 1,10,20 与 0,6 之间是或的关系,其余都是并且的关系
date +%w 看今天是周几
crontab -l 查看计划任务
crontab -l -u dong 查看dong 的计划任务
crontab -r -u dong 删除dong 的计划任务
crontab -e -u dong root可以修改dong的计划任务
crontab -e 创建的计划任务都在 /var/spool/cron/目录下
crontab -r -i dong 删除dong的所有计划任务,删除之前提示
计划任务想某一个时间一下做两个计划任务,就得用 ; 隔开,如 * * * * * touch f1 ; mkdir f2
0 0 1 1 * 表示每年的1月1号0点0分 周几不知道,用 * 表示
0 0 * * * 表示每天
0 * * * * 表示每小时
01 * * * * 表示每小时的第一分钟
cron也有黑白名单
time sleep 0.1 可以查看后面命令执行了多长时间
usleep 0. 1 usleep 可以精确到微秒 usleep后面跟的数字都是微秒
1秒=1000毫秒
1毫秒=1000微秒
sleep 1m 休眠1分钟
for循环适用于循环次数可以预知的情况
for i in 1 2 3 4 5 ;do echo i=$i;done 一个列表里的元素个数就决定了循环次数
for i in {1..10} ;do echo i=$i;done
for i in {a..z} ;do echo i=$i;done
for i in {1..10..2} ;do echo i=$i;done
for i in {10..1..-2} ;do echo i=$i;done
for i in `seq 2 10` ;do echo i=$i;done 2到10
n=10;for i in `seq $n`;do echo i=$i;done
seq 1 2 10 显示 1 3 5 7 9
seq 10 -2 1
for i in /data/dir/*.sh;do echo i=$i;done 支持通配符
sum+=i 就表示 sum=sum+i 如,sum=0 i=1 sum+=i就是sum=1; i=2,sum+=i,sum+i=sum 1+2=3
sum=0
for i in {1..100};do
let sum+=i
done
echo sum=$sum
seq -s + 100 设置seq的默认分隔符为+
cat /dev/urandom | tr -dc '0-9'|head -c6 生成6个随机数字
for i in {1..10};do userdel -r user$i;done
for i in {1..10};do
useradd user$i
PASS=`cat /dev/urandom | tr -dc '0-9'|head -c6`
echo "$PASS" | passwd --stdin user$i &>/dev/null
echo "user$i:$PASS" >> /data/pass.txt
passwd -e user$i &>/dev/null
echo "user$i is created"
done
NAME="xiaodong
xiaohua
xiaoliu
"
for i in $NAME;do
useradd $i
PASS=`cat /dev/urandom | tr -dc '0-9'|head -c6`
echo "$PASS" | passwd --stdin $i &>/dev/null
echo "$i:$PASS" >> /data/pass.txt
passwd -e $i &>/dev/null
echo "$i is created"
done
vim userlist.txt
FILENAME=`cat /data/script38/userlist.txt`
for i in $FILENAME;do
useradd $i
PASS=`cat /dev/urandom | tr -dc '0-9'|head -c6`
echo "$PASS" | passwd --stdin $i &>/dev/null
echo "$i:$PASS" >> /data/pass.txt
passwd -e $i &>/dev/null
echo "$i is created"
done
cd /data/dir/
for FILE in *;do
PRE=`echo "$FILE"|sed -nr 's/(^.*)\.[^.]+$/\1/p'`
mv $FILE $PRE.log
done
read -p "Please input the network(192.168.38.0): " NETWORK
net=`echo $NETWORK| cut -d. -f1-3`
for i in {1..254};do
{ ping -c1 -W1 $net.$i &> /dev/null && { echo $net.$i is up; echo $net.$i ip up >> /data/ip.txt; } || echo $net.$i is down& }
done
wait 完成之后直接退出,不继续等待
echo -n " * " 不换行,都在一行=echo -e “ *\c "
COLORBEGIN="\033[1;5;"
COLOREND="\033[0m"
for i in {1..10};do
for j in {1..6};do
COLOR="$[RANDOM%7+31]m"
echo -e "$COLORBEGIN$COLOR*$COLOREND\c"
done
echo
done
read -p "Please input the line: " LINE
read -p "Please input the colume: " COLUME
COLORBEGIN="\033[1;5;"
COLOREND="\033[0m"
for i in `seq 1 $LINE`;do
for j in `seq 1 $COLUME`;do
COLOR="$[RANDOM%7+31]m"
echo -e "$COLORBEGIN$COLOR*$COLOREND\c"
done
echo
done
for ((sum=0,i=1;i<=100;i++));do
let sum+=i
done
echo sum=$sum
while 适用于非数字循环
curl 192.168.38.7 访问这个ip
INTERVAL=20
while true ;do
if ! killall -0 httpd &>/dev/null;then
systemctl restart httpd &>/dev/null
echo httpd is restart at `date +"%F %T"` >> /var/log/while_check.log
fi
sleep $INTERVAL
done
echo -e '\033[1;41m \033[1;43m \033[0m'
for ((i=0;i<10;i++));do
for ((j=0;j<10;j++));do
if [ $j -eq 5 ];then
continue 2
fi
echo j=$j
done
echo i=$i
done
ss -nt | sed -nr '/^ESTA/s#.* ([^ ]+):.*$#\1#p'|sort|uniq -c|sort -nr
seq 10 |while read line ;do echo line:$line;done
while read line ;do echo line:$line;done < /etc/fstab
i=1
while [ $i -le 9 ];do
j=1
while [ $j -le 9 ];do
echo -e "*\c"
let j++
done
echo
let i++
done
echo a b | { read x y ;echo $x $y; } 这样可以不开启子进程
cho a b | while read x y ;do echo $x;echo $y;done
ss -nt | sed -nr '/^ESTA/s#.* ([^ ]+):.*$#\1#p'|sort|uniq -c|sort -nr|while read COUNT IP;do
if [ $COUNT -gt 100 ];then
iptables -A INPUT -s $IP -j REJECT
fi
done
iptables -A INPUT -s $IP -j REJECT 把ip扔到防火墙
iptables -vnL 查看防火墙列表
iptables -F 清空防火墙列表
df |sed -nr '/^\/dev\/sd/s#(^[^ ]+) .* ([^ ]+)%.*$#\1 \2#p'|while read DEVICE USE;do if [ $USE -gt 3 ];then wall $DEVICE will be full;fi;done
cat userlist.txt |while read USER;do userdel -r $USER; done
while :;do echo true;done :为死循环
-n 是判断不为空
-eq 等于
-ne 不等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于