[TOC]
0x00 快速入门
0x01 加密编码
base64 命令
描述:使用 Base64 编码/解码文件或标准输入输出,数据以 RFC 3548 规定的 Base64 字母格式进行编码。 解码时输入数据(加密流)可能包含一些非有效 Base64 字符的新行字符。
代码语言:javascript复制#用法:
base64 [选项]... [文件]
#Options:
-d, --decode #解码数据
-i, --ignore-garbag #解码时忽略非字母字符
-w, --wrap=字符数 #在指定的字符数后自动换行, 0 为禁用自动换行(`默认为76字符`)
--ignore-garbage #选项来恢复加密流中任何非 base64 字符。
#如果没有指定文件,或者文件为"-",则从标准输入读取。
实际案例:
代码语言:javascript复制#示例1.加密和解密
echo test|base64 #加密
dGVzdAo=
echo dGVzdAo= |base64 -d #解密
#示例2.批量解密base64:加密也一样
#!/bin/bash
for i in $(cat 1.txt)
do
echo $i | base64 -d 1>>de.txt 2>/dev/null
echo -e "" >>de.txt
done
#实例3.不换行显示转换后的数据
cat 20200524113201-index.html.log|base64 -w 0
# MTJhMTMKPiB2YXIgbWcj0iY3F6ayI7DQo2MDVjNjA2CjwgPC9zY3JpcHQ DQotLS0KPiA8L3NjcmlwdD4KXCBObyBuZXdsaW5lI0IGVuZCBvZiBmaWxlCg==
WeiyiGeek.批量解密base64
md5sum 命令
描述:可以用于对文件进行校验和得到文件的MD5值; 参数语法:
代码语言:javascript复制md5sum [选项] [文件] #可以接受多个文件或通配符
-c #核验数据完整性
实际案例:
代码语言:javascript复制#示例1.获取一个目录中的所有文件md5值
$md5sum *
ee38a408f20702ccc05fb39a04ee251c RPM-GPG-KEY-weiyigeek
1139929d8855ced585631c0e3fe8ad8d aaa.jpg
1139929d8855ced585631c0e3fe8ad8d compare_varnish.jpg
#示例2.接受多个文件或通配符
md5sum file1 file2 file3
[checksum1] file1
[checksum2] file2
[checksum3] file3
#示例3.-c选项可以用生成的md5文件核实数据的完整性,如:
$ md5sum a.txt > a.md5
$ md5sum –c a.md5
a.txt: OK
uuidgen
描述:uuid码全称是通用唯一识别码(universally uniqie Identifier,UUID),而uuidgen命令则是linux中生成和获取uuid的工具,HP和RedHat上可以使用uuidgen来生成,solaris上命令makeuuid
实际案例:
代码语言:javascript复制#示例1.Linux生成uuid随机数(可以作为随机密码)
$uuidgen
07d07031-eb0f-4691-8606-befb46645433
#示例2.获取网卡的uuid信息
$uuidgen eth1
07d07031-eb0f-4691-8606-befb46645433
sha1sum 命令
描述:进行文件的sha1值校验以及文件的完整性核验,除了这个sha1sum还有其他的核验方式只是校验长度不同sha256sum ,sha384sum, ha512sum; SHA1与md5类似是另一种常用的校验和算法,它从给定的输入文件中生成一个长度为40个字符的十六进制
语法案例:
代码语言:javascript复制sha1sum [选项|文件]
-c #校验完整性
-b #以二进制模式读取文件
--ignore-missing #don't fail or report status for missing files
--quiet #don't print OK for each successfully verified file
--status #don't output anything, status code shows success
--strict #exit non-zero for improperly formatted checksum lines
-w, --warn #warn about improperly formatted checksum lines
实际案例:
代码语言:javascript复制#基础使用案例
sha1sum *
8d469ba5f661a779ed6d73537f3c2dfcaba46d8b check.sh
cd3eccb06410c7b3d6cd01f7d1f0d0bbefe446d3 test.txt
#首先将命令产生的消息摘要保存在.sha1文件中再将test.txt和test.sha1放在同一个目录中,使用-c命令行选项验证文件的完整性。
ha1sum test.txt > test.sha1
cd3eccb06410c7b3d6cd01f7d1f0d0bbefe446d3 test.txt
sha1sum -c demo.sha1
demo.txt: OK
#默认情况下,sha1sum命令以文本模式读取文件,也可以强制该工具以二进制模式读取
sha1sum -b [filename]
进制转储
od 命令 - 非纯文本文件显示
描述:在查阅非文本文件时候采用od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现输出文件内容,。
基础语法:
代码语言:javascript复制od [-abcdfhilovx][-A <字码基数>][-j <字符数目>][-N <字符数目>][-s <字符串字符数>][-t <输出格式>][-w <每列字符数>][--help][--version][文件...]
#参数
-t [类型] : 后面接各种类型"类型(TYPE)"的输出例如:
a : 利用默认的字符来输出
c :利用ASCII字符来输出
d [size] : 利用十进制(decimal)来输出数据,每个整数占用size bytes;
f [size] : 利用浮点数(float)来输出数据,每个数占用size bytes;
o [size] : 利用八进制(octal)来输出数据,每个数占用size bytes;
x [size] : 利用十六进制(Hexadecimal)来输出数据,每个数占用size bytes;
-a 此参数的效果和同时指定"-ta"参数相同使用默认字符来输出。
-A <字码基数| [doxn]> 选择要以何种基数计算字码。
-b 此参数的效果和同时指定"-toC"参数相同。
-c 此参数的效果和同时指定"-tC"参数相同。
-d 此参数的效果和同时指定"-tu2"参数相同。
-f 此参数的效果和同时指定"-tfF"参数相同。
-o 此参数的效果和同时指定"-to2"参数相同。
-x 此参数的效果和同时指定"-h"参数相同。
-h 此参数的效果和同时指定"-tx2"参数相同。
-i 此参数的效果和同时指定"-td2"参数相同。
-j<字符数目>或--skip-bytes=<字符数目> 略过设置的字符数目。
-l 此参数的效果和同时指定"-td4"参数相同。
-N<字符数目>或--read-bytes=<字符数目> 到设置的字符数目为止。
-s<字符串字符数>或--strings=<字符串字符数> 只显示符合指定的字符数目的字符串。
-t<输出格式>或--format=<输出格式> 设置输出格式。
-v或--output-duplicates 输出时不省略重复的数据。
-w<每列字符数>或--width=<每列字符数> 设置每列的最大字符数。
基础示例:
代码语言:javascript复制# 示例1.创建 tmp 文件简单演示使用将字符转换成八进制
> echo -e "abc dn12 3" > tmp
> cat $_
# abc d
# 12 3
> od -b tmp
> 0000000 141 142 143 040 144 012 061 062 040 040 063 012
> 0000014
# 示例2使用单字节八进制解释进行输出,注意左侧的默认地址格式为八字节:
> od -c tmp
# 0000000 a b c d n 1 2 3 n
# 0000014
❯ od -t c /usr/bin/passwd | more
# 0000000 177 E L F 002 001 001
# 0000020 003 > 001 @ O
# 示例3.使用ASCII码进行输出,注意其中包括转义字符
$ od -A d -c tmp
0000000 a b c d n 1 2 3 n
0000012
$ od -A x -c tmp
000000 a b c d n 1 2 3 n
00000c
$ od -A n -c tmp
a b c d n 1 2 3 n
# 示例4.例如$IFS系统分隔符变量,直接输出无任何效果,我们可以通过od -b 以8进制形式转储
echo "$IFS" | od -b
# Octal:"040"是空格(32),"011"是Tab(9),"012"是换行符"n"(10)
0000000 040 011 012 012
# 示例5.使用进制与ascii进行对比
# Octal VS Ascii
> od -t oCc /etc/issue # 以八进制的列出值与ASCII对应表
0000000 125 142 165 156 164 165 040 062 060 056 060 064 040 114 124 123
U b u n t u 2 0 . 0 4 L T S
0000020 040 134 156 040 134 154 012 127 151 156 144 157 167 163 040 127
n l n W i n d o w s W
0000040 123 114 012 012
S L n n
> od -t dCc /etc/issue # 以十进制的列出值与ASCII对应表
0000000 85 98 117 110 116 117 32 50 48 46 48 52 32 76 84 83
U b u n t u 2 0 . 0 4 L T S
0000020 32 92 110 32 92 108 10 87 105 110 100 111 119 115 32 87
n l n W i n d o w s W
0000040 83 76 10 10
S L n n
> od -t xCc /etc/issue # 以十六进制的列出值与ASCII对应表
0000000 55 62 75 6e 74 75 20 32 30 2e 30 34 20 4c 54 53
U b u n t u 2 0 . 0 4 L T S
0000020 20 5c 6e 20 5c 6c 0a 57 69 6e 64 6f 77 73 20 57
n l n W i n d o w s W
0000040 53 4c 0a 0a
S L n n
xxd 命令
描述:用于使用二进制或十六进制格式显示文件内容,可以将指定文件或标准输入以十六进制转储,也可以把十六进制转储转换成原来的二进制形式,与winhex由很大的相似;
命令格式:
代码语言:javascript复制#如果没有指定输入文件, 则采用标准输入
xxd -h[elp]
xxd [options] [infile | [outfile]]
xxd -r[evert] [options] [infile [outfile]]
#参数
-b: 以2进制格式进行输出
-c: 每行输出多少个字节
-g: 几个字节组成一组
-i:将文件内容输出成 c的一个数组格式
-l : 输出几个字节后结束,显示几个字节的数据
-p:以一个整块输出所有的hex, 不使用空格进行分割
-s [ ][-]seek : 从第几个字符开始
-u : 输出采用大写
-r: 反转操作,将16进制专程2进制
实际案例:
代码语言:javascript复制#示例1.简单案例与winhex相似显示偏移位置和Hex 与 字符文本
xxd src.c
xxd -g4 src.c #每四个字节一组
xxd -p src.c #输出所有的hex不使用空格进行分割,也不显示偏移
xxd -i src.c #输入C语言数组格式每一个下标存放一个十六进制
xxd -l 18 src.c
#示例2.以2进制格式显示每行输出8字节(8*8 = 64个二进制)
xxd -b -c8 src.c
WeiyiGeek.xxd命令示例
代码语言:javascript复制#示例3.显示从倒数15字节到末尾的十六进制内容并采用大写显示
xxd -s -15 -u src.c
#示例4.将十六进行转换成文本数据,将文本数据转换成十六进制
echo '0000029: 3574 68' | xxd -r
echo "hello" |xxd -g1 #显示字符串 hello 的16进制数据:
echo -e "x68x65x6cx6cx6f"
#示例5.在vim中也可以把文件转换为16进制来显示:
:%!xxd
#返回正常显示:
:%!xxd -r
WeiyiGeek.xdd示例2