LINUX光标丢失
隐藏光标 : echo -e "\033[?25l"
显示光标 : echo -e "\033[?25h"
隐藏光标 : echo -e "\033[?25l"
显示光标 : echo -e "\033[?25h"
突然发现服务器空间满了。排查到最后,居然是一个docker(nacos)的日志太大了。
占了57个G。
/var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log
限制日志大小:
version: "3.9"
services:
some-service:
image: some-service
logging:
driver: "json-file"
options:
max-size: "200k"
max-file: "10"
/etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "10"}
}
ffmpeg -i https://xxx.m3u8 -c copy xxx.mp4
网上找了很多资料都不对。无奈自己分析。
m3u8本质上是一个列表,动态输出的。大概格式如下:
curl http://121.19.134.82:808/tsfile/live/1030_1.m3u8
#EXTM3U
##EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:15952719
#EXTINF:5, no desc
live_1030_1_15952715.ts?key=txiptv&key2=15952715
#EXTINF:5, no desc
live_1030_1_15952716.ts?key=txiptv&key2=15952716
#EXTINF:5, no desc
live_1030_1_15952717.ts?key=txiptv&key2=15952717
#EXTINF:5, no desc
live_1030_1_15952718.ts?key=txiptv&key2=15952718
#EXTINF:5, no desc
live_1030_1_15952719.ts?key=txiptv&key2=15952719
可以看到这里面,是没有任何信息的。
于是我把ts文件下载回来,这就是一个小的视频片段。
vlc打开,是有标题信息的,所以,其实是藏在这个ts文件里面了。
010editor打开这个文件,搜索ASCII码,比如我搜“CCTV”。
发现都是藏在一堆的0xFF前面。于是找规律,写代码,做测试。
最终成品如下:
import binascii
import sys
import re
def find_all_contiguous_ff(file_path, target_length=144, preceding_bytes=20):
with open(file_path, 'rb') as file:
data = file.read()
# 十六进制的 FF 字符串
target_hex = b'\xFF' * target_length
# 查找所有连续的 FF
start_index = 0
results = []
while True:
index = data.find(target_hex, start_index)
if index == -1:
break
# 提取前面的 20 个字节
preceding_start_index = max(0, index - preceding_bytes)
preceding_data = data[preceding_start_index:index]
# 转换为十六进制字符串
preceding_hex_string = binascii.hexlify(preceding_data).decode('ascii')
# 使用 binascii.unhexlify 转换为字节串
preceding_bytes_data = binascii.unhexlify(preceding_hex_string)
results.append(preceding_bytes_data)
# 更新起始索引,继续查找下一个
start_index = index + target_length
if results:
for idx, result in enumerate(results):
ss = binascii.hexlify(result).decode("ascii")
if str(ss[:2])=="01":
return get_relevant_string(ss)
else:
print("没有找到连续的 144 个 FF")
def extract_ascii_from_hex(hex_string):
# 将十六进制字符串转换为字节串
byte_data = binascii.unhexlify(hex_string)
trimmed_byte_data = byte_data[:-4]
# 尝试将字节串解码为 ASCII 字符串
try:
decoded_string = trimmed_byte_data.decode('ascii', errors='ignore')
except UnicodeDecodeError:
return None
# 查找所有可能的 ASCII 字符串(假设 ASCII 字符串是由可打印字符组成的)
# 这里只是一个示例,实际应用中你可能需要根据实际情况调整正则表达式
ascii_strings = re.findall(r'[ -~]+', decoded_string)
return ascii_strings
def get_relevant_string(hex_string):
# 提取 ASCII 字符串
ascii_strings = extract_ascii_from_hex(hex_string)
# 根据提取的字符串数量返回相应的字符串
if len(ascii_strings) > 1:
return ascii_strings[1]
elif len(ascii_strings) == 1:
return ascii_strings[0]
else:
return "没有找到有效的字符串"
# 使用示例
file_path = sys.argv[1]
find_all_contiguous_ff(file_path)
使用效果: