watch 定时监测
如同名字一样,watch就是监测一个命令的运行结果,省得自己不断的重复输入。
watch -n 2 "nvidia-smi" 每两秒运行一次nvidia-smi
watch -n 2 -d "nvidia-smi" 同时高亮显示每次命令执行后变化的区域
检查代码行数
统计某目录(demo)下.py文件的代码行数
find demo -name "*.py"|xargs cat|grep -v ^$|wc -l
cloc ./
某项目(project_xxx)下空格变tab
# mac下 -i用来在源文件后组成备份文件名,这里不备份,直接为空; 同时,macos也需要给 s 参数加上$
find PROJECT_XXX -name "*.py" -type f | xargs sed -i '' $'s/ /\t/g'
xargs 命令详解
mac下 xargs命令不支持 -d 参数,如果就是需要了,怎么办?在加一层 awk来解决, 把X换成NULL字符:
echo "nameXnameXnameXname" | awk '{gsub("X", "\0", $0);print $0}'|xargs -0 -n2
# -d 参数更改分隔符
# -p -t 打印要执行的命令,询问用户是否执行;-t参数则是打印出最终要执行的命令,然后直接执行,不需要用户确认。
# find命令有一个参数-print0,指定输出的文件列表以null分隔。然后,xargs命令的-0参数表示用null当作分隔符。
$ find /path -type f -print0 | xargs -0 rm # 防止文件名有空格
# -L参数指定多少行作为一个命令行参数
-n参数指定每次将多少项,作为命令行参数
$ echo -e "*.py" "*.md" |xargs -n 1 find . -name # 显示当前目录下 *.py 与 *.md
以及相当重要的参数 “-I参数”:
# -I指定每一项命令行参数的替代字符串
$ cat foo.txt
one
two
three
$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one
two
three
# mv 正则
ls |grep -E [0-9]+.[0-9]+.[0-9]+.[0-9]+.[0-9]+.[0-9]+.[6-9]+.[3].dcm |xargs -I file sh -c "mv file ../ct_test/"
$ ls
one two three
# 正则删除某些文件
ls | grep -E 正则表达式 |xargs rm
# 统计文件数量
ls | grep -E 正则表达式 |wc -l
# [0-9]+.[0-9]+.[0-9]+.[0-9]+.[0-9]+.[0-9]+.[0-9]+.[0-9]+.[0-9]+.[0-9]+.dcm
grep命令
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
# 行首与行尾字节 ^ $
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
开放端口
iptables -I INPUT 1 -p udp --dport 60000:61000 -j ACCEPT
# 开放 60000 - 61000端口
根据PID查出docker container
# 找到该PID的最上层父进程pid
pstree -p |grep -n5 PID
# 得到父进程pid后,遍历所有容器的init 进程进行匹配
docker ps |awk '{print $1}' |grep -v CONTAINER |xargs docker inspect -f '' |grep father_pid
# 利用上面输出的container id 进行遍历
docker ps |grep container_id
服务器传文件
# 已经存在的文件不传输
find . -type f -exec chmod a-w a-w '{}' \;
# 然后 scp
scp targetIP:/home/xxx ./
# 或者使用rsync
rsync -avuP targetIP:/home/xxx ./
crontab 系统服务计划
对于周期性运行的工作,比如每天凌晨01:00内存内容计算并写入硬盘。可以加入系统的计划中。
# Example of job definition:
# .---------------- minute (0 - 59) # 分钟
# | .------------- hour (0 - 23) # 小时
# | | .---------- day of month (1 - 31)# 日期
# | | | .------- month (1 - 12) OR # 月份 jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat #星期几
# | | | | |
# * * * * * user-name command to be executed # 要执行的命令,可以是系统命令,也可以是自己编写的脚本文件
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次
举例子:
1、每分钟执行一次
* * * * *
2、每隔一小时执行一次
00 * * * *
or
* */1 * * * (/表示频率) **使用频率的执行方式有bug,网上说的不准**
3、每小时的15和30分各执行一次
15,30 * * * * (,表示并列)
4、在每天上午 8- 11时中间每小时 15 ,45分各执行一次
15,45 8-11 * * * command (-表示范围)
5、每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
6、每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command