压缩排除.svn目录

打包test目录,排除其中所有子目录中的.svn文件夹:

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

npm安装模块命令

npm安装模块时经常出现权限错误,可以用下面的参数:

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

创建免密登录

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

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

时间同步

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

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

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;

# 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过高,比如:

记录Linux中遇到的技巧-LMLPHP

此时可以用以下命令进行清理:

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

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

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

查看进程中的线程

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

杀死所有匹配的进程

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

Java内存信息

FGC监控,导出堆栈信息:

# jstat -gct [pid]@[ip]
# 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中遇到的技巧-LMLPHP

然后在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- -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 

查看进程启动和持续时间

常用的 ps -ef 中能看到的两个时间分别是进程启动时间和累计使用cpu的时间,如果进程启动超过24小时启动时间就只显示日期,若要看精确的启动时间和持续时间,可以用下面的命令:

# ps -p [pid] -o lstart,etime  # lstart 精确的启动时间, etime 进程的持续时间

ls显示更容易处理的日期和时间

ls命令有一个参数--time-style,其默认为locale,中文环境下用 ls -l ,文件的日期时间通常会显示为这样不方便处理的格式:

dr-xr-x---. 26 root root     4096 3月  10 10:19
dr-xr-xr-x. 19 root root     4096 7月   5 2019

若加上参数 --time-style=long-iso 则为:

dr-xr-x---. 26 root root     4096 2020-03-10 10:19
dr-xr-xr-x. 19 root root     4096 2019-07-05 18:32

对于写脚本时提取日期时间会方便很多。

若平时也想用这个格式,但每次都要加参数太麻烦了,可以定义环境变量:

export TIME_STYLE=long-iso

或者修改ll别名的定义(centos7中位于/etc/profile.d/colorls.sh):

alias ll='ls -l --color=auto --time-style=long-iso' 2>/dev/null

持续更新...

04-25 06:57
查看更多