精华内容
下载资源
问答
  • 描述了一些关于交互式shell和非交互式shell的区别,属于概念性的东西。
  • 曾经写过“交互式shell和非交互式shell、登录shell和非登录shell的区别”,但那时理解相对更浅一些,现在多了一点认识,把这篇文章稍微完善一下吧。 交互式shell和非交互式shell、登录shell和非登录shell的区别。...

    曾经写过“交互式shell和非交互式shell、登录shell和非登录shell的区别”,但那时理解相对更浅一些,现在多了一点认识,把这篇文章稍微完善一下吧。

    交互式shell和非交互式shell、登录shell和非登录shell的区别。
    首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录。

    交互式shell和非交互式shell(interactive shell and non-interactive shell)
    交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。
    shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。
    可以通过打印“$-”变量的值(代表着当前shell的选项标志),查看其中的“i”选项(表示interactive shell)来区分交互式与非交互式shell。


    登录shell和非登录shell
    登录shell:是需要用户名、密码登录后才能进入的shell(或者通过”–login”选项生成的shell)。
    非登录shell:当然就不需要输入用户名和密码即可打开的Shell,例如:直接命令“bash”就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。
    执行exit命令,退出一个shell(登录或非登录shell);
    执行logout命令,退出登录shell(不能退出非登录shell)。

    bash是 login shell 时,其进程名为”-bash“ 而不是”bash”。 比如下面的命令行演示:
    man bash: A login shell is one whose first character of argument zero is a -, or one started with the –login option.

    总结一下曾经看在chinaunix论坛中看到的关于登录shell与非登录shell、交互式shell与非交互式shell的讨论:
    Login Shell:当init3时,mingetty spawn出登录提示符的时候,你输入帐号和密码进入了,出现了shell提示符,这个过程就是登录shell;
    Interactive Shell:接下来你得到了一个像“root@host />”这样的提示符,你输入什么,它就解释出什么,这就是交互式shell;你在当前shell又fork了一个 shell(bash),这个bash也是交互式shell。通常情况下interactive shell是login shell派生出来的。
    Non Interactive Shell:你需要写一个bash script,用外部shell执行“bash script.sh”命令,它(bash)从可以第一条命令执行到最后一条然后退出,不与你进行任何交互,它就是非交互式shell。
    交互式非登录shell,例如你在Gnome图形界面中打开“终端”出来的那种窗口程序,和登录shell相比,它是“非登录”的,你并不需要输入用户名和密码,和非交互式shell相比,这是“交互式”的,就像你说的那它“你输入什么,它就解释什么”。

    对于Bash来说,登录shell(包括交互式登录shell和使用“–login”选项的非交互shell),它会首先读取和执行/etc/profile全局配置文件中的命令,然后依次查找~/.bash_profile、~/.bash_login 和 ~/.profile这三个配置文件,读取和执行这三个中的第一个存在且可读的文件中命令。除非被“–noprofile”选项禁止了。
    在非登录shell里,只读取 ~/.bashrc (和 /etc/bash.bashrc、/etc/bashrc )文件,不同的发行版里面可能有所不同
    ,如RHEL6.3中非登录shell仅执行了“~/.bashrc”文件(没有执行/etc/bashrc),而KUbuntu10.04中却依次执行了/etc/bash.bashrc 和 ~/.bashrc 文件。
    对于这些规则,可以直接在相应的配置文件中加一些echo命令来验证其真实性。

    参考资料:man bash (搜索interactive、login等关键)

    展开全文
  • 摘要:在进行环境变量设置和命令别名的设置的时候,...本文来源:bash 深入理解:交互式shell和非交互式shell、登录shell和非登录shell的区别 1.交互式bash与非交互式bash 交互式模式就是在终端上执行,shell等待

    摘要:在进行环境变量设置和命令别名的设置的时候,常常会接触到四个概念:交互式bash、非交互式bash、login bash和no login bash。本文主要来澄清这四个概念。


    本文来源:bash 深入理解:交互式shell和非交互式shell、登录shell和非登录shell的区别http://blog.csdn.net/trochiluses/article/details/13767669 


    1.交互式bash与非交互式bash


    交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。


    shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。


    区别:读取的配置文件不同,交互式bash必然读取~/.bashrc文件;非交互式bash读取的是环境变量BASH_ENV(通常情况下)所指定的配置文件。


    2.login bash与nologin bash


    登陆shell是指:(1)用户登陆时,输入用户名和密码后启动的shell(例如使用ssh登录远程主机等);(2)通过带--login参数的命令:bash --login而启动的shell。


    非登录bash:登录以后所打开的bash,比如通过Ctrl+Alt+T组合键打开的bash环境,直接通过bash命令打开的环境。


    对于用户来说,登陆shell和非登陆shell的主要区别是:启动shell时所执行的startup文件不同。登陆shell执行startup文件为:/etc/profile、~/.bash_profile、~/.bashrc(这里只是从现象上得出的推论,这种推论是有问题的,稍后讨论),而非登陆shell执行的startup文件仅为:~/.bashrc。


    3.bash中解析命令的次序


    在bash中输入一个命令,首先会从which所指定的路径中进行命令寻找(有先后顺序);然后从配置文件的命令别名中寻找。注意,配置文件的修改不会立即影响到bash的环境。

    展开全文
  • 主要介绍了Linux下交互式非交互式修改用户密码的例子,本文重点在是讲解了一个交互式修改用户密码的脚本,需要的朋友可以参考下
  • 下面小编就为大家带来一篇浅析mysql交互式连接&非交互式连接。小编觉挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 交互式shell和非交互式shell、登录shell和非登录shell的区别。 首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录。 交互式shell和非交互式shell 交互式模式就是shell等待你的输入, 并且...
      
    

    也算写过一些Bash脚本的人了,不过对与这几个概念,还不是很清楚,于是恶补了一下。
    交互式shell和非交互式shell、登录shell和非登录shell的区别。
    首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录。
    交互式shell和非交互式shell
    交互式模式就是shell等待你的输入, 并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
    shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

    启动互交式的shell

      你可在一个shell中输入带路径的shell名启动另一个shell,退出用exit命令。这在修改了一个shell的设置后验证改变效果十分有用。

      启动非互交式的shell

      最经常的用法就是用一个shell执行脚本,例:/bin/sh filename filename是包含可执行命令的文件名。

      使shell脚本可执行

      如果你想仅仅输入名字就可执行脚本,你必须:

      1、把文件用chmod命令标识为可执行。例:chmod a+x filename

      2、使用适当的shell来执行。这必须确保脚本的第一行为:“#!shell名”。例:#!/bin/sh。如果把“#!/bin/sh”放在其它行,则会被当作注释忽略掉。shell把#至行尾的内容理解为注释。

     

    chinaunix论坛中关于登录shell与非登录shell、交互式shell与非交互式Shell的讨论:
    Login Shell:当init3时,mingetty spawn出登录提示符的时候,你输入帐号和密码进入了,出现了shell提示符,这个过程就是登录外壳;
    Interactive Shell:接下来你得到了一个像
    root@host />这样的提示符,你输入什么,它就解释出什么,这就是交互式外壳;你在当前Shell又fork了一个shell(bash),这个bash也是交互式外壳。通常情况下interactive shell是login shell派生出来的。
    Non Interactive Shell:你可能需要学习写一个bash script,用外部shell执行:bash  script.sh,它(bash)从第一条命令执行到最后一条然后退出,不与你进行任何交互,它就是非交互式外壳。
    交互式非登录shell就是指你在Gnome图形界面中打开“终端”出来的那种窗口程序,
    和登录shell相比,它是“非登录”的,你并不需要输入用户名和密码,
    和非交互式shell相比,这是“交互式”的,就像你说的那它:你输入什么,它就解释出什么

    执行exit退出非登录shell状态;
    执行logout退出登录shell状态。

    在登录shell里,确实只读取/etc/profile和~/.bash_profile, ~/.bash_login, and ~/.profile按顺序最先的一个,并执行其中的命令。除非被 --noprofile选项禁止了;
    在非登录shell里,确实只读取 /etc/bash.bashrc和~/.bashrc

    参考资料:
    http://www.learndiary.com/home/space-1-do-blog-id-3780.html
    http://blog.csdn.net/jiankun_wang/archive/2009/07/02/4317407.aspx
    http://xjwb.com.cn/onews.asp?id=261
    http://linux.chinaunix.net/bbs/viewthread.php?tid=1044225

    展开全文
  • python之SSH(交互式和非交互式

    万次阅读 2017-09-04 19:13:03
    python中有一个paramiko,功能强大,用来做SSH比较方便 ... res=chan.recv(1024)#必须,接受返回消息 chan.close() 注意invoke_shell这个函数即可 另外使用这个函数命令后面记得加“\n”

    python中有一个paramiko,功能强大,用来做SSH比较方便

    先上代码

    import paramiko
    class SSHConnection(object):
        def __init__(self, host, port, username, password):
            self._host = host
            self._port = port
            self._username = username
            self._password = password
            self._transport = None
            self._sftp = None
            self._client = None
            self._connect()  # 建立连接
    
        def _connect(self):
            transport = paramiko.Transport((self._host, self._port))
            transport.connect(username=self._username, password=self._password)
            self._transport = transport
    
        #下载
        def download(self, remotepath, localpath):
            if self._sftp is None:
                self._sftp = paramiko.SFTPClient.from_transport(self._transport)
            self._sftp.get(remotepath, localpath)
    
        #上传
        def put(self, localpath, remotepath):
            if self._sftp is None:
                self._sftp = paramiko.SFTPClient.from_transport(self._transport)
            self._sftp.put(localpath, remotepath)
    
        #执行命令
        def exec_command(self, command):
            if self._client is None:
                self._client = paramiko.SSHClient()
                self._client._transport = self._transport
            stdin, stdout, stderr = self._client.exec_command(command)
            data = stdout.read()
            if len(data) > 0:
                print data.strip()   #打印正确结果
                return data
            err = stderr.read()
            if len(err) > 0:
                print err.strip()    #输出错误结果
                return err
    
        def close(self):
            if self._transport:
                self._transport.close()
            if self._client:
                self._client.close()
    

    接下来就简单测试一下exec_command这个命令,比较常用

    if __name__ == "__main__":
        conn = SSHConnection('ip', port, 'username', 'password')
    
        conn.exec_command('ls -ll')
        conn.exec_command('cd /home/test;pwd')  #cd需要特别处理
        conn.exec_command('pwd')
        conn.exec_command('tree /home/test')
    exec_command这个函数如果想cd,可以使用pwd这样可以到当前目录而不是初始目录,但是有些情况下,比如chroot,是做不到的,这个时候就需要新的方法


    上代码

    ssh = paramiko.SSHClient() #创建sshclient
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #目的是接受不在本地Known_host文件下的主机。
        ssh.connect("ip",port,'username','password')
        command='chroot /xxx\n' 
        #conn.write(command)
        chan=ssh.invoke_shell()#新函数
        chan.send(command+'\n')
    #\n是执行命令的意思,没有\n不会执行
     time.sleep(10)#等待执行,这种方式比较慢
    #这个时候就可以在chroot目录下执行命令了
        res=chan.recv(1024)#非必须,接受返回消息
        chan.close()

    注意invoke_shell这个函数即可

    另外使用这个函数命令后面记得加“\n”


    展开全文
  • 首先我们需要把bash理解为一种模式,我们不如把这种模式想象成类似于洋葱一样的结构,我们可以一层一层剥开,也就是说我们可以一...这牵扯到一个父shell子shell的问题。  用户登录到Linux系统后,系统将启动一个
  • 非交互式是参考shamir的方案,可能不是其他论文的非交互式的零知识证明方案,不一定正确。
  • 交互式shell和非交互式shell、登录…

    千次阅读 2014-11-25 18:11:31
    交互式shell和非交互式shell、登录shell和非登录shell的区别。 首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录。 交互式shell和非交互式shell 交互式模式就是shell等待你的输入,并且...
  • 创建桌面交互式服务与非交互式服务的区别 顾名思义,交互式服务可以与界面进行交互,比如弹出对话框,日志窗口输出等。交互服务不允许访问网络共享资源,比如网络影射路径等。 如果需要访问网络共享资源,则需要...
  • linux交互式非交互式修改密码

    千次阅读 2017-03-30 10:03:55
    最近管理的一批机器,有个需求是要统一修改一个帐号的用户名密码,比如将qa帐号的密码改为1234,后来还为了脚本化,很方便的执行,还使用了非交互式地修改用户的密码。简单记录一下吧。 1. 交互式配置本地用户的密码...
  • 按照bash是否与用户进行交互,可以将其分为“交互式”与“非交互式”;而按照bash是否被用户登陆,又可将其分为“登陆shell”与“登陆shell”。本文以CentOS系统为例,着重讨论总结了shell的“交互”与“登陆”...
  • 最近管理的一批机器,有个需求是要统一修改一个帐号的用户名密码,比如将qa帐号的密码改为1234,后来还为了脚本化,很方便的执行,还使用了非交互式地修改用户的密码。简单记录一下吧。 交互式配置本地用户的密码:...
  • fdisk非交互式分区方法

    千次阅读 2017-11-24 17:26:05
    那么有时候我们可能需要在程序里调用,这时候有没有非交互式方法呢? 答案是有的,下面我介绍下。 新建一个文件,比如autopart.txt 里面输入如下: n p 1 w q 中间两个空白的是回车符 对应的是分区的起始...
  • 在这里,需要总结一下/etc/profile与/etc/bashrc的区别,以及交互式非交互式、login与non-login shell概念的区别。 熟悉Linux的程序员应该有过在~/.profile文件中设置环境变量的经验,在~/.profile设置的...
  • Python运行.py文件和交互式运行代码的区别 1. 交互式运行代码会直接给出表达式的结果,运行代码文件必须print才能在控制台看到结果。 交互式中可以用下划线 `_` 来查看上一次输出的结果。如果给下划线赋值,这个效果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 627,768
精华内容 251,107
关键字:

交互式和非交互式区别