Linux 一些有用的shell操作
Table of Contents
Linux 产生一个随机文件
dd if=/dev/urandom of=rand.bin count=1024 bs=1024
产生count * bs字节的文件,1M
echo 写二进制文件
echo -e -n "\x30\x31" > test.bin
- -e // 表示使能反斜杠转义,这样遇到\就会转义为二进制
- -n // 不添加行尾换行标识,默认的 echo 会在末尾添加 0x0A
- 双引号表示要转义的字符串,\x表示十六进制,\0NNN 表示八进制
生成随机数
echo $RANDOM # $RANDOM 的范围是 [0, 32767]
echo $(($RANDOM%255+1)) # 产生 1 ~ 255 之间的随机数
echo $(date +%s%N) # 使用 date + %s%N 产生随机数
echo $(cat /dev/urandom | head -n 10 | cksum | awk -F ' ' '{print $1}') # 使用 urandom 避免阻塞
echo $(cat /proc/sys/kernel/random/uuid | cksum | awk -F ' ' '{print $1}') #使用 uuid 产生随机数
生成随机字符串
# 使用date 生成随机字符串
date +%s%N | md5sum | head -c 10
# 使用 /dev/urandom 生成随机字符串
cat /dev/urandom | head -n 10 |md5sum | head -c -10
/bin/bash^M: bad interpreter: No such file or directory 问题的解决办法
- 使用sed命令sed -i “s/\r//” filename 或者 sed -i “s/^M//” filename直接替换结尾符为unix格式
- vi filename打开文件,执行 : set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式
- 使用linux命令dos2unix filename,直接把文件转换为unix格式
输出十六进制数
num=31
echo $((16#$num)) # 输出结果为 49,进制转换
echo -e -n "\x$num" # 输出结果为字符 1
# 以 16 进制形式存入变量
num=$(($RANDOM%255+1))
hnum=`printf "%02X" ${num}`
xxd 查看二进制文件
xxd -g 1 -c 8 -u msg.bin