|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 770|回復: 0
打印 上一主題 下一主題

linux 下 shell 有用的常识

[複製鏈接]

989

主題

1

好友

5294

積分

教授

Rank: 8Rank: 8

  • TA的每日心情
    奮斗
    2024-10-17 01:09
  • 簽到天數: 1257 天

    [LV.10]以壇為家III

    推廣值
    2
    貢獻值
    378
    金錢
    1541
    威望
    5294
    主題
    989

    回文勇士 文明人 中學生 高中生 簽到勳章 簽到達人 男生勳章 大學生 文章勇士 附件高人 附件達人 文章達人 教授

    樓主
    發表於 2012-9-24 23:55:02
    本文采用问答式,介绍linux下shell常用的知识,希望对大家有帮助
        Q、如何查看当前使用什么shell。
        A: echo $SHELL 或ps都可以看到。
        Q、如何查看当前系统支持哪些shell。
        A: chsh --list-shells 或  cat /etc/shells
            Q、如何更改当前shell
            A:chsh -s /bin/csh; 或编辑/etc/passed. 这些改变不会立即生效,改变的是用户登录shell,需要用户重新登录才能看到shell改变。如果想立即改变shell。 直接运行/bin/csh。
        另外在shell脚本可以指定 #!/bin/bash 。指定解析shell。也可以 /bin/bash xx.sh 显示指定shell解析器运行。
        Q、什么是登录shell 好非登录shell
            A:登录shell 是通过输入用户名密码登录得到的shell。如ssh或telnet登录进入的shell。非登陆shell如在图形系统下打开控制台。或直接在命令行里输入/bin/csh 之类切换得到shell。属于非登录shell。如果在命令行里输入 /bin/bash --login. 那么这时候得到的就是登录shell
           两者差别是,登录shell会加载一些文件。首先执行/etc/profile,然后执行以~/.bash_开头的文件,其次~/.profile。退出时候执行~/.bash_logout脚本(如果存在)。
        非登陆shell不会执行上面这些脚本。而是执行~/.bashrc。
        一般系统为了保证~/.bashrc都会被执行,~/.bash_profile中调用~/.bashrc
        if [ -f ~/.bashrc ]; then
        . ~/.bashrc   
        fi
         如此一来。~/.bashrc反而变成保证一致性,变得非常通用而且很重要的初始化地方。

        另外由于~代表各个用户自己,所以为了避免给每个用户修改~/.bashrc 文件。由此产生了一个全局所有用户的文件/etc/bashrc。 在每个用户 ~/.bashrc 文件有这样一句话    if [ -f /etc/bashrc ]; then    . /etc/bashrc    fi    这样就方便了,更改一个文件内容,对登录还是分登录shell,所有用户都能生效。
        Q、什么是交互shell和非交互shell
            A:非交互Shell是指为执行脚本而fork出来的子Shell。说简单点。就是script脚本里面shell命令是在非交互shell下执行。因为解析这些命令时候。会启动一个/bin/bash 之类解析器去执行。
        Q、如何去执行一个shell脚本
        A:有两种方式:1是启动一个子shell解析器去执行脚本。就是上面说到的非交互shell。
        ./test.sh 或 /bin/bash test.sh(和sh test.sh等同)
        另一种方式是不启动子shell解析器。在当前shell内执行。
        source test.sh 或 .  test.sh. 这种情况下实际上source和。 是bash的内部指令
        Q、如何查看当前是终端还是伪终端
        A:使用ps命令。
        在当前机器,如在虚拟机里面输入ps如下。看到是终端类型TTY   

          在ssh或telnet登录的控制 使用ps查看   


       这里pts 中p=pseudo意思。
       这些终端设备当文件使用。例如你可以使用echo 1 > /dev/tty1  或 echo 2 > /dev/pts/1 直接显示消息到终端上去。可以帮你消息输出到别人控制台上去很有意思。
       Q:shell 和进程组,会话的关系
       A:在shell在命令行下运行的进程。该进程一般是进程组长,进程ID=进程组ID。该进程的会话组长一般是shell。
    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-11-1 12:33 , Processed in 0.012739 second(s), 17 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部