我的Linux命令记录

作者: 勤劳一沙鸥 | 来源:发表于2016-08-12 10:08 被阅读146次
    学习工作中,用到的命令,开贴做个记录,方便自己,也希望能方便大家
    
    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命令,拿到一个公钥,再将些公钥放到服务器上,即完成部署。

    1. 使用 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用法请参考

    1. 极客学院sed
    2. 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

    相关文章

      网友评论

        本文标题:我的Linux命令记录

        本文链接:https://www.haomeiwen.com/subject/bvuhsttx.html