linux课堂

shell编程

eg1,简单输出

#!/bin/bash

echo "hello world"
var="qu ni ma"
echo $var


for file in $(ls /home/txdy827/share/);do  // 输出目录下的文件和目录
        echo "${file}"
done

输出如下

hello world
qu ni ma

555.txt
888.c
first
samba例子文件.txt

eg2,求和

#!/bin/bash
sum=0
for i in {0..100};do  // 循环数,中括号,小括号不行  中间两个英文点
         let sum+=i  // let 不要不写  ,不需要分号
done

echo $sum

eg3, 输出本机所在ip网段的各个ip是否开机

 ping -h  // 显示用法
 txdy827@ubuntu:~/share/first$ ping -c 2 192.168.0.10  // -c  ping 的次数
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=128 time=1.29 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=128 time=2.63 ms

txdy827@ubuntu:~/share/first$ ping -c 2 -i 3 192.168.0.10  // -i 间隔 按秒计算
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=128 time=1.78 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=128 time=2.57 ms


shell脚本

  1 #!/bin/bash
  2 #  192.168.52.143 
  3 for k in {1..254};do
  4         ping -c 2 -i 0.5 192.168.52.$k
  5 #       ping -c 2 -i 0.5 192.168.52.$k &>/dev/null  // 其他信息打印到文件,屏幕只显示那一段话
  6         if[$? -eq 0]; then
  7                 echo "192.168.52.$k is up"
  8         else    
  9                 echo "192.168.52.$k is down"
 10         fi
 11 done

练习:获取本机ip地址,并赋值变量,备用

#!/bin/bash
var=$(ifconfig |grep inet | grep -v inet6 | grep -v 127 |sed 's/^[ \t]*//g' |  cut -d ' ' -f2)
echo $var

ifconfig |grep inet  //获取inet会好几行
ifconfig |grep inet | grep -v inet6 | grep -v 127  // 把其他多余的行去掉
ifconfig |grep inet | grep -v inet6 | grep -v 127 |sed 's/^[ \t]*//g' |  cut -d ' ' -f2  
// 由于 linux 中得到的信息的最前面不是制表符而是空格,所以加上了 sed 's/^[ \t]*//g' 来清除开头的空格


eg4、状态机实现文件内单词数量的统计


// 使用状态机实现文件内单词数量的统计
#include<stdio.h>
#define OUT 0  //单词外
#define IN 1  // 单词内
#define INIT OUT  //开始的状态是在单词外

int count_word (char * filename)        //计算文本中出现的单词的数量
{

    int status=INIT;
    int word=0;

    FILE *fp= fopen(filename,"r");  // 只读打开
    if(fp == NULL) return -1;

    char c;
    while((c=fgetc(fp)) !=EOF) //读到文件最后
    {

        if((' '== c) ||('\n'==c)||('\t'==c))  //非单词
        {
            status=OUT;
        }
        else if(OUT == status)
        {
            status =IN;
            word++;
        }

    }
    return word;


}


int main(int argc,char * argv[])
{

    if(argc<2) return -1;  //至少有两个参数,第一个是路径,第二个是命令行参数
    int summ=0;
    summ= count_word(argv[1]);
    printf("%d\n",summ);
    return 0;
}

编译执行

~/share$ gcc -o new0002 New0002.c 
~/share$ ./new0002 ./555.txt

//结果
223

TCP/IP

1、TCP如何保证有序的?
2、ARP
3、TCP的拥塞控制
4、TCP的半连接队列,全链接对列
5、TCP粘包与分包
6、网络断了,TCP怎么处理
7、TCP的长连接,与短连接
8、TCP的11个状态迁移
9、send返回正数,是不是成功了?
10、阻塞与非阻塞,send,recv -1

协议栈是啥?
特定的沟通模式。分层的思想,每层都有对应的协议,一起构成的协议组,栈结构,
物链网传话,表应
自己实现一个 NtyTCP
用户态协议栈:把tcp协议做的和应用程序一样,使用
网卡属于那一层?
网卡不是通信协议,不属于任何一层。
数据链路层:数字信号
物理层:光电信号
网卡完成数字信号和光电信号的转换,D/A->A/D->D/A

柔性数组 零长数组
应用在:
1、对于数组的长度不清楚
2、提前分配好的
3、通过计算可以算出来数组长度

网卡---------------------------------->协议栈-------------------------------------->应用程序
********sk_buff:(车)运输信息 -------****receive:从内核(协议栈)获取数据到应用程序中,send反方向把数据从应用程序发到协议栈
协议栈常驻内存

netmap:网卡存储映射到 内存的 新的框架
还有DPDK框架
pr_ring框架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值