系统开发常用命令
基础命令
pbcopy < ~/.ssh/id_rsa.pub 公钥复制到 剪切板(pbcopy) date +%Y-%m-%d shell 显示格式化的日期 强制删除一个文件夹 rm -rf filepath/ split -l 1000 data.log data-split- 将文件data.log每1000行切换为一个文件,文件前缀都是data-split-,后面依次是aa、ab、....zz,多用于多进程批量处理文件
文件的解压和压缩
解压 tar -xvf ***.tar 压缩 tar -cvf ***.tar 路径
文件内容排序
sort -u -n -k 2,2 data.log 也可简写为 sort -u -kn2 data.log 其中 -k 2,2表示按第2列 排序(起+止),-u是去重,-n是按数字排序
vim相关
:%s/^M/\r/g 直接vi打开一个在win环境下产生的csv,可能出现大量^M,该命令可转化为linux下的换行符(即\r 而不是\n),^M要使用 CTRL-V CTRL-M生成 :!wc % 计算文件中总的单词量 %表示范围
删除匹配到关键字的行 g/pattern/d, 删除不匹配的行 g!/pattern/d
awk相关
awk '{print $1}' data.log | awk '{for(i=1; i<=NF; i++) freq[$i]++;$i++;} END{for(word in freq) { print word,freq[word]; }}' 统计某列取值的分表频率 awk中取绝对值,需要自定义函数:awk -F"\t" ' function abs(v) {return v < 0 ? -v : v} {if (abs($6-$7)>0.001) print $0}' data.log awk 打印单引号:awk '{print "'\''"}' # 放大: awk '{print " ' \ ' ' " }'
文件对比相关
vimdiff <(awk '{print $2,$3,$4,$5,$6}' ~/data1.log) <(awk '{print $2,$3,$4,$5,$6}' ~/data2.log) vimdiff对比2个文件的指定列,注意<是定向符 两个文件交集 comm -12 data1 data2 两个大文件的交集 join -1 1 -2 1 data1.sorted data2.sorted // data1, data2均只含1列内容 两个文件差集 grep -F -v -f data1 data2 > diff12 或 comm -2 -3 <(sort data1) <(sort data2) > diff12 两个大文件的差集 join -v 1 -1 1 -2 1 data1.sorted data2.sorted // data1-data2
mysql相关
命令行支持子查询:select id from blog where code in (select code from blog where id = 1) and id != 1;查与blog1同属于一个code的其他blog.id 将浮点数转化为整数:select (cast(100.123*1000 as DECIMAL(0)))%10 将时间戳格式化为指定格式的日期:select from_unixtime(1441014331,'%Y%m%d') 查询时间戳属于星期几:select dayname(from_unixtime(addtime)) from blog where id = 1; (1 = Sunday, 2 = Monday, …, 7 = Saturday)
系统相关
lsof | grep 8080 查看8080端口对应的进程 ps -ef | grep scriptfilename 检查后台是否有某个脚本在执行 ps pid查看进程的详细信息 kill pid 强制停掉某个进程
服务相关
sudo svstat /service/myservice 查看服务当前状态 sudo svc -d /service/myservice 停止 sudo svc -u /service/myservice 启动 sudo svc -t /service/myservice 重启