文本处理
统计句长并排序:
1 2 3 4 | # char cat file.txt | tr -s '[:space:]' | awk '{print length}' | sort -n # word cat file.txt | tr -s '[:space:]' | tr -dc '[:space:]' | awk '{print length}' | sort -n |
1 2 3 4 | ^origin^new #全局替换: !!:gs/origin/new zsh: ^origin^new^:G |
比较不可见字符,有些时候diff输出是一样的(因为空格的关系)
1 | diff f1 f2 | cat -A |
重排两个对应文件
1 2 3 4 5 6 7 8 9 10 11 12 | tmpf=$(cat /proc/sys/kernel/random/uuid) paste f1 f2 | shuf > $tmpf cut -f 1 $tmpf > f1.shuf cut -f 2 $tmpf > f2.shuf #更快,比较适合超大文件的方法 mkfifo onerandom tworandom tee onerandom tworandom < /dev/urandom > /dev/null & shuf --random-source=onerandom onefile > onefile.shuf & shuf --random-source=tworandom twofile > twofile.shuf & wait rm onerandom tworandom |
查询ascii
1 | man 7 ascii |
安全相关
生成随机密码:
1 2 3 | cat /dev/urandom | tr -dc [:graph:] | fold -w 12 | head -10 #生成/etc/shadow里的加密密码,常用的是SHA-512。$6$U7Ji98OD, 6代表SHA-512,U7Ji98OD代表salt。 (man crypt) python -c 'import crypt; print(crypt.crypt("heiheihei", "$6$U7Ji98OD"))' |
umask设置在sudo时不继承,否则当普通用户设置为umask 0077的时候,使用sudo创建的文件,普通用户不能读。(pip的一个大坑)
1 2 3 | visudo Defaults umask = 0022 Defaults umask_override |
整人,fork bomb感觉这个威力更大
1 | echo 'sh $0|sh $0&' > 0 ; sh 0 |
系统管理
定期运行某个脚本,且在开机后马上运行。比如运行翻墙的shadowsocks就很必要。最方便是用crontab:
1 2 3 4 5 | #/etc/crontab SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 40 * * * * /bin/bash script.sh >> log.txt 2>&1 @reboot sleep 60 && /bin/bash script.sh >> log.txt 2>&1 |
包管理
1 2 3 4 5 | #移除无依赖的包 pacman -Rsn $(pacman -Qqdt) pacman -Scc #找到一个命令属于哪个包 pkgfile nvidia-smi |
生活美好
除scp,rsyn,sshfs这类,更帅的在主机间传输文件(具体):
1 2 3 4 | nc -c -l -p 1234 > recive.zip # first listen on 1234 to recive file nc -c -w 3 127.0.0.1 1234 < test.zip # then input file on remote 或者直接建个临时python的HTTP服务器: python3 -m http.server |
ssh仅运行一条命令(具体)
1 2 3 | ssh slinuxer ls -al man ssh_config #生活一下子美好 sshfs #10M网远程磁盘与本地磁盘无明显区别 |
在shell的一行里运行多条命令(详细)
1 2 3 | A; B # Run A and then B, regardless of success of A A && B # Run B if A succeeded A || B # Run B if A failed |
疑惑解答
各种括号的含义(参考stackoverflow)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | foo=123 bar=hahaha #花括号 ${foo}bar #变量替换: 123bar {cd /; ls;} #一块代码 #括号 (cd /; ls;) #在子shell中执行代码 r=$(ls) #将结果赋值 r=`ls` #类似 wc <(ls -l) #输出到wc,>()还不会 #双括号 (( foo + 9 )) #算术表达 (( foo ++ )); echo $foo var=$(( foo + 5 )) #赋值 #方括号 if [ condition ] #条件测试 if [[ condition ]] #扩展条件测试 |
装机
1 | poppler-data |
待续。
近期评论