zoukankan      html  css  js  c++  java
  • 《最牛B的Linux Shell命令》笔记

    1、以sudo 运行上一条命令

      sudo !!

    大家应该都知sudo,不解释。但通常出现的情况是,敲完命令执行后报错才发现忘了sudo。如下:

    ➜  ~ cp ~/download/CentOS7-Base-163.repo /etc/yum.repos.d 
    cp: cannot create regular file '/etc/yum.repos.d/CentOS7-Base-163.repo': Permission denied
    ➜  ~ sudo cp ~/download/CentOS7-Base-163.repo /etc/yum.repos.d
    ➜  ~ ls /etc/yum.repos.d 
    CentOS7-Base-163.repo  fedora-cisco-openh264.repo  fedora.repo  fedora-updates.repo  fedora-updates-testing.repo

    这时候,新手用户就会:按上箭头,按左箭头,盯着光标回到开始处,输入sudo,回车;高手用户就蛋定多了,按Ctrl-p,按Ctrl-a,输入sudo,回车。这里介绍这个是天外飞仙级别的,对,就直接sudo !!。当然这几种解决方式效果是完全一样的,只是款不一样,嗯,不解释。两个感叹号其实是bash的一个特性,称为事件引用符(event designators)。!!其实相当于!-1,引用前一条命令,当然也可以!-2,!-50。默认情况下bash会在~/.bash_history文件内记录用户执行的最近500条命令,history命令可以显示这些命令。

    ➜  ~ rm /etc/yum.repos.d/CentOS7-Base-163.repo 
    rm: remove write-protected regular file '/etc/yum.repos.d/CentOS7-Base-163.repo'? y
    rm: cannot remove '/etc/yum.repos.d/CentOS7-Base-163.repo': Permission denied
    ➜  ~ sudo !!
    ➜  ~ sudo rm /etc/yum.repos.d/CentOS7-Base-163.repo
    [sudo] password for fezhi: 
    ➜  ~ ll /etc/yum.repos.d 
    total 16K
    -rw-r--r--. 1 root root  689 Nov  4 00:13 fedora-cisco-openh264.repo
    -rw-r--r--. 1 root root 1.3K Nov  4 00:13 fedora.repo
    -rw-r--r--. 1 root root 1.3K Nov  4 00:13 fedora-updates.repo
    -rw-r--r--. 1 root root 1.3K Nov  4 00:13 fedora-updates-testing.repo
    

      

    2、 在 以 普 通 用 户 打 开 的VIM 当 中 保 存 一 个ROOT 用 户文件

    :w !sudo tee % 

    我们常常忘记了sudo就直接用vim编辑/etc内的文件,(不过也不一定,vim发现保存的文件无法保存时候会提示)等编辑好了,保存时候才发现没权限。曲线方法是先保存个临时文件,退出后再sudo cp回去。不过实际上在vim里面可以直接完成这个过程的,命令就是如此。查阅vim的文档(输入:help :w),会提到命令:w!{cmd},让vim执行一个外部命令{cmd},然后把当前缓冲区的内容从stdin传入。tee是一个把stdin保存到文件的小工具。而%,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。所以执行这个命令,就相当于从vim外部修改了当前编辑的文件,好完工。

    3、切回到上一个目录  

    $cd -
    

     横杆-代表上一个目录,cd - 等于 cd $OLDPWD bash的固定变态$OLDPWD总保存着之前一个目录的路径,相对得,$PWD保存着当前目录的路径。

    4、快速备份一个文件

    $cp  filename{,.bak}  

    这道命令把filename文件拷贝成filename.bak,大家应该在一些比较复杂的安装教
    程里面见过这样的用法。其原理就在于bash对大括号的展开操作,filename{,.bak}
    这一段会被展开成filename filename.bak再传给cp,于是就有了备份的命令了。

    ➜  ~ ls
    bash-learn  CloneGithub  download  gitzhi  py-learn  SoftWare  spf13-vim.sh
    ➜  ~ cp spf13-vim.sh{,.backup}
    ➜  ~ cp spf13-vim.sh{,.bak}   
    ➜  ~ ls
    bash-learn  CloneGithub  download  gitzhi  py-learn  SoftWare  spf13-vim.sh  spf13-vim.sh.backup  spf13-vim.sh.bak
    

    5、免密码SSH登陆主机

    $ssh-copy-id user@remote-machine

    这个命令把当前用户的公钥串写入到远程主机的~/.ssh/authorized_keys内,这样下
    次使用ssh登录的时候,远程主机就直接根据这串密钥完成身份校验,不再询问密码
    了。前提是你当前用户有生成了公钥,默认是没有的,先执行ssh-keygen试试吧

  • 相关阅读:
    99%的人都理解错了HTTP中GET与POST的区别
    CSS3 Border-image
    Tween.js的使用示例
    HTML5的postMessage使用记要
    Vuejs——(2)Vue生命周期,数据,手动挂载,指令,过滤器
    nodejs ejs 请求路径和静态资源文件路径
    JS逗号运算符的用法详解
    toStirng()与Object.prototype.toString.call()方法浅谈
    正则表达式之 贪婪与非贪婪模式
    利用符号进行的类型转换,转换成数字类型 ~~
  • 原文地址:https://www.cnblogs.com/me80/p/6737775.html
Copyright © 2011-2022 走看看