• 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干去,老陌负责轻闲,倒!!

  • 相关阅读:
    最简明的JavaScript闭包解释
    REST vs SOAP
    MAC Objective-C 开发经典书籍推荐
    测试word版博客文章
    Sitecore CMS中删除项目
    Sitecore CMS中如何命名项目名称
    Sitecore CMS中查看标准字段
    Sitecore CMS中配置项目图标
    如何在Sitecore CMS中创建项目
    如何在Sitecore CMS中管理桌面快捷方式
  • 原文地址:https://www.cnblogs.com/myccloves/p/9338033.html
Copyright © 2020-2023  润新知