1# @Time    : 2020-02-07
2# @Language: Markdown
3# @Software: VS Code
4# @Author  : Di Wang
5# @Email   : [email protected]

本系列主目录: 粒子加速器控制


这周把前段时间积累的一些工作给完成了,包括:

  • 使用Elastic Stack对EPICS控制系统网络进行监控与可视化
  • 编写了程序调用caSnooper自动检测网络内PV请求状况并发送邮件提醒,源码已托管在GitHub
  • 对定时系统Bucket Selection的程序处理逻辑bug fix,还没有更新到运行环境
  • 花了一晚上更新了博客,添加了一部分功能,本想添加豆瓣读书和电影模块,但似乎模块有bug,已提交了issue,等作者解决。在源码中添加了Travis CI支持,以后可以在页面上写博客了。
  • 这几天发生了很糟糕的事情,哀悼之余着手用Amazon 免费的云服务器EC2搭了一个v2ray的服务,便于仍在墙内的朋友去接受多样的信息。

这个周末决定先努力把我常用的Linux命令以及一些不熟悉的命令给整理一下,如果有时间的话再读一读科大师兄早就发给我的定时系统的论文,以及几个同门师兄的博士毕业论文,看看对于自己的课题有没有什么启发;如果还有时间就再去研究下 https://github.com/ChannelFinder 似乎BNL和ANL都在使用,正好看看是自己造轮子还是复用。本文内容主要基于 此文章,向作者表示感谢!

最后,引用陶渊明的诗寄托哀思。

《拟挽歌辞》 其三

荒草何茫茫, 白杨亦萧萧。 严霜九月中, 送我出远郊。 四面无人居, 高坟正嶕峣。 马为仰天鸣, 风为自萧条。 幽室一已闭, 千年不复朝。 千年不复朝, 贤达无奈何。 向来相送人, 各自还其家。 亲戚或余悲, 他人亦已歌。 死去何所道, 托体同山阿。


几个很好的查询网站

文件与目录管理

 1# 查找文件或目录
 2find ./ -name "core*" | xargs file
 3
 4# 查找到文件之后执行某些命令, -exec参数后跟command,以semicolon结尾,同时加backslash转义
 5find ./ -name "*.o" -exec rm {} \;
 6# 或者
 7find ./ -name "*.o" | xargs rm
 8
 9# 查找文件内容
10egrep linux *
11# -i 忽略大小写,-n显示行号,-H显示命中行以及文件名,-C显示前后几行的内容
12find ./ -name "*.log" | xargs grep -inH -c2 "linux"
13find ./ -name "*.log" -exec grep -inH -c2 "linux" {} \;
14
15# 管道和重定向
16ls /proc/* > list 2>&l
17ls /proc/* &> list
18# 清空文件
19:> a.txt

文本处理

  1# 查找txt和log文件
  2find . \( -name "*.txt" -o -name "*.log" \) -print
  3# 否定参数
  4find . ! -name "*.txt"
  5# 七天内被访问过的文件 atime mtime ctime, amin mmin cmin,
  6find . -type f -atime -7
  7# 权限
  8find . -type f -perm 777
  9find . -type f -name "*.php" ! -perm 644
 10find . -type f -user tom
 11find . -type f -group sunk
 12# exec
 13find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
 14
 15# xargs -n多行输出
 16echo "1 2 3" | xargs -n1
 17# -d指定分隔符
 18echo "nameXnameXnameXname" | xargs -dX -n2
 19
 20# 递归搜索
 21grep "class" . -R -n
 22# 排序 -n按数字 -d按字典序 -r逆序 -k N按第N列 -t指定分隔符 -b忽略行首空格 -u去重复
 23sort -nrk 1 data.txt
 24# 行出现次数
 25sort file.txt | uniq -c
 26# 重复行
 27sort file.txt | uniq -d
 28
 29# tr
 30cat file | tr -d '0-9'
 31cat text | tr '\t' ' '
 32# 只保留数字 -c代表补集
 33echo "aa.,a 1 b#$bb 2 c*/cc 3 ddd 4" | tr -d -c '0-9 \n'
 34# -s表示压缩
 35echo "thissss is      a text linnnnnnne." | tr -s ' sn'
 36# 通用字符
 37# [:alnum:]:字母和数字
 38# [:alpha:]:字母
 39# [:cntrl:]:控制(非打印)字符
 40# [:digit:]:数字
 41# [:graph:]:图形字符
 42# [:lower:]:小写字母
 43# [:print:]:可打印字符
 44# [:punct:]:标点符号
 45# [:space:]:空白字符
 46# [:upper:]:大写字母
 47# [:xdigit:]:十六进制字符
 48
 49# cut截取非第二列
 50cut -f2 --complement filename
 51# 指定分隔符
 52cut -f1,3 -d";" filename
 53# -b以byte为单位,-c以character为单位 
 54cut -c-5 file
 55
 56# 拼接文件 注意cat是直接连接俩文件 paste是每一行连接在一起
 57paste file1 file2 -d ","
 58# cat
 59cat f1 f2
 601
 612
 62a
 63b
 64# paste
 65paste f1 f2
 661       a
 672       b
 68
 69# sed 替换每一行的第2处匹配
 70sed 's/text/replace_text/2' file
 71# 替换第3到10行第二个以后的匹配
 72sed '3,10s/text/replace_text/2g'
 73# 替换全局匹配 默认输出替换后的内容 -i会覆盖原文件
 74sed 's/text/replace_text/g' file
 75# 移除空白行 /d代表删除
 76sed '/^$/d' file
 77# 变量转换
 78echo this is en example | sed 's/\w+/[&]/g'
 79[this]  [is] [en] [example]
 80# 如果想给markdown中有些关键词加粗,可以直接使用sed命令
 81echo 'go to directory /usr/bin' | sed 's/\/usr\/bin/**&**/g'
 82go to directory **/usr/bin**
 83# 可以实现批量注释,在第三行到第六行开头加上`#`
 84sed '3,6s/^/#/g' file
 85# 在function和return之间的所有行,行首加上`#`
 86sed '/function/,/return/s/^/#/' file
 87# 子串匹配标记 \1 \2等表示capturing group(正则表达式概念) 
 88echo "/proc/cpuinfo" | sed 's,/\(.*\)/\(.*\),\1:\2,'
 89proc:cpuinfo
 90
 91
 92# awk
 93# NF 表示多少个字段 -F指定分隔符
 94# NR 表示记录数量 即行号
 95awk -F ':' '{print $1, $(NF-1)}' /etc/passwd | head
 96root /root
 97daemon /usr/sbin
 98bin /bin
 99sys /dev
100sync /bin
101
102# 文件有多少行 等同于 wc -l file
103awk 'END {print NR}' file
104# 文本过滤
105awk 'NR < 5' file
106awk 'NR==1,NR==4 {print}' file
107awk '/cpu/'
108
109# 内置函数
110tolower():字符转为小写。
111length():返回字符串长度。
112substr():返回子字符串。
113sin():正弦。
114cos():余弦。
115sqrt():平方根。
116rand():随机数。
117
118# 打印指定列 awk 和 cut
119ls -lrt | cut -f6
120ls -lrt | awk '{print $6}'
121
122# 读文件
123while read line;
124do
125echo $line;
126done < file.txt
127# 改成子shell:
128cat file.txt | (while read line;do echo $line;done)

系统管理

 1# 按文件大小排序目录下文件
 2ls | xargs du | sort -rn 
 3# 查看目录空间 s代表递归计算,也可以设置--max-depth
 4du -sh
 5du -h --max-depth=1
 6# 查进程 
 7ps -ef
 8ps aux
 9
10lsof -i:5064
11lsof -u username
12lsof -c python
13lsof -p 43210
14lsof +d mydir/
15# 查看进程内存情况
16pmap PID
17
18# CPU
19sar -u
20# 每秒采样一次 输出5次
21sar -q 1 5 
22# 内存
23free -h
24sar -r 1 2
25vmstat 1 5
26# 网络 -t tcp -l listen状态的端口
27netstat -at
28netstat -antp | grep 6379
29scp
30sftp
31rsync