我的Linux命令记录
学习工作中,用到的命令,开贴做个记录,方便自己,也希望能方便大家
zsh,oh-my-zsh
更换默认的shell至zsh
yum install zsh -y
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
为什么开始就要更换?因为oh-my-zsh好用,谁用谁知道。
有许多机器,在安装zsh, oh-my-zsh总是不完全成功,最后一步要手动替换bash至zsh,那么命令来了
chsh -s /bin/zsh
但是, /bin/zsh必须出现在/etc/shells文件中
zsh有一个好处是映射好很多快捷命令,使用alias
命令可以查看
...
gclean='git reset --hard && git clean -dfx'
gcm='git checkout master'
gco='git checkout'
gcount='git shortlog -sn'
gcp='git cherry-pick'
gd='git diff'
gf='git ls-files | grep'
...
单独列举git这块的内容,因为个人使用频率较高。
但后来发现,在进入git目录,使用git add 命令的时候,会很卡,估计是因为oh-my-zsh默认加载了名为git的插件,会计算当前目录的git状态,而这个暂时使用率不高,所以一般可以去掉,使用gitfast插件代替。(ps: 我想gitfast的作者也是相同的原因才来编写的吧)
调整方法:vim ~/.zshrc
...
plugins=(gitfast)
...
当然,最后要退出shell,重新进入才能生效噢
关于卡顿的问题
现象是每次cd和ll时都会被卡住很长时间根本受不了,最后在官方github查明原因是使用的主题会自动获取git信息,可以使用以下命令禁止zsh自动获取git信息,解决卡顿问题
git config --global oh-my-zsh.hide-status 1
vim
撤销:u
重做:ctrl+r
行首:0 (相当于home)
行尾:$ (相当于end)
复制:10 yy复制10行,不写默认当前行
粘贴:p
显示行号:set number
隐藏行号:set unnumber
查找替换文件内容: :%s/<key>/<string>/g 去掉%s,只替换当前行
ssh 自动登陆 keygen 基本使用
懒人工具?免于每次输入密码。部署完成后,在客户机操作,ssh,scp免密码
大致流程: 客户机使用kengen命令,拿到一个公钥,再将些公钥放到服务器上,即完成部署。
- 使用 ssh-keygen命令后,会在~/.ssh/目录下生成两个文件,默认生成的两个文件是:
id_rsa
,id_rsa.pub
- 追加
id_rsa.pub
里的内容,至服务器/root/.ssh/authorized_keys
文件的未尾(如果不存在,创建它) - 好像已然部署完成了,测试吧
今天突然碰到添加了authorized_keys,但不生效的问题,最终解决方案:
1,保证 /root/.ssh的权限为700
2,保证 /root/.ssh/authorized_keys的权限为600
3,请查看 /etc/ssh/sshd_config,中 AuthorizedKeysFile 的值,因为可以修改为其它文件(如图,我就是这个原因)
/etc/ssh/sshd_config
4,如果是这样的话,修改你的authorized_keys的文件名称吧
最新进展(2016-08-25) 上次搞到这里,一直以为是linux为了安全,把authorized_keys文件替换的名称,哪知道服务器被黑了,中了 minerd 木马,被当成挖矿的肉机,CPU点用率居高不下,导致这台服役多件的伪服务器因为CPU温度过高,宕机好几次。
最终通过大师指引,解除木马危机。彻底清除Linux centos minerd木马
ssh命令
- 使用ssh命令,连接各种服务器
ssh -l root 192.168.1.2
ssh -v host显示连接信息
ssh root@192.168.1.2
- 连接变慢了
服务器端 请设置 /etc/ssh/ssd_conf
Paste_Image.png
scp
scp 经常用于多几个服务器之间拷贝文件。但在使用scp命令时会遇到敲完命令回车时,连接很慢,要等好久才能出现输入密码的提示符,好吧直接说答案。
查看慢在哪里的命令
scp -v localfile user@host:/path```
变快了
scp -o GSSAPIAuthentication=no localfile user@host:/path
可以把此选项放到到本机的配置文件中
vim ~/.ssh/config
GSSAPIAuthentication no
~/.ssh/config
查找目录下的所有文件中是否含有某个字符串
find .|xargs grep findword
find *.php | xargs grep findword
查找当前目录下所以包含/-1/
的php文件,忽略vendor
目录的代码
find . -path "./vendor" -prune -o -type f -name "*.php" |xargs grep "/-1/"
更多内容请参考:http://blog.sina.com.cn/s/blog_691a84f301015khx.html
替换文件内容
管道符
|
在linux属于常用且好用的工具
命令1:
find -name '*.conf' | xargs perl -pi -e 's|string|string1|g'
讲解:
1,find -name '*.conf'
使用find找出需要替换的文件
2,xargs
简单来讲是让不支持管理的命令,能够支持管道
3, perl -pi -e 's|string|string1'
最后干活的Perl脚本,没有过多研究,目前只图能够工作
命令2:
grep -i "string" -r ./ | awk -F : '{print $1}' | sort | uniq | xargs sed -i 's/string/string1/g'
讲解:
1,grep -i "string1" -r ./
找到当前目录包含字符串的文件及位置
2, awk -F : '{print $1}' | sort | uniq
使用awk格式化grep的输出,sort排序,uniq剔除重复文件
3, xargs
简单来讲是让不支持管理的命令,能够支持管道
4, sed -i 's/string/string1/g'
最后的干活~~~
单个文件,可以直接使用 sed -i 's/string/string1/g' app.conf
正则
sed -i 's/HTTP.\{1,\}/ /g' a.log
匹配HTTP.{1,}
,替换为空格的表达示
更多sed用法请参考
删除目录30天前的文件
find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} ;
/tmp --设置查找的目录;
-mtime +30 --设置时间为30天前;
-type f --设置查找的类型为文件;
-name *.log[ab] --设置文件名称中包含loga或者logb[正则?];
-exec rm -f --查找完毕后执行删除操作;
另外的方法大同小异
find . -mtime +30 -type f | xargs rm -rf
tar
- 忽略文件夹
批量修改文件名
- 给当前目录下所有文件增加.html后缀
for i in
ls *
; do mv $i $i.html; done
一个高级测试
==================建立测试文件====================
$ touch glyphicons_315911_linux{a..g}.png
$ ls *.png
glyphicons_315911_linuxa.png glyphicons_315911_linuxe.png
glyphicons_315911_linuxb.png glyphicons_315911_linuxf.png
glyphicons_315911_linuxc.png glyphicons_315911_linuxg.png
glyphicons_315911_linuxd.png
==================运行脚本========================
$ for i in `ls glyphicons_*.png`; do mv $i ${i##glyphicons_*_}; done
$ ls *.png
linuxa.png linuxc.png linuxe.png linuxg.png
linuxb.png linuxd.png linuxf.png
- 给指定后缀的文件,增加额外的后缀
for var in `find . -type f | grep -E "\.java$|\.c$"`; do cp "$var" "${var}.txt"; done
- 批量替换文件名中指定字符串[a.java-xin ==> a.java]
find . -type f -name "*java-xin" -exec rename "java-xin" "java" {} \;
测试效果
find . -type f -name "*java-xin" -exec rename "java-xin" "java" {} ;
unzip
- 解压包内文件到指定目录
awk
- 指定分隔字符,并对截取输出字符
last
显示Linux登陆记录,配合 last | more
防御性检查
tmpwatch
session一直直接存放在/tmp目录,以为万事大吉,傻傻的以为会自动清理,但结果确是不会。
后来查阅资料,才发现,需要安装一个服务 tmpwatch