zoukankan      html  css  js  c++  java
  • 《Linux命令行与shell脚本编程大全》 第五章理解shell

    5.1

    1. cat /etc/passwd

    可以查看每个用户自己的默认的shell程序。

    2.默认的交互shell会在用户登录某个虚拟控制台终端时启动。

    不过还有另外一个默认的shell是/bin/sh,它作为默认的shell,用于那些需要在启动时使用的shell脚本

    ls -l /bin/sh   进行查看

    乌班图的发行版中默认的系统shell(dash shell)和默认的交互shell(bash shell)并不相同。

    可以直接 dash 来启动 dash shell

    exit 退出

    5.2 shell 的父子关系

    一个shell可以创建另外一个shell(子shell)。

    ps -f 查看一下。

    bash shell就是一个进程(运行的程序)。

    输入bash就会创建一个子shell。exit退出。  ps- f --forest。可以展示进程间的嵌套结构。

    5.2.1 进程列表

    $ pwd; ls; pwd; cd /; echo $BASH_SUBSHELL

    这样可以让命令依次执行。这是在当前shell中执行的。

    $(pwd; ls; echo $BASH_SUBSHELL;) // 这个是在子shell中执行。

    () 还可以嵌套,比如pwd;(pwd; (ls; cd /home))

    echo $BASH_SUBSHELL   若返回0,表示没有子shell。

    $sleep 300&   // 后台运行命令,& 就是把命令置入后台模式

    jobs  可以查看后台作业信息

    还可以这样,将进程列表置入后台。

    $(sleep 2; echo $BASH_SUBSHELL; sleep 2;)&

    协程:可以同时做两件事,它在后台生成一个子shell,并在这个子shell中执行命令。

    使用coproc命令进行协程处理:

    $ coproc sleep 10

    还可以这样:

    $coproc MyJob { sleep 10; }  // 相当于给sleep 10取了个名字。注意那几个空格

    5.3 理解shell的内建命令

    1.外部命令:又称文件系统命令,存在与bash shell之外的命令。并不是shell程序的一部分

    通常位于 /bin  /usr/bin   /sbin   /usr/sbin中。

    外部 命令执行时会创建一个子进程。这种操作叫 衍生(forking

    比如ps是一个外部命令,可以使用which 和 type命令找到它

    $which ps

    $ type -a ps

    $ ls -l /bin/ps

    2. 内建命令:不需要子进程来执行,和shell是一体的,不需要借助外部程序文件来运行。

    (1)比如  exit 和 cd是内建命令

    $type exit

    $type cd

    有些命令有多种实现,比如pwd和echo既有外部命令也有内建命令

    #type -a echo

    which  只显示出外部命令文件。

    type -a 显示出每个命令的两种实现。

    窍门:对于多种实现的命令,默认执行是内建的,若想要执行外部命令可以指定对应的文件就好了。

    比如

    $pwd  // 执行的是内部命令

    $/bin/pwd   // 执行的外部命令

    (2)查看历史执行的命令

    $ history  // 这个是内建命令

    可以看到之前执行的命令,前面有个数字,代表命令编号。比如是38

    $ !38  // 表示执行第38条命令

    (3)$ !!   这个是执行上一条输入的命令。

    (4)命令别名

    alias   也是内建命令

    $alias  -p   // 查看当前可用的别名

    创建自己的命令

    $alias xcyls='ls -al'

    一个别名仅仅在它所被定义的shell进程中才有效。在 ~/.bashrc下修改可以对所有shell都有效

    shell  子shell  进程 子进程 都会受到环境变量的影响。

  • 相关阅读:
    使用Leangoo玩转故事地图
    用Leangoo做敏捷需求管理
    LEANGOO成员
    LEANGOO卡片
    给WebAPI的REST接口添加测试页面(三)
    使用Win2D在UWP程序中2D绘图(二)
    Visual Studio 2015的“转到定义”和“查看定义”出错的Bug
    使用Win2D在UWP程序中2D绘图(一)
    Windows 10 UWP程序标题栏设置
    .NET 4.6的RyuJIT尾递归优化的Bug
  • 原文地址:https://www.cnblogs.com/xcywt/p/7818288.html
Copyright © 2011-2022 走看看