shell 命令/程序 CheatSheet

很多时候我们只是不知道/忘了有这么个东西!
这些都是我需要时从网上找的,从哪里来回哪里去。

  1. echo不换行 echo -e echo颜色 echo -e \033[36m红色\033[0m

  2. lsof lsof -i tcp lsof filename lsof -u ubuntu lsof -p pid lsof -c programname

  3. 查看一个进程的环境变量 cat /proc/<pid>/environ | tr \\0 \\n

  4. 查看Linux发行版 uname -a cat /etc/issue.net lsb_release -a

  5. apt候选 apt-cache

  6. 查看不可见字符 cat -A 比如查看 ANSI escape code

  7. top 分别按E,e切换内存单位 除此之外还有 htop atop iotop
    top中java程序的内存解读:<链接>

  8. bash命令行删除相关 自己试 Ctrl + K Ctrl + U Ctrl + W Ctrl + A Ctrl +E

  9. jcmd jcmd pid VM.system_properties jcmd pid VM.flags

  10. 当前java安装路径 java -verbose

  11. iconv 编码转换

  12. Linux目录介绍 man hier

  13. 16进制查看 cat xxx | hexdump -c

  14. ls -altr 查看最近修改的文件

  15. shopt shell的配置,关闭shell的通配符以打开正则表达式: shopt -s extglob,这样就可以用rm删除时来排除某个文件了 rm -rf * !(except) help shopt

  16. grep的或逻辑 grep -E 'A|B' = egrep 'A|B' = grep -e 'A’ -e 'B'

  17. pkill pgrep killall pkill的优势是pkill -f 可以匹配整个命令行
    killall的优势是kilall -o/-y 可以根据程序启动时长杀掉程序 killall -y 1,2,3,4,5,6,7 即杀死启动时间短于1秒2分3小时4天5周6月7天的所有程序,killall只能匹配程序名
    当然它们默认发送的信号是SIGTERM 即15.

  18. iostat iotop vmstat nmon
    关键的是如何解读所看到的数据<此处追加博文链接>

  19. xargs和find经常搭配使用 xargs -d即delimiter:分界符,默认是空格
    默认分界符是空格,那么当遇到前一个输出必须含有空格时咋整?find . -name . '*.log -print0 | xargs -0 rm -f -print0和-0分别你唱我和
    比如在很多java文件中找main方法: find . -name '*.java | xargs grep main,即将find输出的文件名作为grep的输入了

  20. shell中重定向 &>xxx等价于 某输出>xxx 2>&1 &>filename 意思是把标准输出和标准错误输出都重定向到文件filename中

  21. date 输入微秒 date +'%Y-%m-%d %H:%M:%S.%N' | cut -b 1-25 毫秒: date +%s%3N

  22. 如何确定自己是否在docker容器中, cat /proc/self/cgroup 中CPU是否有docker字样:https://stackoverflow.com/questions/20010199/how-to-determine-if-a-process-runs-inside-lxc-docker,或者检查是否存在文件 /.dockerenv

  23. 当前的TTY,输入tty即可当前进程ID$$

  24. 使用SSH进行流量转发,机器A和B均安装有openSSH,内网机器A可以到有固定IP的机器B,但是B到不了A,,此时机器A登录机器B时可以使用 ssh -R8022:localhost:22 userOnB@IPB,这时在机器B就可以ssh -p8022 userA@localhost,这样B就可以登录A了; 在A上,不只可以转发自己的localhost:22,可以转发机器A可达的任何端口,来源superuser点我ssh -L是转发远程端口,此时机器A可以到机器B,机器B可以到机器C(或者服务C),机器A到不了机器C,ssh -L8022:IPC:PortC userB@IPB, 在机器A就可以ssh -p8022 userC@localhost到达C。所以-R是转发远程流量,-L是转发本地流量;R是在远程主机创建端口,L是在本地创建端口,在哪个主机创建端口(被动套接字) 就是目的是要通过已经建立的SSH会话转发哪个主机的流量,而去利用另一端的流量。
    -R在远程主机创建端口,远程主机就可以利用本机流量;-L在本机创建端口,本机就可以利用远端流量。(此处本机是指调用了SSH命令的机器) 后来查到一个更厉害的-D,直接拿要去登录的主机做代理服务器,,,,还有个-X!

  25. Linux查看文件被哪个进程占用: fuser 我用来看apt-get的锁被谁占用。

  26. pidof快速查看进程ID,让我想起了pkill

  27. 从docker中拷贝文件出来 docker cp <containerId>:/file/path/within/container /host/path/target

  28. java默认的垃圾回收器
    java -XX:+PrintCommandLineFlags -version
    Java 7 - Parallel GC
    Java 8 - Parallel GC
    Java 9 - G1 GC
    Java 10 - G1 GC
    忽然记得Java性能调优这本书上说过,Server-class和Client-class machine

  29. Linux 内核级命令 ltrace (lib) strace ltrace跟踪线程会导致整个进程退出,因为进程内存共享,trap的原因 网络nstat rtacct

  30. ubuntu设置代理 需要环境变量 http_proxy=http://[username:password@]xxxx:80等,编辑/etc/environment或者profile等配置
    https://askubuntu.com/questions/158557/setting-proxy-for-apt-from-terminal []表示可选;同样https_proxy, ftp_proxy 命令行工具 ftp,wget,curl,ssh,apt-get,yum均收此影响,但是如果密码中含有@怎么办?当密码中含有非字母时,要转成ASCII,@对应为%40 https://www.shellhacks.com/linux-proxy-server-settings-set-proxy-command-line/

  31. crontab的日志 https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log

  32. sudo 免密 visudo; USER_NAME ALL=(ALL) NOPASSWD:ALL

  33. AWS EC2 curl http://169.254.169.254/latest/meta-data/public-ipv4

  34. which where后,有知道一个命令:type,type好像更实用, tpye -p

  35. OS的发行版 cat /etc/*release lsb_release -a

  36. 把用户添加到一个组:usermod -a -G some_group some_user,同样还有adduser、useradd、addgroup、userdel等命令等你去用

  37. grep查看保留表头 ps -ef | { head -1; grep XXX } or ps -ef | egrep PID|XXX

  38. 一个进程有几个线程 ps -efL or ps -o nlwp <pid> or jconsole <javaPid>

  39. 查看某个JVM参数 比如线程栈大小 java -XX:+PrintFlagsFinal -version | grep ThreadStackSize
    各种比率比如NewRatioMaxHeapFreeRatioMinHeapFreeRatio: java -XX:+PrintFlagsFinal -version | grep -i MaxHeapSize
    默认的最大堆内存: java -XX:+PrintFlagsFinal -version | grep -i MaxHeapSize

  40. alternatives 的简单使用
    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_191/bin/java 2 1967
    sudo update-alternatives --config java

  41. vim去掉换行符(计算MD5):set noendofline binary

  42. ps输出中的多个空格cut无法处理 ps -opid,ppid,cmd | tr -s " " | cut -d " " -f 2,3

  43. 下载某文件时是否支持断点续传 wget -S xxxx | grep Accept-Ranges

  44. [MySQL] 表中某字段内容替换 UPDATE table SET field = REPLACE(field, 'string', 'anothervalue') WHERE field LIKE '%string%';

  45. tcping sudo apt install tcptraceroute -y && sudo wget http://www.vdberg.org/~richard/tcpping -O /usr/bin/tcping && sudo chmod 755 /usr/bin/tcping

  46. 安装terminal词典见我的软件安装博文

  47. 有的时候,需要让一个正在前台运行的程序,即使SSH断开也不要停止,要命的是执行程序前没有没有nohup,或者在tmux or screen中执行。简单了解些Linux会话组就知道不让它停止而一直执行是有办法的。解决办法:reptyr当然引用自SOF了,如果你偷一个进程失败时,那就尝试用-T参数偷过来所有进程,如果提示attach失败,那么需要修改内核参数,如下 sudo bash -c 'echo 0 > /proc/sys/kernel/yama/ptrace_scope'sudo vim /etc/sysctl.d/10-ptrace.conf;还有命令disown

  48. Terminal实时流量监控,精确到IP.iftop

  49. scp两台远程主机 本主机上,在两台远程主机间拷贝文件.如果两台主机都使用密码的话那很好解决(这个也有个前提,就是曾经在远程源主机登录过远程目的主机,根本是需要保存远程主机指纹),在这里插入图片描述但是如果是私钥登录,-i只能指定一个私钥传递给ssh,就有问题了!SO上这篇回答:https://superuser.com/questions/686394/scp-between-two-remote-hosts-from-my-third-pc,需要在本机~/.ssh/config下指定两台远程主机的私钥;使用-3开关,本机作为透明中转,就不需要远程主机A保存远程主机B的指纹。 如果两台远程主机密钥一样,一个-i就ok

  50. top f后可以选择依据哪列排序 <、>换页

  51. /etc/systemd/system.conf 限制systemd服务,ulimit限制PAM认证? 学习 cat /proc/<pid>/limits

  52. glibc版本查询: ldd --version (ldd值得一man ldd值得一man ldd值得一man) 或者 getconf GNU_LIBC_VERSION参考自。同时也可以用来查询程序使用的动态链接库 ldd ls,也有另一中办法readelf -d $executable | grep 'NEEDED'

  53. 查看pmap命令内存块内容
    gdp -pid [pid]
    dump memory mem.bin 0x00007f8b00000000 0x00007f8b00000000+65512
    cat mem.bin | strings
    r w, x: execute s: shared p: private(copy on write)

  54. lsof 给文件把文件大小单位转换, lsof -p <pid> | awk '{$7=$7/1048576 "MB" } 1' 或者 lsof -p <pid> | numfmt --field=7 --to=iec | head 后者不可靠,因为lsofSIZE/OFF 栏可能是0t0,0t表示offsize;对于lsof中TYPE出现的REG、MEM,和FD出现的0u,1w,124r等可以一man

  55. 历史登录记录:last,所有用户上次登录记录,lastlogin

  56. 查看某个用户的ulimit,可以引申哦 su USER --shell /bin/bash --command "ulimit -n"

  57. docker的几个命令 docker inspect xxx 可以探索很多东西 docker network ls 列出一些"网络空间" 进而再使用 inspect来列出所有容器IP 还有个叫swarm的东西?查看哪个容器由docker-proxy监听了主机端口, docker ps | grep port 就行

  58. 检查swap分区在哪 swapon -s 分配swap分区时需要操作 mkswap -c先检查一下

  59. 给java程序临时指定log4j的配置: -log4j.configurationFile=file:/path/to/file

  60. 排查问题时的最先操作是检查主机资源,简洁脚本

echo  "
#!/bin/bash
echo -e '\033[36mdf\033[0m'
df -h
echo -e '\033[36mfree\033[0m'
free -h
echo -e '\033[36mcpu\033[0m'
ps -a -o 'pid,%cpu,rss,%mem,cmd' --sort -c | head -11
echo -e '\033[36mmem\033[0m'
ps -a -o 'pid,%cpu,rss,%mem,cmd' --sort -rss  | head -11
echo -e '\033[36mvmstat\033[0m'
vmstat " >/tmp/check  && chmod 777 /tmp/check && . /tmp/check

  1. 两个新命令,查看硬件信息: dmidecode windows下的 nbtstat,协议统计

  2. 去重 sort -u 字符串长度 echo -n 'test' | wc -m或者 echo '{#varible}'

  3. 时间戳转date date -d @158xxx 逆操作 date +%s

  4. sed去除一行的某些字符串,比如去除连续6个数字:sed -r -e s/[[:digit:]]{6}//g input_file_path 才知道POSIX正则表达式,分为BRE和ERE,sed的-r就是使用ERE,不同于Perl正则表示数字时的\d ,POSIX正则要表示数字得使用[[:digit:]] 但是.*?{}[]()”啥的意义是一样的 这个链接和第一个链接有例子,中间的链接是中文博客。grep同样适用以上规则,并且注意POSIX正则表达式不支持非贪婪匹配的问号.

  5. xarg 主机上所有java程序强制gc jps | cut -d ' ' -f 1 | xargs -i jcmd {} GC.run

  6. 切换用户时保留环境变量sudo env PATH=${PATH} su jenkins

  7. 没有想到Ubuntu自带了oui数据
    ,是通过ieee-data这个软件包里的数据/usr/share/ieee-data/oui.txt,nmap也有/usr/share/nmap/nmap-mac-prefixes,不过自带的太旧了18年2月的,最新的可以在这里得到https://linuxnet.ca/ieee/oui.txt

  8. crontab 中运行脚本的问题 之前记得有个’%'问题,再来,默认的SHELL是sh,它不支持&>缩略重定向;默认的PWD变量是Home目录,(想想为什么登录主机后会默认到/home/ubuntu/),bash中只有cd能改变它,Python的当前路径是通过系统调用getcwd获得,所以脚本要以当前脚本所在目录为基准而不是.,同时chdir可以改变working directory

  9. 某些情况下注释掉/etc/hosts后域名还是被劫持的,此时就需要安装nscd来清理缓存;同时发现,由于ubuntu18默认开启本地的dns(172.0.0.53#53),所以不同于Ubuntu14,nslookup也经过 识别了hosts劫其实我觉得是因为本机nameserver本身就是一个进程,它肯定依靠host);其实根本是某个进程在使用系统调用时解析域名的过程,(再次感谢stackoverflower记得之前看过Windows的,不过不要忘了hosts文件是DNS之前的产物 ubuntu18上修改DNS的一种办法是关闭systemd-resolved服务然后直接修改/etc/resolve.conf这其实是一个链接文件;刚才找到了修改WIFI的dns的配置文件 目录/etc/NetworkManager/system-connections 另一个办法是修改netplan /etc/netplan/

  10. 如何完全清理terminalreset reset will actually completely re-initialise the terminal, instead of just clearing the screen. However, it won’t re-instantiate the shell (bash). That means that bash’s state is the same as before, just as if you were merely clearing the screen.
    reset是否可以完全清空屏幕,和模拟终端实现有关(Xshell4 可以清空,XShell5 就不行) printf "\033c"
    实际上是terminal emulator,这个emulator非常关键,[因为以前的终端是个实物] (https://unix.stackexchange.com/questions/180943/terminal-vs-bash) SF链接2 Xshell的配置VT100有没有注意过?

  11. 寻找某个类,在哪个jar中出现过? https://stackoverflow.com/questions/1342894/find-a-class-somewhere-inside-dozens-of-jar-files
    a.for i in *.jar; do jar -tvf "$i" | grep -Hsi ClassName && echo $i ; done
    b.find /some/path -name *.jar -exec grep -Hls ClassName {} \;
    c.for i in $(locate "*.jar"); do echo "$i"; jar -tvf "$i" | grep -Hsi ClassName; done

  12. shell中处理Json 安装jq,用.来索引,比如.name

  13. find -exec 结束时必须跟 \;, ;表示结束 \即转义 那么怎么把一个文件夹下的文件批量操作? find some_path -type f -exec bash -c 'sed s/src/dst/ {} > {}' \; 搞了半天写不对,sed带了-i, sed替换第一行怎么写? sed '1ctarget 1表示第一行,c表示change 【问题来源于今天需要批量修改xml的版本为1.0】

  14. file 判断文件类型

  15. 使用金山词霸API在线翻译 curl 'http://dict-co.iciba.com/api/dictionary.php?w='$1'&key=yourkey&type=json' 2>/dev/null | native2ascii -encoding UTF-8 -reverse | jq -Cr '.symbols[0].parts' | sed -r s:\\{\|\\}\|','::g | sed -r "s#' '*\x1b\\[1;39m\x1b\\[0m\x1b\\[1;39m##g" 注意 \x1b是转义字符 202007130030更新+1 shell中写正则不带引号锤死你!怪不得[需要1三个\\\转义, 带了引号就和普通正则一样处理
    但是后来的JVM都不带native2ascii了,所以不能用了;native2ascii就是把任何编码字符集转换成ascii或者unicode;而-reverse就是反着的意思;我们原本的需求就是把unicode转换成字符,查的echo -e也能完成该任务,但是echo不接受标准输入,通过管道传输无效,于是只能定义变量;新命令为c=``curl 'http://dict-co.iciba.com/api/dictionary.php?w='$1'&key=yourkey&type=json' 2>/dev/null``; echo -e $c | jq -Cr '.symbols[0].parts' | sed -r s:\\{\|\\}\|','::g | sed -r "s#' '*\x1b\\[1;39m\x1b\\[0m\x1b\\[1;39m##g"

  16. 发现一个好东西可以让计算机读字spd-say say espeak espeak的中文完全包下载 https://stackoverflow.com/questions/28862807/os-and-spd-say-in-python

  17. 通过脚本让计算机发出声音来: echo ^G powershell 中可以直接按 Ctrl+G shell 中先按 Ctrl + V 再按 Ctrl + G,然后又发现了window下各种表情包。。。当然感谢SF了 又看见一个命令tee vim下 :w !sudo tee %,w输出buffer到stdin how-does-the-vim-write-with-sudo-trick-work

  18. coredump的默认目录是/var/log/

  19. 某主机上的pip包转移 pip freeze>requirements.txt; pip download -r requirements.txt -d path_to_the_folder 在新环境pip install -r requirements.txt --find-links=path_to_the_folder 问题就在于我的pip太旧了,没有download功能;apt 更新 sudo apt-get install --only-upgrade 安装pip3 sudo apt install python3-pip

  20. 安装完MySQL后初始化的一些问题,这种东西,很烦呢!最近安装了个最新版的5.7.31的mysqlmysql --help |grep Distrib,root密码不知道,遂mysqld_safe --skip-grant-tables 却提示mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists当然SO:mkdir -p /var/run/mysqld; chown mysql:mysql /var/run/mysqld 然后再mysqld_safe命令就好,改root密码 注意:password变成了authentication_string update user set authentication_string=password('123abc') where user='root'; 看博文 注意还要把plugin改为 mysql_native_password,否则只能通过连接socket登录; 原来5.7中是把初始化密码打在了var log日志里,但是很可能找不到这个日志文件;原来简单sudo mysql -uroot就能登录,安装后默认root用户验证就是通过auth_socket,它和网上说的unix_socket是一个东西,mysql会鉴别主机登录的用户和指定的user是不是一个用户,不是则拒绝,本次遇到用sudo mysql也不能登录时因为不知怎么地起了两个mysql,全部关掉重启就好了;又有个命令sudo mysql_secure_installation,用来修改任意用户安全配置以提升安全性

  21. 内存页大小 getconf PAGE_SIZE

  22. IP table样板
    sudo iptables -t mangle -A POSTROUTING -p tcp --tcp-flags RST,ACK RST,ACK -j DROP
    Bingo,如何删除这条规则?
    sudo iptables -L -t mangle --line-number
    sudo iptables -t mangle --delete POSTROUTING 2

  23. curl带客户端证书 curl -k -E path_crt.pem --key path_key.pem 或者在-E后的文件中同时包含CERTIFICATION和PRIVAITE_KEY. 客户端验证证书报错已经提示的很明显了:curl:(58): unable to use client certification (no key found or wrong pass phrase)是说客户端证书没有key 对应的另一个: curl:(58) unbale to set private key file 'xxx.pem' type PEM 分别从p12文件中取出key和证书
    openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys
    openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes
    注意:客户端
    java导入证书, cer为PEM格式
    keytool -importcert -file certificate.cer -keystore keystore.jks -alias "XXXalias" -storepass changeit
    linux导入CA证书
    放置到 usr/local/share/ca-certificates 并且以.crt结尾 执行sudo update-ca-certificates 然后就会看到文件/etc/ssl/certs/ca-certificates.crt里有了你的证书 superuser

  24. mysql下执行shell, system ls 或者 \! bash, mysql下用户变量 set @user_verirable ='abcdefg' session和全局变量:
    SELECT @@SESSION.wait_timeout
    SELECT @@GLOBAL.wait_timeout
    经过修改session变量,测试得默认的@@wait_timeout是session的变量

  25. grep使用Perl正则 -P, 非贪婪匹配就是 ? bash在处理链接文件时没有追踪链接文件,不管是tab补全还是cd

  26. delete no ASCII file in linux: ls -i; rm -f ``ls -i | grep the_inode \``

  27. ethtool 查看当前的配置项 sudo ethtool -k enp5s0 ,修改 sudo ethtool -K enp5s0 tso off

  28. 杀死Java孤儿进程 ps -o pid,ppid,cmd -U ubuntu | grep java | awk -F" " '$2==1 {cmd="kill -9 "$1; system(cmd)}' 注意$1的位置与引号

  29. iptables的规则,NAT状态查看 conntrak -L,分当前活动连接

  30. bash for循环和后台 for i in {1..20}; do echo "nc 192.168.43.84 7777 &" | bash ; done

  31. cut中的 想要 -d tab 怎么敲? 首先,默认的分隔符就是tab,不用指定;若想指定 Ctrl+V 然后按tab就能输入 SF

  32. markdown中的空格怎么敲? 全角&emsp;半角&nbsp;

  33. 如何探测远程主机的SSL证书? 可以使用OpenSSL, ubuntu20以下需要安装OpenSSL 1.1.1,所以需要更新;
    然后可以敲命令 echo | openssl s_client -tls1_3 -connect tls13.cloudflare.com:443,
    是否支持某一个特定加密套件echo | openssl s_client -tls1_3 -ciphersuites 'TLS_AES_256_GCM_SHA384' -connect tls13.cloudflare.com:443
    采集自博客:raymii.org
    查看域名证书:openssl s_client -showcerts -connect www.baidu.com:443

  34. stat命令并不能直接看到文件的创建日期(Birth),只能通过debugfs命令,stat可以看到 atime,last access time; mtime 上次修改文件内容的时间; ctime, 修改文件元数据的时间。配合debugfs可以看到文件创建时间: debugfs -R 'stat <inode>' /dev/sda2 or debugfs -R 'stat file_ab_path /dev/sda2 SF1 SF2

  35. 看某个端口的额证书 curl -kviL -L支持重定向 -k忽略自签证书 -v verbose -i 输出响应头

  36. tcpdump指定ip、端口、协议 sudo tcpdump -nni wlp9s0 host 220.181.38.148 and tcp dst port 443

  37. 原来我这个博文应该叫cheatSheet啊。python的parser
    parser.add_argument('-n', '--build_number', default=0, help='help_msg'
    args = parser.parse_args()
    if args.build_number== 0: #....

  38. java ThreadDump 对比锁信息
    egrep -n 'locked|wait for' threaddump > locks
    ws=`grep wait locks | grep -oP '\<\S{18}\>'`;for i in $ws; do grep locked locks | grep $i; done

  39. rabbitmq 命令行拉去消息 rabbitmqadmin get queue=queue_name requeue=false count=100

  40. scp debug can’t open /dev/tty: No such device or address 真实用户 这写的啥?意思是用户为假时会报此错误?

  41. 一个简单UDP的echo程序,mkfifo fifo; cat fifo | nc -ul 1234 > fifo 来自man nc手册,但是这个只能用于单个UDP连接,即使带了-k也是不行;另一种方法是用nmap中带的ncat:ncat -l 2000 --keep-open --udp --exec "/bin/cat",这个支持多连接

  42. 产生一个大文件 fallocate -l 1G file_path dd -if=/dev/zero of=file_path count=1024 bs=1024

  43. 删除用户密码 passwd -d user 切换过去 sudo su - username

  44. 限制CPU使用 ulimit -t 2 限制CPU时钟周期 或者 cpulimit -l 15 -- ls -al 占总共CPU15%(最大到CPU个数*100%) user.slice又忘了? 于是搜索得 sudo vim /etc/systemd/system/user-1000.slice 文件 注意 sudo sytemctl restart user.slice会使所有用户进程关闭!我失手了!也忘记了 systemctl edit --force user-1000.slice 然后systemctl daemon-reload即可 id命令可以获得用户ID

[Slice]
CPUQuota=100%
MemoryMax=2G
IOReadBandwidthMax= / 15M
IOWriteBandwidthMax= / 15M
IOReadIOPSMax= / 1024
IOWriteIOPSMax= / 1024
  1. 全盘搜索文件 locate 非常好使
  2. 内核在编译的时候打开了哪些开关? cat /lib/modules/ uname -r /build/.config | grep CONFIG_SECU‐RITY_YAMA
  3. ubuntu18以后的版本主机都自带了一个本地DNS,即systemd-resolve,这个服务缓存DNS解析结果做多为2小时,当然它是上限,并不会改上游返回的小于2小时的结果,诊断该服务的方法:how-to-troubleshoot-dns-with-systemd-resolved, GitHub源码 main/src/resolve/resolved-dns-cache.c 看这个

/* We never keep any item longer than 2h in our cache */
#define CACHE_TTL_MAX_USEC (2 * USEC_PER_HOUR)

如何修改DNS

  1. iptables -S -t nat 列举nat表 kubectl describe pods/services xxxx 注:docker中虚假IP都用的iptables做的,所以在宿主机使用netstat ss看不到TCP连接,这时候就看上面提到的的conntrak

  2. 主机太老ubuntu 14.04 上面的python太旧 python3.4,鉴于以前删除后更新引起一些系统服务的故障,不再敢直接更新;于是就想python虚拟环境,不过这个虚拟环境,主机目前安装为3.4能虚拟个3.6出来?不行叭,隔离的应该只是依赖包;于是就想到万能的docker,search pull一气呵成,可是怎么run不起来呢, 看下 logs正常退出, docker run python python -V可以看到是3.9.6,那么怎么执行我的脚呢?脚本还要安装依赖啊,用&&全部追加?这个cassandra driver(最低支持3.5)编译起来还挺慢的. 于是搜得why-docker-container-exits-immediately: docker run python -dit -d Detached mode: run command in the background. 注意在ubuntu18下运行时顺序应当是docker run -dit python否则会报错:docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: “-tid”: executable file not found in $PATH: unknown. 这已经说得很明显:把dit视为了一个命令,显然不是内核版本不与docker兼容的问题:https://github.com/docker/for-linux/issues/591

  3. 使用命令打开、关闭WIFI,使用rfkill rfkill block 0

  4. 电脑型号:cat /sys/class/dmi/id/product_name PCI设备lspci -nn 目录/etc/modprobe.d记录了一些阻止加载的module

  5. docker容器做的非常干净,没有netstat来查看进程监听端口怎么办?docker-any-way-to-list-open-sockets-inside-a-running-docker-container step1:docker inspect -f '{{.State.Pid}}' container_name_or_id, step2:sudo nsenter -t pid -n netstat
    说的我pull了一个awvs,但是看日志起来似乎有错,也不知道能不能用,把去dockerhub看日志这个方法给忘了,不知道应该怎么正确启动这个容器:docker-awvs

  6. openssl 输出verify return:1 表示验证成功: what-does-verify-return1-mean-in-the-openssl-output

  7. MySQL 创建用户: ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

  8. icdiff 找到一个带颜色的diff工具python3 -m pip install icdiff ,不同之处会用红、绿色标记,精确到字母。

  9. daemon daemon --running --pidfile xxx --name xxx 但是实践发现,daemon判断进程是否running并不是只看pid文件中pid是否存在。一般systemctl执行start时,脚本会先判断是否running.

  10. WIFI扫描 nmcli dev wifi https://askubuntu.com/questions/567006/how-can-i-display-the-list-of-available-wifi-networks

  11. 主机扫描 sudo arp-scan -l --interface=wlp3s0 nmap -sP 192.168.0.1/24

  12. WSL中安装docker容易把C盘吃完,所以需要清理,强力清除,会删除所有images和volumes docker system prune -a --volumes

  13. yaml文件格式校验 yamllint Spring指定配置文件夹: -Dspring.config.location

  14. curl -H "Content-Type: application/json" -d '{}' -b "cookie1=value1" -XPOST https://api.gitihub.com/
    ab -c 4 -n 100 -p payload_file_path -T 'application/json' -H "header: value" -rk https://api.github.com 最近发发现ab原来发的是HTTP 1.0协议,通过 -v 2可以看到发送的请求,然而我们k8s使用的enovy并不支持HTTP 1.0,SF上找到一个硬处理:直接全局替换为HTTP 1.1,是MCU的网络实验课的操作方式:sed 's|HTTP/1.0|HTTP/1.1|g' /usr/bin/ab >ab-http11 但是有个bug是请求会超时,读到了reponse还在等;所以换用wrk,发POST需要写在lua脚本里

    wrk.method = "POST"
    wrk.body   = "foo=bar&baz=quux"
    wrk.headers["Content-Type"] = "application/json"
    

    wrk -t4 -c20 -d30s -s post.lua https://baidu.com

  15. 极客时间 通过execsnoop通过ftrace监控进程exec()系统调用,来追踪短时进程的创建等;CPU使用率高但是top看不到任何高耗进程;1. 看top中CPU使用那一行 2.看正在执行的tasks 3.看top中进程状态为R(run)的;可能的原因:创建的短时进程很快结束;短时进程崩溃重启;所以需要确定父进程行为,即进行进程溯源,谁启动的这个短时进程。

  16. github使用token推代码 git push https://<GITHUB_ACCESS_TOKEN>@github.com/<GITHUB_USERNAME>/<REPOSITORY_NAME>.git

  17. 有时候linux获得的一些数据没有对齐,可以用awk来完成
    awk -F, '{printf "%-20s%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9,$10}' awk学习文档 https://www.w3cschool.cn/awk/3ja71k8i.html

  18. IDEA下载不下来源码:mvn dependency:sources https://stackoverflow.com/a/38951545

  19. Json在shell下美化:echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool how-can-i-pretty-print-json-in-a-shell-script bing搜不到StackOverflow了

  20. xargs gerrit服务器替换,需要批量替换项目下的config文件 xargs来帮忙,xargs怎么代指xargs传过来的参数呢? -1 就行,但是sed替换输出重定向怎么处理,把 -1 用引号引起来;也可直接用sed-i 则有 ls */.git/config | xargs sed -e -i "s/old-gerrit_domain/new_gerrit_domain" 有同行Blog easyengine

  21. 列举内核加载的所有modules find /lib/modules/$(uname -r) -type f -name '*.ko' SF

  22. ab跑https性能测试时有些问题 1.自签证书 2.颁发有误的SHA256中间证书问题 所以采用httperf,当然如果能下载编译wrk更好 httperf --client=0/1 --server=example.com --port=443 --uri=/readme --rate=100 --send-buffer=4096 --recv-buffer=16384 --ssl --num-conns=50 --num-calls=1000 CSDN

  23. 重新安装内核 sudo apt-get install --reinstall linux-image-5.19.0-50-generic 列举内核 dpkg -l | grep linux-image-.*-generic; 安装内核Headers sudo apt install linux-headers-5.19.0-50-generic 查看当前硬件使用的驱动 lspci -k header所在目录 /usr/src/ 蓝牙命令行工具 bluetoothctl

  24. mvn 父子模块一个有趣的问题,我们知道子模块通过父模块dependencyManagement来继承统一的版本,当子模块dependencies中没有指定此依赖时则不会依赖;子模块dependencies指定了hutool-crypt 5.0.3 父模块中dependencyManagement指定了hutool-all 4.0.19(hutool-all实际上也是一个依赖父pom的子工程,父pom里列举了所有hutool modules),最终hutool-crypt 4.0.19会被加入CLASSPATH,造成编译时一些方法找不到而报错,就看新旧版本谁在前了,造成不稳定。
    方法:用 maven help:effective-pom 来看最终有效pom,其他排查依赖也可以用此命令;另外IDEA Maven Helper:maven dependency并不能排查出此问题。
    再次遇到同样的问题,项目父pom: spring-boot-starter-parent中定义了jetty.version=11.0.15,而我代码中依赖的是9.4.20.v20190813,导致jetty-utils包中一些类找不到。
    这个根本原因是dependencyManagement优先于依赖协调 Dependency management takes precedence over dependency mediation for transitive dependencies 解决办法是覆盖变量版本(properties)即可,如果父pom没有定义变量那就麻烦了。

  25. shell 读文件并操作,加快批处理速度 while read line ; do echo "$line" 2>/dev/null; done < file

  26. 查看环境变量 printenv

  27. Java跑微基准测试要用JMH,不要System.currentMilliseconds()

  28. 环境变量是哪里定义的?bash PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2 zsh zsh -xl SO

  29. 域名解析 查看迭代查询过程:dig +trace baidu.com模拟DNS服务器发进行迭代查询
    反向解析: dig +x 1.1.1.1 查看迭代查询过程呢?
    host是个很好的工具:查很多记录:host baidu.com 反向域名解析 host 1.1.1.1 DNS递归查询和迭代查询并存,更常见的是没有缓存时的迭代查询

  30. tldr man手册太长不看,安装后, tldr -u 请求github更新db

  31. 终于找到了bash中管道 | 的反向操作符 <<<, md5sum <<< “test”, urlencode转码 python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read()));" <<< "%21%20" here-string here-file cat <<EOF 还有另一种<() bash的magics

  32. maven递归下载指定依赖,先创建一个pom,示例,然后执行命令mvn dependency:copy-dependencies -DoutputDirectory=./
    命令get是不能下载指定目录的,而是repository mvn dependency:get -DartifactId=cglib -DgroupId=cglib -Dversion=3.2.4

  33. 性能监测 iostat iotop vmstat atop dstat nmon

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
atomichabits.com/cheatsheet是《原子习惯》一书作者詹姆斯·克利尔的官方网站,提供了一个简洁的小抄,帮助读者快速掌握和应用书中的原则和方法。《原子习惯》是一本关于如何改变自己的书籍,它提供了一系列简单易行的策略,帮助人们养成良好的习惯,达到个人成长和成功的目标。 这个网站的小抄提供了以下几个主要内容: 1. 习惯的构建:在这一部分,小抄介绍了如何通过设定清晰的目标、制定具体的计划和追踪进展来养成习惯。它强调了一点一滴的积累和持续的努力对于成功的重要性。 2. 习惯的激励:这一部分涵盖了如何利用内部和外部的激励来坚持习惯。它提供了一些方法,如奖励机制、建立社交责任和选择性使用技术来增加动力。 3. 习惯的优化:这部分介绍了如何通过调整环境和使用技术工具来优化习惯的建立和坚持过程。它提供了一些实用的建议,如创建环境的可见性、批量化任务和使用提醒工具等。 4. 习惯的复原:最后一部分重点介绍了如何处理习惯断裂或停滞的情况。它提供了一些策略,如重新评估目标、重新制定计划和寻找支持等。 总的来说,atomichabits.com/cheatsheet提供了一份简明扼要的小抄,让读者能够快速了解和运用《原子习惯》一书中的核心原则和方法,帮助他们养成良好的习惯,实现个人目标。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值