杂项学习
小知识
!$ 表示上一条命令的最后一个参数
$ !! 管理员权限运行上一条命令
\cp 使用原始cp命令,不使用alias后的cp命令
ctrl+r 交互式搜索历史命令
/dev/uio
/proc/meminfo
/etc/fstab
sudo fdisk /dev/sdb
sudo fdisk -l
# 查看磁盘UUID
ls -al /dev/disk-by-uuid
lsblk
# gcc内建函数
https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
使用 __builtin_ 作为前缀
__builtin_strcpy
__builtin_bswap16
__builtin_bswap32
__builtin_bswap64
__builtin_bswap128
__BYTE_ORDER__ 字节大小端
__ORDER_LITTLE_ENDIAN__ 小端
__ORDER_BIG_ENDIAN__ 大端
以下头文件中也有类似功能的宏定义
#include <bits/endian.h>
# 对动态库瘦身
strip -s libtest.so
# 对静态库瘦身
strip --strip-unneeded libtest.a
# 创建设备节点
mknod /dev/sc68_6001 c 180 224
mknod /dev/sc68_6002 c 180 225
/proc/devices
# 使用zip对文件进行加密
zip -e out.zip in
zip -re out.zip in/
匹配命令
file=/dir1/dir2/dir3/my.file.txt
${file#*/} 删除左边第一个/ 以及左边的字符串
${file##*/} 删除左边最后一个 / 以及左边的字符串
${file%/*} 删除右边第一个 / 以及右边的字符串
${file%%/*} 删除右边的最后一个 / 以及右边的字符串
${file#*.} 删除左边第一个. 以及左边的字符串
${file%.*} 删除右边第一个 . 以及右边的字符串
神奇文件
/dev/input/
此文件夹下面放置的是linux输入子系统中注册的事件,具体事件对应的设备可以在 /proc/bus/input/devices 此文件下查看
/dev/uinput
此文件是用户层input文件,可以在用户层创建一个输入设备,注册在 /dev/input/ 文件夹下,在用户层发送输入事件
/dev/shm/sem
此文件夹下存放 打开的全局 posix 信号量,以及其他数据
/proc/partitions
此文件中存放磁盘设备以及分区详情
manjaro
Q : dmesg 内核打印里有好多审计消息 audit
A : 在 /etc/default/grub 中追加 audit=0 ,并使用 sudo update-grub 命令重新生成grub,并重启机器,审计消息就消失了
Q : 设置代理
# 设置全局代理
export all_proxy="socks://127.0.0.1:1080"
export all_proxy="http://127.0.0.1:1080"
# 安装 proxychains 软件
yay -S proxychains-ng
# 修改配置文件
sudo vim /etc/proxychains.conf
# 使用
proxychains git clone xxxxxxxxx
linux 命令
awk
# 来自 triggerhappy Makefile 文件
&& 逻辑与
!~ 不等于
$ 以前面的数据结尾
awk '/^#define ABS_/ && $2 !~ /_(MIN_INTERESTING|MAX|CNT|VERSION)$/ {print "EV_MAP("$2"),"}' linux_input_defs_gen.inc
/etc
# 文件系统自动挂载
/etc/fstab
blkid 查看磁盘属性
ls -al /dev/disk/by-uuid 也可以使用这个文件来查看
# udev 事件处理
/etc/udev/rules.d
# ssh 配置
/etc/ssh/sshd_config /etc/ssh/ssh_config
/proc
# 命令行信息
/proc/cmdline
# cpu信息
/proc/cpuinfo
# 支持加密算法
/proc/crypto
# 使用的控制台
/proc/consoles
# 支持的文件系统
/proc/filesystems
# 内核中所有符号表
/proc/kallsyms
# 存储设备挂载信息
/proc/mounts
# 分区信息
/proc/partitions
# 内存信息
/proc/meminfo
# 模块信息
/proc/mdoules
# 当前内核的配置文件,此文件与 /boot/config-`uname -r` 的内容一致
/proc/config.gz
# 字符设备和块设备的 major number
/proc/devices
netstat
# 查看所有监听中的TCP UDP端口号
netstat -nptul
python
# json格式化
python -m json.tool cert.txt
cat json.txt | python -m json.tool
# 简单文件服务器
python -m http.server 80
gcc
# 在线汇编器
https://godbolt.org/
# AT&T intel 格式汇编差异
https://www.cnblogs.com/hdk1993/p/4820353.html#top
# 输出ATT格式的汇编语法
gcc -S -masm=att test.c
# 输出ATT格式的汇编语法
gcc -S -masm=intel test.c
打印编译器内部使用的库的路径
gcc -print-file-name=libm.so
Q :创建动态库,并指定导出的函数 [-Wl,--version-script=libfoo.version]
A :
gcc -fPIC -shared -o libfoo.so foo.c -Wl,--version-script=libfoo.version
libfoo.version 文件如下所示
{
global:
bar;
baz; # explicitly list symbols to be exported
local:
*; # hide everything else
};
-Wl,-Bsymbolic
这个是在gcc/g++编译的一个选项,其中Wl表示将紧跟其后的参数,传递给连接器ld。
Bsymbolic表示强制采用本地的全局变量定义,
这样就不会出现动态链接库的全局变量定义被应用程序/动态链接库中的同名定义给覆盖了!
Q : rpaht-link的使用
A : 用法:-Wl,-rpath-link=.
用于编译时指定间接引用动态库的路径。
例如liba.so 依赖 libb.so
编译可执行文件时可以只链接 liba.so ,
然后使用 -Wl,-rpath-link=. 指定依赖库的位置,就不必写上所有使用的动态库
一种特殊情况是,
如果可执行程序中直接调用了 libb.so 中的函数
必须显示的指定链接库, -L. -lb,不然会报编译错误
Q : 不想使用系统库中的某个函数,想使用自定义的函数来代替
A : gcc -Wl,--wrap=malloc -Wl,--wrap=free -o test.out main.o
工程中任何用到symbol符号的地方实际使用的是__wrap_symbol符号,任何用到__real_symbol的地方实际使用的是真正的symbol。注意:当__wrap_symbol是使用C++实现时,一定要加上extern “C”,否则将会出现”undefined reference to __wrap_symbol”。
Q : 生成map文件
A : gcc -Wl,-Map=output.map -o test.out main.c
Q : 生成map文件,并且将静态变量的地址也显示在map文件中
A :gcc -Wl,-Map=output.map -fdata-sections -o test.out main.c
Q : 编译器显示或者关闭警告
A :
gcc -o test.out -Wall main.c
gcc -o test.out -w main.c
nmcli nmtui
# 显示wifi信号
nmcli device wifi list
cron crontab 定时任务
corntab -e
zcat zgrep
不解压直接查看和搜索 gzip 文件
lscpu /proc/cpuinfo
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16 // 逻辑CPU数目
On-line CPU(s) list: 0-15 // 在线CPU数目
Thread(s) per core: 2 // 超线程
Core(s) per socket: 8 // 物理核心数目
Socket(s): 1 // 物理CPU数目
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 79
Model name: Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
Stepping: 1
CPU MHz: 1199.963
CPU max MHz: 3000.0000
CPU min MHz: 1200.0000
BogoMIPS: 4199.63
Virtualization: VT-x // 虚拟化支持
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 20480K
NUMA node0 CPU(s): 0-15
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts spec_ctrl intel_stibp flush_l1d
cat /proc/cpuinfo
physical id : 物理CPU ID
core id : 物理核心ID
相同 physical id 和 core id 的 逻辑核心 是物理核心对应的多个超线程
taskset
# 查看当前进程CPU亲和性
taskset -pc 11245
# 设置当前进程CPU亲和性
taskset -pc 0-3 1134
# 以某个cpu亲和性运行程序
taskset -c 0-5 ./test.out
split
# 将 random.bin 文件按照1024字节分割,名字前缀为random_,前缀以数字递增,初始值为1,递增数字长度为4字节
split -b 1k random.bin --numeric-suffixes=1 -a 4 random_
hexdump
hexdump -C xxx.txt -n 1000
base64
# base64 转化
echo iloveyou | base64
# 解 base64
echo aWxvdmV5b3UK | base64 -d
systemctl
# 查看服务状态
systemctl status network
systemctl status sshd
# 重启服务
systemctl restart sshd
systemctl start sshd
systemctl stop sshd
# 列出所有的服务
systemctl list-units
ssh
# 上传公钥到ssh服务器,实现ssh免密登录
ssh-copy-i ~/.ssh/id_rsa.pub root@192.168.6.198
# 动态转发socks5
# 将本地端口地址转发到隧道主机,通过隧道主机访问其他地址
ssh -D local-port tunnel-host -N
# 使用 -x表示使用代理
curl -x socks5:localhost:2121 http://www.example.com
# 本地转发
# 使用隧道主机作为跳板,将本地端口的所有数据转发到目标主机的指定端口
ssh -L local-port:target-host:target-port tunnel-host -N
# 使用 访问本机2121端口就是访问目标机的指定端口
curl http://localhost:2121
# 远程转发
ssh -R local-port:target-host:target-port local -N
grep
# 匹配一个单词
grep -w Zayk_Encrypt
# 排除某个匹配
grep -v grep
xargs
# 执行命令前打印命令
find . -name *.so | xargs -t ls -alh
find
find / -name libSC12api.so
lspci
# 查看pcie设备对应的驱动程序
lspci -k -d 1dab:
lsscsi
# 查看使用SCSI协议的设备
lsscsi
# 查看使用SCSI协议的设备并且,显示SCSI generic 设备名
lsscsi -g
dd
# 把文件写入设备中,显示进度,写入完成以后才退出
dd if="./filename.iso" of="/dev/sdb" status="progress" conv="fsync"
tcpdump
https://www.xmodulo.com/tcpdump-cheat-sheet-examples.html
未整理
xxd
jq json处理命令
find
xargs
awk
sed
du
sort
head
dd
nc
tldr
tcpdump
tmux
gdb
valgrind
dd
mkfs
strace
strings
nm
readelf
strip
组合指令
# nmap对机器端口扫描
nmap www.baidu.com
nmap 192.168.6.198
# nmap扫描固定端口获取详细信息
nmap -p 80 -A www.chenxublog.com
# gdb图形界面运行 可以通过 ctrl+x a 的方式切换图形界面和非图形界面
gdb -tui
# 内存泄漏检测
valgrind --leak-check=full ./test.out
# 查找函数由哪个文件编译出来的
find . -name *.o | xargs -e nm -nCA | grep -wi Zayk_Encrypt
# 查找系统中最大的前10个文件
find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 10
# 查找大于800M的文件,并且按大小排列
find / -type f -size +800M | du -h | sort -nr
# 将 hex 字符串转化为字节数组
echo -ne "\x00\x11\x55" | hexdump -C
# 将 hex 字符串转化为字节数组
echo 1122334455 | xxd -r -p | hexdump -C
# 将数据进行base64转换
echo aaa | base64
# 将base64还原为原始数据
echo YWJjZGVmCg== | base64 -d
# 将文件中的 old 替换为 new
sed "s/old/new/g" /home/di/file
# 使用冒号做分割符对文件进行分割,并输出第一列
awk -F: '{ print $1 }' /etc/passwd
# 打印当前缓存所保存的所有库的名字
ldconfig -p
# 将文件上传到网络剪贴板
cat test.txt | curl -F "c=@-" "https://fars.ee/"
# 可以查看包依赖关系
pkg-config --cflags openssl
pkg-config --libs openssl
第三方库
openssl
openssl help
# 截取部分文件内容进行openssl运算
dd if=backupData.dat ibs=1 skip=249856 count=4096 | openssl sm4-cbc -d -out temp.bat -K 3B951CF4C15965DEDEE289E35018211C -iv 00000000000000000000000000000000 -v
# 使用openssl进行DER解码并且输出公钥
echo "base64==" | base64 -d | openssl x509 -inform der -noout -text
#使用openssl进行加密运算
openssl enc -sm4-ctr -in in.bin -K 0123456789ABCDEFFEDCBA9876543210 -iv 0000000000000000000000000000FFFF -e | hexdump -C
pthread相关
# NOTE 创建线程内部变量,注意内存的释放!!!
pthread_key_create
pthread_setspecific
pthread_getspecific
pthread_key_delete
制作动态库
当使用 attribute((visibility("default"))) 时需要在编译参数里添加 -fvisibility=hidden
g++ -shared -o test.so -fPIC -fvisibility=hidden so.cpp
#if defined _WIN32 || defined __CYGWIN__
#ifdef BUILDING_DLL
#ifdef __GNUC__
#define DLL_PUBLIC __attribute__((dllexport))
#else
#define DLL_PUBLIC __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
#endif
#define DLL_LOCAL
#else
#ifdef __GNUC__
#define DLL_PUBLIC __attribute__((dllimport))
#else
#define DLL_PUBLIC __declspec(dllimport) // Note: actually gcc seems to also supports this syntax.
#endif
#define DLL_LOCAL
#endif
#else
#if __GNUC__ >= 4
#define DLL_PUBLIC __attribute__((visibility("default")))
#define DLL_LOCAL __attribute__((visibility("hidden")))
#else
#define DLL_PUBLIC
#define DLL_LOCAL
#endif
#endif
防火墙相关
# 打开防火墙
firewall-cmd --enable ports=9000/tcp
frp
frps -c frps.ini
frps.ini
[common]
# 服务监听端口
bind_port = 7000
# p2p模式下使用udp来打洞
bind_udp_port = 7000
frpc -c frpc.ini
frpc.ini
[common]
# frps服务端程序所在IP 和 端口
server_addr = 39.103.239.126
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 服务端程序监听端口,发往此端口的数据会转发到内网机器的22端口
remote_port = 2222
[p2p_ssh]
type = xtcp
# 只有 sk 一致的用户才能访问到此服务
sk = cewd123
local_ip = 127.0.0.1
local_port = 22
将 *.service 文件放到 /usr/lib/systemd/system/ 目录下,即可使用 systemctl start frpc 或者 systemctl start frps 启动客户端和服务端程序
HTTP 报文
GET 报文
请求
===================================
GET /license HTTP/1.1
Host: 192.168.6.134:8081
===================================
POST 报文
请求
===================================
POST /license/create HTTP/1.1
Host: 192.168.6.134:8081
Content-Length: 407
{
"description": "密码卡授权",
"customerInfo": "wudi",
"mainBoardSerial": "DDDDEEEE",
"isRegisterCheck": true,
"consumerAmount": "",
"isValid": true,
"issuedTime": "2021-02-25 09:22:59",
"expiryTime": "2050-02-25 09:22:59",
"deviceType": "VPN",
"extend1": "2022N4PN10100542",
"extend2": "",
"extend3": "",
"extend4": "",
"extend5": ""
}
===================================
响应
===================================
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 08 Apr 2022 07:46:55 GMT
7b6
{"status":200,"message":"璇佷功鐢熸垚鎴愬姛锛岃瘉涔︽湁鏁堟湡锛?021-02-25 09:22:59 - 2050-02-25 09:22:59","data":{"path":"/home/AuthServer/license/wudi/license.lic","context":"1cbc73201e90cdf342d3ed313e0ecac4cafc4123d181352b6ac7bfb6d967cf9e417a435e0964ab8e1fa36984b72eab5fc08652e4b3b77b37e32ebec0cf1d2744d02ec0ac2e736569cd7d8bbf59472aa4f8c2c0dca2fb607f11ae2ba10a9a3324fdf05c5e31d728693db2eaa228e15802c0352819c58eaab4f0ba5e8710a816c3b0641e1ed7e739b79c09be50a2e6c3357a47a865c2b690338a04b1aa473f2985feb724a8743b5ce01d847ca71648e111def91a56765fe3a1c64a719ff233ec1b2284d43339d34fb185a3b0f38b90ffd798bf6bb7c6affb4cce7c034270e4e09422a466d04d6487c9c3cca286be054a5fe7ed18021f2b762349531149bb73f973c4f2225824df66f09ecead8c8c2bf4e54043649d82a0892d7a65f3dd2348690c1e11a2027e06333cf74554e613a90ce8108d84f439432e183b7424e7fb7a1f2783737923b23867e7324e0f7ad604a3563b3906c7ec34a46fdf55d048c607b282d1c91c11509405cfe2b63adf4b55eddb7ebb6a79fcce57887376351ffb9509540f1cc00c0c17b365c9c15bea2469206d46a5405ade8face79a93852207702dcb39fc0e5118a8f980b709845a53f99b21d8e71745168150975b4f5300f8e522cc0e6ac2ed01c42df8cdb4847a7049f4c9d6ef8c21d6dd9519728e745f10682f569236f8a6945c0ee2a1ebb391c32ad90fd4fff9bd1944a8821f8fddde3c20912a38727b2a5dc97c3a1aedab377bf9d9694b3022b3632e89616ec21c12d122ab30988f8b55dcdb7da9f1e2c5e392b3c1dd3f99b65975169dc3c42cc3a89553a48b363e14b833059c8d02616f44ad97a7e6223916b99790902de47774beaf0494dae120710049448c40378dbe27ef35c2bf4655e5fa7e91547265574a91f3106155ac0bdc4c0e121a6a1279c2d620db3cc7498763cee2b1d9c2f1be21f27462bbd16f9df7d791fa7cd353e98155975849efd3a9f52d0b7900c668b1c33b63b73577c89564118202ea4b255f29b3d3538ca1abb0b640bc04dce3372fc020d1ae8e678ad1b4242819962de8364552491dbfa0dcab6528773ad3d176c43a9fa3dc0df80152602380934cc03388ae9152b6754b6b2d7a9e010b7d33fcc70880c22e6b328b44190e3920c24fb957d99b6010ec8cce5878393961b42fcc9b3ffe5765cccca78d7014bd91cdfd0ff2dea3f25e611fdbc226a233dace5d491ac207752b1714d5436ab25110af1daba8daa7901a977b"},"timeStamp":"2022-04-08 15:46:55"}
0
===================================

浙公网安备 33010602011771号