记录Linux中遇到的技巧

压缩排除.svn目录

打包test目录,排除其中全部子目录中的.svn文件夹:html

# tar -zcf test.tar.gz test/ --exclude=.svn
# zip -qr test.zip test/ -x "**/.svn**"

npm安装模块命令

npm安装模块时常常出现权限错误,能够用下面的参数:java

# npm install --unsafe-perm=true --allow-root

建立免密登陆

在须要免密登陆的发起端执行,命令2中使用接收端的用户名和IP:node

# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub [username]@[ip address]

时间同步

安装crontab,配置每6个小时向ntp服务器同步一次时间:npm

# yum -y install vixie-cron
# crontab -e
    0 */6 * * * /usr/sbin/ntpdate [ntp server ip]  > /dev/null 2>&1

sed命令经常使用

# sed -i "1 i [内容]"[path/to/file]  #开头插入一行
# sed -i "$ a [内容]" [path/to/file]  #末尾插入一行


# sed -i "[行号] i [内容]" [path/to/file]  #指定行前插入一行(行号从1开始)
# sed -i "[行号] a [内容]" [path/to/file]  #指定行后插入一行
# sed -i "[行号] d" [path/to/file] #删除指定行

#
sed -i "/[关键字]/ i [内容]" [path/to/file]  #匹配行前插入一行(全部匹配行都会操做)
# sed -i "/[关键字]/ a [内容]" [path/to/file]  #匹配行后插入一行
# sed -i "/[关键字]/ d" [path/to/file]  #删除匹配行

# sed -i "s/[原内容]/[新内容]/" [path/to/file]  #匹配替换(每一行只替换第一个匹配的)(/能够用#或?代替防止与内容冲突)
# sed -i "s/[原内容]/[新内容]/g" [path/to/file]  #匹配替换(替换全部匹配的)

# sed -i "[行号] s/[原内容]/[新内容]/g" [path/to/file]  #只匹配替换指定行
# sed -i "[起始行号],[结束行号] s/[原内容]/[新内容]/g" [path/to/file]  #匹配替换指定的范围
# sed -i "/[关键字]/ s/[原内容]/[新内容]/g" [path/to/file]  #只匹配替换匹配关键字的行

# sed -i "s/[原内容]/[新内容]/g" `grep "[原内容]" -l \`find -name config.xml\``  #与find和grep组合使用

awk命令经常使用

# awk '{print $1}' filename    #$1~$n 每行分隔的第n个字段;$0 整行内容;NF 字段总数
# awk '{print "字段1:"$1"\t字段2:"$2}' filename    #格式化组合显示
# awk -F ',' '{print $1}' filename    #用逗号分隔,默认是空格分隔
# awk -F '[,#]' '{print $1}' filename    #逗号或#号分隔
# awk -F '[,#]+' '{print $1}' filename    #1个或多个,#分隔,好比,,或###
# awk -F 'GET|HTTP' '{print $1}' filename  #以GET或HTTP分隔
# awk '{print "\""}' filename  #print输出双引号
# awk '{print "'\''"}' filename  #print输出单引号
# awk '{if(NR==1||(NR>2&&NR<4)) print $0}' #行数=1或3>行数>2;其余还有>=,<=,!=;如有多个文件NR会递增叠加,不递增单独计算的是FNR
# awk 'BEGIN {count=0;print "开始统计行数"} {print $0;count++} END{print "统计结束,行数是",count}'  #自定义变量,统计行数,打印每行内容
# awk '/^#/' filename  #正则匹配,以#开头的行
#
awk '/^#/ {print $0}' filename  #匹配后打印整行内容,与上一个表达式同义
# awk '!/^#/' filename  #不以#开头的行
# awk '{if($0~/^1/) print "第"NR"行以1开头";else if($0~/^2/) print "第"NR"行以2开头";else print "第"NR"行以其余开头"}' filename  #if else语句,相对于~,!~表示不匹配

批量删除BOM

# sed -i "s/\xEF\xBB\xBF//" `grep -Ilr $'^\xEF\xBB\xBF' .`  #查到当前文件夹全部子目录中包含BOM的文件,而后删除BOM

批量处理^M

注意:^M在Linux命令行输入的方式是 ctrl+v,ctrl+m;vim

# sed -i "s/^M//" `grep "^M" -lr .`  #查到当前文件夹全部子目录中包含^M的文件,而后删除

vim修改fileformat

:set ff    #查看fileformat
:set ff=dos    #配置fileformat为dos
:set ff=unix    #配置fileformat为unix
:%s/^M$//g    #删除全部的^M(^M=ctrl+v,ctrl+m)

vim删除重复行

:sort    #先排序 :g/^\(.*\)$\n\1$/d  #删除重复行

内存buff/cache清理

系统频繁大量读写文件会形成内存buff/cache太高,好比:windows

此时能够用如下命令进行清理:浏览器

sync;echo 1 >/proc/sys/vm/drop_caches  清理pagecachebash

sync;echo 2 >/proc/sys/vm/drop_caches  清理dentries和inodes服务器

sync;echo 3 > /proc/sys/vm/drop_caches   都清理cookie

查看进程中的线程

# ps -mp [pid] -o THREAD,tid,time

杀死全部匹配的进程

# ps -ef | grep [关键字] | grep -v grep  | awk '{print $2}' | xargs kill -9

Java内存信息

FGC监控,导出堆栈信息:

# jstat -gct [pid]@[ip] 1000 10
# jmap -dump:format=b,file=[path/to/file] [pid]
# jstack -l [pid] > [path/to/file]

切换到上一次的目录

# cd -

使用上条命令的参数

# ll /mydata
# cd !$
cd /mydata/

用curl下载文件

# curl -OL "download url"

Linux命令行下载jdk包

windows下用浏览器访问jdk的网址,好比:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

找到要下载的包,右键,复制连接地址,以下图:

而后在Linux命令行:

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" [复制的地址]

curl -H "Cookie: oraclelicense=accept-securebackup-cookie" -H "Connection: keep-alive" -O -L "[复制的地址]"

配置时区

# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

不支持zh_CH.utf8的处理

# localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# sed -i "$ a export LANG=zh_CN.UTF-8" /etc/profile

history增长用户和时间

# sed -i '$ a export HISTTIMEFORMAT="%F %T `whoami` "' /etc/bashrc

 

持续更新...

相关文章
相关标签/搜索