Linux常用命令

2017年07月06日

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


-_-below can discuss!-_-