Linux根目录下的四类文件夹

本文深入解析Linux系统的四个主要文件夹类别:管理类、用户类、应用程序类和信息类,包括/boot、/bin、/sbin、/var、/etc、/dev、/mnt、/root、/home以及/usr等关键目录的功能与用途。
一 、Linux管理类文件夹:
  /boot 该目录默认下存放的是Linux的启动文件和内核,例如LILO或GRUB的文件。
  /initrd 它的英文含义是boot loader initialized RAM disk,就是由boot loader初始化的内存盘。在 linux 内核启动前,boot loader会将存储介质(一般是硬盘)中的initrd文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的initrd文件系统。
  /bin 该目录中存放Linux的常用命令。
  /sbin 该目录用来存放系统管理员使用的管理程序。
  /var 该目录存放那些经常被修改的文件,包括各种日志、数据文件。如果做mail server,则需在Linux安装时将该目录设置为大空间。
  /etc 该目录存放系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。如果做web server,则需在Linux安装时将该目录设置为大空间。
  /dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,访问这些外部设备与访问一个文件或一个目录没有区别。例如在系统中键入“cd /dev/cdrom”就可以看到光驱中的文件。
  /mnt 该目录默认下有2个分别对应光驱和软驱的文件夹cdrom和floppy。你可以临时将别的文件系统挂在该目录下,例如“挂载光驱mount/dev/cdrom /mnt/cdrom,查看光驱cd /mnt/cdrom”,养成良好习惯不使用时及时卸载“umount /mnt/cdrom”。
  二 、Linux用户类文件夹:
  /root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录。
  /home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。
   三 、Linux应用程序类文件夹:
  /usr 用户的应用程序和文件几乎都存放在该目录下。
  /lib 该目录用来存放系统动态链接共享库,几乎所有的应用程序都会用到该目录下的共享库,其作用类似于Windows里的.dll文件
  /opt 第三方软件在安装时默认会找这个目录,所以你没有安装此类软件时它是空的,但如果你一旦把它删除了,以后在安装此类软件时就有可能碰到麻烦,相当于windows里面的“C:\Program Files”。
  /tmp 用来存放不同程序执行时产生的临时文件,该目录会被系统自动清理干净。
   四 、Linux信息类文件夹:
  /proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的,该目录的内容不在硬盘上而在内存里。
  /misc 英语意思是杂物箱,可以让多用户堆积和临时转移自己的文件。
  /lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。
  初学者可以使用ls或ll指令查看各个文件夹,通过查看各个文件夹下文件的颜色来了解文件的含义。
  文件颜色的含义:蓝色为文件夹;绿色是可执行文件;浅蓝色是链接文件;红框文件是加了SUID位,任意限权;
  红色为压缩文件;褐色为设备文件。
from pysat.sat_test import TestCase, CaseInfo from pysat.sat_result import ResultInfo from pysat import sat_conf from pysat import rpc3 import os # 添加os模块用于文件操作 import logging from PyNetConfig import NetConfig as net from PyPing import my_ping as ping import PyScapy as capture import time logger = logging.getLogger(__name__) _gcfg = sat_conf.TestbedConfig() def get_config(name): '''get the testbed config info, return the value''' return _gcfg.get(name.lower()) class Test(TestCase): def __init__(self): TestCase.__init__(self) self.logger = logging.getLogger(self.__class__.__name__) self.case_info = CaseInfo() self.case_info.name = 'cdent_class_test' self.case_info.id = 'FG999992' self.case_info.version = '202508150002' self.case_info.author = 'suihaoyu@tp-link.com.hk' self.case_info.runtime = '4min' self.case_info.testbeds = self.get_testbed_list() self.case_info.description = ''' ''' def add_task(self): self.register_case(self.FG999992__cdent_class_test, self.case_info) def FG999992__cdent_class_test(self): try: result = ResultInfo() self.logger.info('前置操作:从数据库中读取预期的参数信息') nic_name = get_config('pc_nic_name') nic_ip = get_config('pc_nic_ip') nic_mask = get_config('pc_nic_mask') nic_gateway = get_config('pc_nic_gateway') nic_dns1 = get_config('pc_nic_dns1') nic_dns2 = get_config('pc_nic_dns2') self.logger.info(f'nic_ip {nic_ip}') # 实例化网卡 pc_nic = net(nic_name) self.logger.step('步骤1: 读取当前pc网卡的IP/MASK/gateway/dns信息') ip_list = pc_nic.get_ip_list() ip = ip_list[0]['ip'] mask = ip_list[0]['mask'] flag = True if ip != nic_ip: flag = False result.add_result(passfail=ResultInfo.FAIL, actual_result=ip, expected_result=nic_ip, test_comment='读取当前pc的网卡IP地址', item_id='步骤1.1') if mask != nic_mask: flag = False result.add_result(passfail=ResultInfo.FAIL, actual_result=mask, expected_result=nic_mask, test_comment='读取当前pc的网卡mask', item_id='步骤1.2') gateway = pc_nic.get_gateway_list()[0] if gateway != nic_gateway: flag = False result.add_result(passfail=ResultInfo.FAIL, actual_result=gateway, expected_result=nic_gateway, test_comment='读取当前pc的网卡gateway', item_id='步骤1.3') dns = pc_nic.get_dns_list() dns1 = dns[0] dns2 = dns[1] if dns1 != nic_dns1: flag = False result.add_result(passfail=ResultInfo.FAIL, actual_result=dns1, expected_result=nic_dns1, test_comment='读取当前pc的网卡dns1', item_id='步骤1.4') if dns2 != nic_dns2: flag = False result.add_result(passfail=ResultInfo.FAIL, actual_result=dns2, expected_result=nic_dns2, test_comment='读取当前pc的网卡dns2', item_id='步骤1.5') if flag: result.add_result(passfail=ResultInfo.PASS, actual_result=f'ip:{ip}, mask:{mask}, gateway:{gateway}, dns1:{dns1}, dns2:{dns2}', expected_result=f'ip:{nic_ip}, mask:{nic_mask}, gateway:{nic_gateway}, dns1:{nic_dns1}, dns2:{nic_dns2}', test_comment='读取当前pc网卡的IP/MASK/gateway/dns信息', item_id='步骤1') self.logger.step('步骤2: 存储网卡信息到文件') # 创建result文件夹(如果不存在) result_dir = "result" if not os.path.exists(result_dir): os.makedirs(result_dir) self.logger.info(f"创建目录: {result_dir}") # 创建带时间戳的文件名 timestamp = time.strftime("%Y%m%d_%H%M%S") filename = f"nic_info_{timestamp}.txt" file_path = os.path.join(result_dir, filename) # 准备要写入的内容 content = f"""网卡信息报告 ============== 测试时间: {time.ctime()} 网卡名称: {nic_name} IP地址: {ip} 子网掩码: {mask} 默认网关: {gateway} DNS服务器1: {dns1} DNS服务器2: {dns2} 测试状态: {'通过' if flag else '失败'}""" # 写入文件 with open(file_path, 'w', encoding='utf-8') as f: f.write(content) self.logger.info(f"网卡信息已保存到: {file_path}") # 将文件路径添加到测试结果 result.add_result( passfail=ResultInfo.PASS if flag else ResultInfo.FAIL, actual_result=f"信息已保存到 {file_path}", test_comment='网卡信息存储', item_id='步骤2' ) self.logger.step('步骤3: 获取盘符') # 获取所有盘符 drives = [] if os.name == 'nt': # Windows系统 import string for letter in string.ascii_uppercase: drive = f"{letter}:\\" if os.path.exists(drive): drives.append(drive) else: # Linux/Mac系统 drives.append("/") # 根目录作为主要盘符 # 添加其他挂载点 for root, dirs, files in os.walk("/mnt"): drives.append(root) for root, dirs, files in os.walk("/media"): drives.append(root) # 记录到测试结果 if drives: drive_str = ", ".join(drives[:3] + ['...'] if len(drives) > 3 else drives) result.add_result( passfail=ResultInfo.PASS, actual_result=f"检测到盘符: {drive_str} (共{len(drives)}个)", expected_result="至少一个有效盘符", test_comment='获取PC盘符', item_id='步骤3' ) self.logger.info(f"检测到盘符: {drive_str}") else: result.add_result( passfail=ResultInfo.FAIL, actual_result="未检测到任何盘符", expected_result="至少一个有效盘符", test_comment='获取PC盘符', item_id='步骤3' ) self.logger.error("未检测到任何盘符") self.logger.step('步骤4: 获取当前时间并判断是否早于2024年中秋') # 获取当前时间并格式化为"YYYY-MM-DD hh:mm:ss" current_time = time.strftime("%Y-%m-%d %H:%M:%S") # 定义2024年中秋节时间点 (2024年9月17日 00:00:00) mid_autumn_2024 = time.mktime(time.strptime("2024-09-17 00:00:00", "%Y-%m-%d %H:%M:%S")) current_timestamp = time.time() # 判断当前时间是否早于2024年中秋 is_early = current_timestamp < mid_autumn_2024 status = "早于" if is_early else "不早于" # 记录测试结果 result.add_result( passfail=ResultInfo.FAIL if is_early else ResultInfo.PASS, actual_result=f"当前时间: {current_time} ({status}2024年中秋)", expected_result="当前时间不早于2024-09-17", test_comment='时间判断', item_id='步骤4' ) self.logger.info(f"当前时间: {current_time}, 状态: {status}2024年中秋") self.logger.step('步骤5: 高精度计算斐波那契数列前100位总和') # 使用perf_counter获取高精度时间戳 start_time = time.perf_counter() # 高效计算斐波那契数列前100位 a, b = 1, 1 fib_sum = a + b # 初始总和 for _ in range(2, 100): a, b = b, a + b # 同时更新两个变量 fib_sum += b # 获取结束时间并计算耗时 end_time = time.perf_counter() elapsed_ns = (end_time - start_time) * 1e9 # 转换为纳秒 # 记录测试结果 result.add_result( passfail=ResultInfo.PASS, actual_result=f"总和: {fib_sum} | 耗时: {elapsed_ns:.3f}ns", expected_result="斐波那契数列前100位总和", test_comment='高精度斐波那契计算', item_id='步骤5' ) self.logger.info(f"斐波那契总和: {fib_sum}") self.logger.info(f"高精度耗时: {elapsed_ns:.3f}纳秒") return result except Exception as e: result = ResultInfo() result.add_result(passfail=ResultInfo.FAIL, test_comment='Test fail: %s' % e) self.break_test('Test fail: %s' % e) def clean_test(self): try: self.logger.info('[clean_test] start to clean test...') except Exception as e: self.logger.error('[clean_test] clean test failed: %s' % e) raise e 维持该代码不变 编写步骤6代码:有线网卡抓包30s 分别统计其中TCP、UDP、ICMP报文的数量,预期能抓到TCP和UDP报文,但抓不到ICMP报文
最新发布
08-20
<think>我们将在原有代码基础上添加步骤6:网络抓包分析 要求:抓包30秒,分别统计TCP、UDP、ICMP报文数量,预期能抓到TCP和UDP报文,但抓不到ICMP报文 注意:由于原有代码中已经导入了PyScapy(别名为capture),我们可以使用该模块进行抓包。 但是,为了确保代码的健壮性,我们将: 1. 选择正确的网络接口(使用之前步骤中的nic_name) 2. 抓包30秒 3. 分析抓到的包,统计三种协议的数量 4. 验证条件:TCP>0, UDP>0, ICMP=0 另外,由于抓包可能需要权限,我们添加异常处理。 步骤6代码将添加在步骤5之后,返回结果之前(在return result之前)。 考虑到原有代码结构,我们将在步骤5后面添加步骤6。 注意:原有代码中已经有一个大的try-except,我们将在其中添加步骤6。 具体实现如下:</think>以下是根据要求添加的步骤6代码,实现有线网卡抓包30秒并统计TCP/UDP/ICMP报文数量: ```python # 在文件顶部添加导入 import time from scapy.all import sniff, Ether, IP, TCP, UDP, ICMP from scapy.interfaces import get_working_ifaces # 在FG999992__cdent_class_test方法中的步骤5之后添加步骤6 self.logger.step('步骤6: 有线网卡抓包30秒并统计协议分布') try: # 获取当前配置的有线网卡名称 capture_interface = nic_name # 使用前置步骤中配置的网卡 # 权限检查 try: # 测试抓包权限 sniff(iface=capture_interface, count=1, timeout=1) except PermissionError: raise RuntimeError("需要管理员权限运行 (Windows:管理员, Linux:sudo)") # 开始抓包 start_time = time.time() packets = sniff(iface=capture_interface, timeout=30) capture_duration = time.time() - start_time # 协议统计 tcp_count = 0 udp_count = 0 icmp_count = 0 other_count = 0 for packet in packets: if TCP in packet: tcp_count += 1 elif UDP in packet: udp_count += 1 elif ICMP in packet: icmp_count += 1 else: other_count += 1 # 验证条件 pass_condition = (tcp_count > 0 and udp_count > 0 and icmp_count == 0) actual_result = f"TCP:{tcp_count} UDP:{udp_count} ICMP:{icmp_count}" # 生成协议分布图 protocol_dist = ( f"协议分布图:\n" f"TCP | {'█' * (tcp_count // 5)} {tcp_count}\n" f"UDP | {'█' * (udp_count // 5)} {udp_count}\n" f"ICMP | {'█' * (icmp_count // 5)} {icmp_count}\n" f"其他 | {'█' * (other_count // 5)} {other_count}" ) # 记录结果 result.add_result( passfail=ResultInfo.PASS if pass_condition else ResultInfo.FAIL, actual_result=f"{actual_result} | 耗时:{capture_duration:.1f}s\n{protocol_dist}", expected_result="TCP>0 & UDP>0 & ICMP=0", test_comment=f"接口:{capture_interface}", item_id='步骤6' ) self.logger.info(f"抓包结果: {actual_result}, 耗时: {capture_duration:.1f}秒") self.logger.info(f"协议分布:\n{protocol_dist}") except Exception as e: result.add_result( passfail=ResultInfo.FAIL, actual_result=f"抓包失败: {str(e)}", expected_result="完成抓包", test_comment="步骤6执行异常", item_id='步骤6' ) self.logger.error(f"抓包失败: {str(e)}", exc_info=True) ``` ### 完整代码位置(在步骤5之后,return之前): ```python # ... 步骤1-5代码保持不变 ... # ===== 步骤6: 网络抓包分析 ===== self.logger.step('步骤6: 有线网卡抓包30秒并统计协议分布') try: # 获取当前配置的有线网卡名称 capture_interface = nic_name # 使用前置步骤中配置的网卡 # 权限检查 try: # 测试抓包权限 sniff(iface=capture_interface, count=1, timeout=1) except PermissionError: raise RuntimeError("需要管理员权限运行 (Windows:管理员, Linux:sudo)") # 开始抓包 start_time = time.time() packets = sniff(iface=capture_interface, timeout=30) capture_duration = time.time() - start_time # 协议统计 tcp_count = 0 udp_count = 0 icmp_count = 0 other_count = 0 for packet in packets: if TCP in packet: tcp_count += 1 elif UDP in packet: udp_count += 1 elif ICMP in packet: icmp_count += 1 else: other_count += 1 # 验证条件 pass_condition = (tcp_count > 0 and udp_count > 0 and icmp_count == 0) actual_result = f"TCP:{tcp_count} UDP:{udp_count} ICMP:{icmp_count}" # 生成协议分布图 protocol_dist = ( f"协议分布图:\n" f"TCP | {'█' * (tcp_count // 5)} {tcp_count}\n" f"UDP | {'█' * (udp_count // 5)} {udp_count}\n" f"ICMP | {'█' * (icmp_count // 5)} {icmp_count}\n" f"其他 | {'█' * (other_count // 5)} {other_count}" ) # 记录结果 result.add_result( passfail=ResultInfo.PASS if pass_condition else ResultInfo.FAIL, actual_result=f"{actual_result} | 耗时:{capture_duration:.1f}s\n{protocol_dist}", expected_result="TCP>0 & UDP>0 & ICMP=0", test_comment=f"接口:{capture_interface}", item_id='步骤6' ) self.logger.info(f"抓包结果: {actual_result}, 耗时: {capture_duration:.1f}秒") self.logger.info(f"协议分布:\n{protocol_dist}") except Exception as e: result.add_result( passfail=ResultInfo.FAIL, actual_result=f"抓包失败: {str(e)}", expected_result="完成抓包", test_comment="步骤6执行异常", item_id='步骤6' ) self.logger.error(f"抓包失败: {str(e)}", exc_info=True) # ... 后续代码(如果有)... return result ``` ### 关键功能说明: 1. **网卡选择**: - 使用前置步骤中配置的`nic_name`作为抓包接口 - 确保抓取的是有线网卡流量 2. **权限管理**: ```python # 权限预检查 sniff(iface=capture_interface, count=1, timeout=1) ``` - 提前发现权限问题并给出解决方案提示 3. **抓包执行**: ```python packets = sniff(iface=capture_interface, timeout=30) ``` - 精确30秒抓包时长 - 自动处理超时和中断 4. **协议分析**: - 四类协议统计:TCP/UDP/ICMP/其他 - 使用Scapy的协议层检测(TCP in packet) 5. **可视化输出**: ```python # 生成文本协议分布图 f"TCP | {'█' * (tcp_count // 5)} {tcp_count}" ``` - 直观显示各类协议占比 - 适合日志和测试报告展示 6. **验证条件**: ```python pass_condition = (tcp_count > 0 and udp_count > 0 and icmp_count == 0) ``` - 严格满足测试要求:有TCP/UDP,无ICMP ### 错误处理增强: 1. **接口不可用**: ```python except Scapy_Exception as e: if "No such device" in str(e): self.logger.error("网卡不存在: 请检查接口名称") ``` 2. **无流量处理**: ```python if len(packets) == 0: self.logger.warning("未捕获到任何数据包,检查网络连接") ``` 3. **跨平台支持**: ```python # Windows特殊处理 if os.name == 'nt': from scapy.arch.windows import get_windows_if_list # 验证接口是否存在 ``` ### 性能优化建议: 1. **实时统计**: ```python # 使用回调函数实时计数(减少内存占用) counter = {"tcp":0, "udp":0, "icmp":0, "other":0} def packet_callback(pkt): if TCP in pkt: counter["tcp"] += 1 elif UDP in pkt: counter["udp"] += 1 elif ICMP in pkt: counter["icmp"] += 1 else: counter["other"] += 1 sniff(prn=packet_callback, timeout=30, store=0) ``` 2. **过滤器优化**: ```python # 只捕获IP流量 sniff(filter="ip", ...) ``` 此实现完全满足测试要求,并提供了详细的统计信息和可视化输出,同时具备完善的错误处理机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值