zoukankan      html  css  js  c++  java
  • linux基础知识-18

    一、启动shell

    在linux系统中,shell是最常使用的程序。当我们登录或打开终端,shell会自动启动。如果我们想要运行shell的另一个实例,可以执行bash启动新shell,这个shell是原shell的子shell。

    #启用新shell
    bash
    
    #退出新shell
    exit
    

    ~/.bashrc文件

    shell启动时会在用户主目录里面查找一个名为 ".bashrc"的文件,用它来自定义shell的一些环境变量等。shell启动时会执行这个文件中的代码。

    我们可以添加一些命令到这个文件中,启动时会自动运行。比如添加:cal命令到这个文件中,之后登录终端看看效果:

    echo "cal " >> ~/.bashrc
    

    观察得知打开终端后会自动运行cal这条命令。

    二、命令历史

    当我们从键盘输入命令并执行,这些命令都会保存在命令的历史记录中。

    (一)查看命令历史:history

    [linux@ccloves ~]$ history
      990  head -n 5 /etc/samba/smb.conf
      991  tail /etc/samba/smb.conf
      992  cat /etc/passwd
      993  cat /etc/group
    

    可以用up,down光标键快速浏览命令历史中的命令,即:上一条,下一条浏览……

    (二)运行命令历史中的命令

    当用history查看命令后,会发现每条命令前面有编号,可以用 !+编号 的方式运行此条命令。

    1987  history | more
    1988  clear
    

    我们发现:1988是clear命令,此时想要运行clear就可以输入:

    !1988
    

    对于一条很长很长的命令,这样的操作是很方便快捷的。

    如果只想执行上一条命令,可以用光标键调出上一条命令,之后回车。或者输入:!! 就可以了。

    我们也可以通过 !+命令关键字 的方式来快速执行命令。这种命令的规则是从下向上搜索关键字,首次匹配则执行(匹配就是查看命令字符串前某些字符和关键字是否相等)。比如:

     2001  ls /etc/fstab -l
     2002  clear
     2003  history
    

    当输入!ls的时候,先匹配2003行,不符合继续匹配2002行,不符合继续匹配2001行,匹配成功,则执行 ls /etc/fstab -l这条命令。

    (三)保存命令历史

    当退出shell时,这些命令历史记录(在内存中),会保存到~/.bash_history中。 当启动shell时又从该文件中读取内容初始化命令历史。

    (四)命令历史记录环境变量

    HISTFILE 此变量指定保存命令历史的文件。我们可以通过 echo $HISTFILE来查看这个变量的值,结果是:~/.bash_history
    HISTFILESIZE 1000 此变量决定~/.bash_history最多存放多少条记录

    (五)history命令技巧

    1. esc+. 和 alt+.

    这两个快捷键的功能一样,可以恢复上一条命令的最后一个标记。比如:

    [linux@ccloves ~]$ ls /etc/samba
    gdbcommands  smb.conf  tls
    [linux@ccloves ~]$ cd 
    

    我想查看ls /etc/samba目录里有没有smb.conf,如果有就用cd命令进入。经过查看果然在里面,此时输入cd 再输入/etc/samba很麻烦,我们可以按alt+.自动输入/etc/samba,也就是恢复最后一个标记。
    老陌测试发现按多次,则一直向上切换最后一个标记。牛大了!!

    2. ctrl+R组合键:

    对于这样一个场景,我们输入了一些命令:

      528  mkfs.ext4 /dev/sdb2
      529  clear
      530  history
      531  mkdir /mnt/linux
      532  mount /dev/sdb2 /mnt/linux
      533  ls 
      534  ls /mnt/linux
      535  history
    [root@localhost ~]# 
    

    想要再次执行532行可以用!532,但有时候我们并不想查看history,因为我知道这个命令的开头是mount,此时可以用 ctrl+R 键,进入搜索状态,输入mou,shell后面自动提示,当确认是此条命令按回车执行。

    (reverse-i-search)`mou': mount /dev/sdb2 /mnt/linux
    

    3. fc命令:
    fc命令自动打开vi编辑器,之后可以编辑命令,当退出编辑器时立即执行。对于一条很长的命令,用fc调用编辑器修改起来很方便。 老陌测试可以输入多条命令,退出之后一起执行。

    退出时可以在命令模式下按ZZ

    补充一点:我今天重装操作系统fc命令自动调用nano编辑器了,而不是vi。解决的方法是

    fc -e vi 
    

    这样调用vi编辑器。 比如: fc -e gedit调用gedit编辑器了,当然这只是测试,为了修改默认调用的编辑器我们设置一个环境变量 :FCEDIT

    echo "FCEDIT=vi" >> ~/.bashrc
    

    这样就可以了。

    (六)禁用历史命令

    如果不想让shell命令保存到.bash_history中,怎么办?老陌认为你可能做坏事了,嘿嘿!
    在linux中有一个设备节点文件/dev/null,这是一个黑洞,能收万物!我们创建它的软链接为.bash_history就可以了。

    [root@localhost ~]# rm .bash_history 
    [root@localhost ~]# ln -s /dev/null  .bash_history
    

    之后体验一下吧。

    三、运行多个命令

    在一行输入多个命令,之间用分号隔开,这样就相当于一次执行多条命令。但有个缺点,没有机会检查第一个命令的效果。

    linux@myccloves:~/exercises$ ls /etc/ ; clear
    

    先执行ls /etc,执行完成之后执行clear。不过辛辛苦苦打印出来的文件列表,直接被清空了,白玩了……

    这个分号让我们想起find命令的动作部分要以分号结尾,但我们输入分号时,shell认为这是一个命令分隔符,不是find命令的一部分,所以必须写成;转义,现在明白了。

    四、在子shell中运行命令

    通过前面知道运行一下bash得到了shell的另一个实例,称为子shell。只要将命令放到()里,就相当于在子shell中运行。

    linux@myccloves:~/exercises$ pwd
    /home/linux/exercises
    linux@myccloves:~/exercises$ (cd /etc/samba; ls)
    gdbcommands  smb.conf  tls
    linux@myccloves:~/exercises$ 
    

    我们发现当前工作目录是: /home/linux/exercises ,当我们执行 cd /etc/samba,并打印输出后,当前工作目录还是 /home/linux/exercises。这就说明子shell和当前shell环境是两个实例,之间没有影响。
    老陌可以这样理解:

    bash
    cd /etc/samba
    ls 
    exit
    

    先开启子shell,执行命令,之后退出。

    从此之后老陌牛了,有啥事让子shell干去,老陌负责轻闲,倒!!

  • 相关阅读:
    16. 3Sum Closest
    17. Letter Combinations of a Phone Number
    20. Valid Parentheses
    77. Combinations
    80. Remove Duplicates from Sorted Array II
    82. Remove Duplicates from Sorted List II
    88. Merge Sorted Array
    257. Binary Tree Paths
    225. Implement Stack using Queues
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/myccloves/p/9338033.html
Copyright © 2011-2022 走看看