linux command

十一月 20, 2022 [command] #command

linux command

git

git ls-files -- '*.cpp' '*.h' | xargs clang-format -i -style=file

git apply --reject /tmp/project.patch  
# apply will failed when patch has removed/new file, --reject allow partial patch.

compile

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libc.so.6 /usr/bin/ls
/usr/lib64/ld-linux-x86-64.so.2 /usr/bin/ls
ldd /usr/bin/ls # pldd
ldconfig
LD_DEBUG=bindings ldd /usr/bin/ls |& less
LD_DEBUG=help ls

readelf -l build/plt_got.exe
hexdump -C -s 0x000194 build/plt_got.exe |head

objdump -j .init build/plt_got.exe
hexdump -C -s 0x001000  build/plt_got.exe |head

ssh

ssh -t -o 'StrictHostKeyChecking no' user@machineB "ssh -t -o 'StrictHostKeyChecking no' user@machineA"
/usr/sbin/sshd -t     # test sshd config before restart sshd
ssh -G guest@1.1.1.1       # test ssh client config
ssh foo@jumper.ip -J guest@target.ip
rsync -auvz --progress -e "ssh -i private-key-file -J guest@domain.com" peter@192.168.1.152:/home/peter/project/gitlab-ci/ ~/project/gitlab-ci/

net

tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
# 0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。

tcpdump -i ens33 udp and host domain.com
tcpdump -i eth0 host domain.com and port 50814 -tnX
nc -vuz domain.com 50814 # check UDP port is open

sysctl -w net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward # like about command
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sysctl -p 

sslstrip -a -l 1000 -k
arpspoof -i eth0 victimip routerip

iptables -L -v -n
iptables -I FORWARD -i wg00 -j ACCEPT;
firewall-cmd --zone=public --add-port=50815/udp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
systemctl start wg-quick@wg00
wg-quick up wg00
ip route add 10.2.2.0/24 via 192.168.1.154
ip link add wg0 type wireguard
wg setconf wg0 /dev/fd/63
ip -4 address add 192.168.1.1/32 dev wg0
ip link set mtu 1420 up dev wg0
ip -4 route add 192.168.1.2/32 dev wg

ss -n -at '( dport = :ssh or sport = :ssh )'     # 括号和等号有空格隔开

nmap -oG results-all.txt -iL ipduan.txt -p 0-65535  --min-hostgroup 1024 \
--min-parallelism 10  --open -n -sS -Pn --host-timeout 30 -v
# -sS:SYN方式扫描,默认-sT即TCP方式,需要三次握手,比较费时,SYN比较快

lsof -iTCP -sTCP:LISTEN -P -n
lsof -iUDP -n -P  
# -i [46][protocol][@hostname|hostaddr][:service|port]
# -n inhibits conversion network number to hostname;
# -P inhibits conversion number to port name

editor

# vim
:w !sudo tee %

# emacs
C-x C-w
/sudo::/etc/apt/source.list
# password

# vim config
:set paste
:set mouse=

# vim delete last char
:norm! $xxx
:'<,'>norm! $xxx

:right # to first right align the text, 
C-v d  # remove your chars with visual block mode and the 
:left  # align the text again

# vim chage word multiple times
cgn
.

# magit
(setq magit-diff-refine-hunk t)
(setq show-trailing-whitespace nil)

# bash
pip3 install cmake-language-server

misc

console-setup
cmake -DCMAKE_CXX_FLAGS=-std=c++17 ..

# zsh
zle -al
set -o emacs

# font
wget -c https://github.com/ryanoasis/nerd-fonts/releases/download/v2.0.0/SourceCodePro.zip
unzip SourceCodePro.zip -d /usr/share/fonts/SourceCodePro
cd /usr/share/fonts/SourceCodePro
mkfontscale # 生成核心字体信息
mkfontdir # 生成字体文件夹
fc-cache -fv # 刷新系统字体缓存
fc-list

tmux new-session -t 0  -s tmp  
# 新建tmpsession 共享0session的窗口(不在同一个窗口操作互相不影响)
# 退出时可以用: prefix: kill-session / prefix d, detach后tmux kill-session -t tmp

docker

apt-get update
apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io

groupadd docker
usermod -aG docker $USER

docker exec -it netmaker bas
docker-compose logs --tail 20 --follow

ops

blkid /dev/sda1
lsblk
mount -o loop /home/peter/ubuntu22.iso /mnt/ubuntu22/

echo "192.168.1.63 my.host" >> /home/peter/.hosts && 
mount  --bind /home/peter/.hosts /etc/hosts

tar -cvf - /data/project/ | xz -T 0 -c | cp /dev/stdin debug.tar.xz
tar -cvf - /data/project/ | xz -T 0 -c | dd of=myfile.tar.xz
tar --exclude={.cache,.ccls-cache} -cvzf gitlab-ci.tgz gitlab-ci

nginx -t     # test nginx.conf

errno -l | grep 13

gpg/openssl

gpg --full-gen-key --expert     # 生成key,私钥和公钥,可以配置用于sign,verify,encrypt
gpg --list-keys --with-keygrip  # keygrip 携带了私钥和公钥的信息
gpg --expert --edit-key peterxiao
# gpg -k(pubkey) -K(secretkey)
gpg --list-secret-keys  --with-sig-check --with-keygrip --with-sig-list
gpg --import /etc/apt/trusted.gpg
gpg -k --no-default-keyring --keyring trusted.gpg
gpg --with-fingerprint /etc/apt/trusted.gpg
gpg --armor --export peter   # 导出公钥, armor:文本格式

gpg --clearsign test.txt
gpg --sign test.txt
gpg --detach-sign test.txt
# 同时签名,加密
gpg --local-user [发信者ID] --recipient [接收者ID] --armor --sign --encrypt test.txt

# 如果不安装任何其他软件包,可以使用gpg --list-packets查看文件中包含的OpenPGP数据包的信息。
gpg --list-packets a4ff2279.asc
gpgconf kill gpg-agent && gpgconf --launch gpg-agent

gpg --export -a  > jonny.asc
gpg --export-secret-key -a  > jonny.gpg

gpg --fingerprint tets.pub.gpg  # 和对方联系确认指纹正确,之后可以将公钥签名信任
gpg --sign-key 或者#gpg --edit-key name#command > sign 
gpg --check-sigs

# 数据签名传输(Signed data):发送者使用私匙对数据加密,接收者使用公匙对数据解密。 
gpg --clearsign mymessage.txt
gpg --clearsign -u DC5CF4B5A853ADB5 myself.sh  # 多个子密钥可以使用-u指定使用哪个
gpg --verify message.txt.asc 
gpg --verify file.txt.sig file.txt
gpg --verify file.txt.asc file.txt

# 数据加密传输(Encrypted data):发送者使用公匙对数据加密,接收者使用私匙对数据解密。
gpg -r -a --encrypt message.txt
gpg --decrypt message.txt.asc > message.txt

# add gpg trusted 
wget -nc https://dl.winehq.org/wine-builds/winehq.key
cat winehq.key | gpg --dearmor  > winehq.gpg
sudo install -o root -g root -m 644 winehq.gpg /etc/apt/trusted.gpg.d/
sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/debian/ bullseye main'

# wine
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
gpg --import /usr/share/keyrings/docker-archive-keyring.gpg


################
#### GPG for ssh
echo enable-ssh-support >> $HOME/.gnupg/gpg-agent.conf
# Set SSH_AUTH_SOCK so that SSH will use gpg-agent instead of ssh-agent. Add this to tour bashprofile or zshrc

echo ' unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
    export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi
export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye >/dev/null
' >> ~/.bashrc

# export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) 
# gpgconf --launch gpg-agent

ssh -T git@github.com

################
#### 生成根证书
# method 1
openssl req -new -x509 -keyout server.key -out server.crt -config openssl.cnf
# method 2
openssl genrsa -out server.key 1024
openssl req -new -x509 -days 3650 -key server.key -out server.crt -subj "/C=CN/ST=mykey/L=mykey/O=mykey/OU=mykey/CN=domain1/CN=domain2/CN=domain3"

#method 3
# 生成CA认证机构的证书密钥key  需要设置密码,输入两次
# 去除密钥里的密码(可选) 这里需要再输入一次原来设的密码
# 用私钥ca.key生成CA认证机构的证书ca.crt 其实就是相当于用私钥生成公钥,再把公钥包装成证书
openssl genrsa -des3 -out ca.key 1024
openssl rsa -in ca.key -out ca.key
openssl req -new -x509 -key ca.key -out ca.crt -days 365
# 这个证书ca.crt有的又称为"根证书",因为可以用来认证其他证书

# 生成自己网站的密钥server.key
# 生成网站证书请求文件 外面的CA机构认证 也是发个请求文件给他们 私钥包含在请求文件中了,认证机构用它生成网站的公钥,包装成一个证书
# 使用虚拟CA认证机构的证书ca.crt,对网站的证书请求文件server.csr进行处理,生成签名后的证书server.crt 注意设置序列号和有效期(一般都设1年)
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -days 365
# 于是就得到了自(自建CA机构认证的)签名证书

systemctl stop nginx
acme.sh --issue  -d amahy.dommain.com   --standalone  # validation method: '--webroot', '--standalone', '--apache', '--nginx' or '--dns' etc -k ec-384
acme.sh --install-cert -d amahy.domain.com --key-file /etc/server.key --fullchain-file /etc/server.crt # --ecc
systemctl start nginx

neo tool

dust(du)/ncdu
duf(df)
procs(ps)
bottom(top)
exa(ls)
zoxide(cd)
ripgrep(grep)/ack/ag
bat(cat)
httpie(curl)
hyperfine(time)
tmux(screen)

常用url

https://dnschecker.org/
curl cip.cc
curl ifconfig.me
curl ipinfo.io