Linux

早过忘川 提交于 2019-11-28 13:15:11

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 小于等于




















易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!