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都在使用,正好看看是自己造轮子还是复用。本文内容主要基于 此文章,向作者表示感谢!
最后,引用陶渊明的诗寄托哀思。
《拟挽歌辞》 其三
荒草何茫茫, 白杨亦萧萧。 严霜九月中, 送我出远郊。 四面无人居, 高坟正嶕峣。 马为仰天鸣, 风为自萧条。 幽室一已闭, 千年不复朝。 千年不复朝, 贤达无奈何。 向来相送人, 各自还其家。 亲戚或余悲, 他人亦已歌。 死去何所道, 托体同山阿。
几个很好的查询网站
- 显示命令以及参数的作用 https://www.explainshell.com/
- 学习正则表达式 https://github.com/ziishaned/learn-regex
- 测试正则表达式 https://regex101.com/
文件与目录管理
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