精华内容
下载资源
问答
  • 主要介绍了Linux下交互式与非交互式修改用户密码的例子,本文重点在是讲解了一个交互式修改用户密码的脚本,需要的朋友可以参考下
  • linux交互式与非交互式修改密码

    千次阅读 2017-03-30 10:03:55
    最近管理的一批机器,有个需求是要统一修改一个帐号的用户名密码,比如将qa帐号的密码改为1234,后来还为了脚本化,很方便的执行,还使用了非交互式地修改用户的密码。简单记录一下吧。 1. 交互式配置本地用户的密码...

    最近管理的一批机器,有个需求是要统一修改一个帐号的用户名密码,比如将qa帐号的密码改为1234,后来还为了脚本化,很方便的执行,还使用了非交互式地修改用户的密码。简单记录一下吧。

    1. 交互式配置本地用户的密码:passwd 命令

    代码如下:

    [root@host_221-81 ~]# passwd qa
    Changing password for user qa.
    New password:
    BAD PASSWORD: it is too short
    BAD PASSWORD: is too simple
    Retype new password:
    passwd: all authentication tokens updated successfully.

    2. 非交互式修改本地用户的密码:chpasswd

    代码如下:

    chpasswd命令使用起来很简洁

    [root@host_221-81 ~]# echo “qa:1234” | chpasswd
     

    使用passwd命令,也可以实现非交互式修改密码

    [root@host_221-81 ~]# echo “1234” | passwd –stdin “qa”
    Changing password for user qa.
    passwd: all authentication tokens updated successfully.

    展开全文
  • 最近管理的一批机器,有个需求是要统一修改一个帐号的用户名密码,比如将qa帐号的密码改为1234,后来还为了脚本化,很方便的执行,还使用了非交互式地修改用户的密码。简单记录一下吧。 交互式配置本地用户的密码:...

    最近管理的一批机器,有个需求是要统一修改一个帐号的用户名密码,比如将qa帐号的密码改为1234,后来还为了脚本化,很方便的执行,还使用了非交互式地修改用户的密码。简单记录一下吧。

    1. 交互式配置本地用户的密码:passwd 命令
    [root@host_221-81 ~]# passwd qa
    Changing password for user qa.
    New password: 
    BAD PASSWORD: it is too short
    BAD PASSWORD: is too simple
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    1. 非交互式修改本地用户的密码:chpasswd
    # chpasswd命令使用起来很简洁
    [root@host_221-81 ~]# echo "qa:1234" | chpasswd
    
    # 使用passwd命令,也可以实现非交互式修改密码
    [root@host_221-81 ~]# echo "1234" | passwd --stdin "qa"
    Changing password for user qa.
    passwd: all authentication tokens updated successfully.
    1. 使用expect来处理交互式输入,从而实现非交互式的密码修改。
    #!/bin/sh
    # \
    exec expect -f "$0" "$@"
    if { $argc != 2 } {
        puts "Usage: $argv0 <username> <passwd>"
        exit 1
    }
    set password [lindex $argv 1]
    spawn passwd [lindex $argv 0]
    sleep 1
    expect "assword:"
    send "$password\r"
    expect "assword:"
    send "$password\r"
    expect eof

    注意:脚本的第二行,这种写法可能比较陌生,这是在TCL语言中的语法,The backslash is recognized as part of a comment to sh, but in Tcl the backslash
    continues the comment into the next line which keeps the exec command from executing again.

    该脚本的执行结果为:

    [root@smilejay ~]# ./change-pwd-expect.sh qa 1234
    spawn passwd qa
    Changing password for user qa.
    New password: 
    BAD PASSWORD: it is too short
    BAD PASSWORD: is too simple
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    展开全文
  • 在这里,需要总结一下/etc/profile与/etc/bashrc的区别,以及交互式与非交互式、login与non-login shell概念的区别。 熟悉Linux的程序员应该有过在~/.profile文件中设置环境变量的经验,在~/.profile设置的...
    线上的memcached又挂了,仍然没有得到core文件。排查原因,同事发现启动memcached的脚本存在可疑问题。
    问题一:没有设置memcached工作目录,有可能core dump时没有工作目录写权限
    这些脚本由crontab启动。脚本中没有设置工作目录,而这是非root用户的crontab。启动memcached时,工作目录不是memcached可执行文件所在目录。实验证明,这个是用户的home目录,crontab运行的脚本中打印pwd,结果是"home/work",work是当前用户。
    问题二:在/etc/profile中设置的ulimit -c unlimited对crontab的脚本是无效的
    在查阅相关资料后得知,/etc/profile中的设置只对Login Shell生效,而crontab运行脚本的shell环境是non-login的,不会加载/etc/profile的设置。

    在这里,需要总结一下/etc/profile与/etc/bashrc的区别,以及交互式与非交互式、login与non-login shell概念的区别。

    熟悉Linux的程序员应该有过在~/.profile文件中设置环境变量的经验,在~/.profile设置的环境变量只会对那一个用户有效,而如果要对全部的用户有效,则要设置/etc/profile。/etc/profile就是~/.profile的全局版本。事实上,一旦打开一个交互式login shell,或者以--login选项登录的非交互式shell,都会首先加载并执行/etc/profile中的命令,然后再依次加载~/.bash_profile, ~/.bash_login, 和~/.profile中的命令。

    这里又涉及到交互式shell与非交互式shell,login shell与non-login shell的概念。按照这两个维度划分,那么共有四种shell:交互式login shell,交互式非login shell,非交互式login shell,非交互式非login shell。

    交互式的:顾名思义,这种shell中的命令时由用户从键盘交互式地输入的,运行的结果也能够输出到终端显示给用户看。

    非交互式的:这种shell可能由某些自动化过程启动,不能直接从请求用户的输入,也不能直接输出结果给终端用户看。输出最好写到文件。

    login的意思是这种是在某用户由/bin/login登陆进系统后启动的shell,跟这个用户绑定。这个shell是用户登陆后启动的第一个进程。login进程在启动shell时传递第0个参数指明shell的名字,该参数第一个字符为"-",指明这是一个login shell。比如对bash而言,启动参数为"-bash"。当bash以login shell启动时,它会执行/etc/profile中的命令,然后/etc/profile调用/etc/profile.d目录下的所有脚本;然后执行~/.bash_profile,~/.bash_profile调用~/.bashrc,最后~/.bashrc又调用/etc/bashrc。
    要识别一个shell是否为login shell,只需在该shell下执行echo $0:
    # echo $0
    如果输出为该shell名字,加上一个'-'前缀,则说明该shell为login shell。 例如-bash,-su等等。实验一下,在本人的Ubuntu系统下,打开Terminal,输入echo $0,得到的是"bash",说明这不是一个login shell。而由SSH登陆到服务器上,执行同样命令,得到了"-bash"的结果,说明由SSH登陆的为login shell。

    非login的:不需login而由某些程序启动的shell。传递给shell的参数,是没有'-'前缀的。还以Bash为例,当以非login方式启动时,它会调用~/.bashrc,随后~/.bashrc中调用/etc/bashrc,最后/etc/bashrc调用所有/etc/profile.d目录下的脚本。这个有兴趣的可以打开这些文件看一看。非login的shell主要包括以"#su","#su USERNAME"启动的shell,和图形终端(例如Ubuntu的Terminal),执行的脚本等等。识别非login的shell方法还是执行#echo $0命令,得到的结果如果没有'-'前缀,即为非login的。

    回到我们遇到的问题,在crontab中启动的脚本的shell都是非login的。那么就不会加载/etc/profile中的命令,从而我们在/etc/profile中设置的"ulimit -c unlimited"命令对crontab中启动的脚本也是无效的了,因此这些脚本中启动的memcached意外挂掉后也不会有core文件了。
    展开全文
  • 下面小编就为大家带来一篇浅析mysql交互式连接&非交互式连接。小编觉挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Linux内核交互式非交互式进程判别算法的质疑.pdf
  • 按照bash是否用户进行交互,可以将其分为“交互式非交互式”;而按照bash是否被用户登陆,又可将其分为“登陆shell”登陆shell”。本文以CentOS系统为例,着重讨论和总结了shell的“交互”“登陆”...

    运行中bash具有的两种属性

    Linux shell是用户与Linux系统进行交互的媒介,而bash作为目前Linux系统中最常用的shell,它在运行时具有两种属性,即“交互”与“登陆”。

    按照bash是否与用户进行交互,可以将其分为“交互式”与“非交互式”;而按照bash是否被用户登陆,又可将其分为“登陆shell”与“非登陆shell”。

    “交互式”与“非交互式”

    含义说明

    交互式,是shell的一种运行模式,交互式shell等待你输入命令,并且立即执行,然后将结果反馈给你。这是每个CLI用户都非常熟悉的流程:登录、执行一些命令、登出。当你登出后,这个shell就终止了。

    而非交互式,是shell的另一种运行模式,它专门被用来执行预先设定的命令。在这种模式下,shell不与用户进行交互,而是读取存放在脚本文件中的命令并执行它们。当它读到文件的结尾,这个shell就终止了。

    启动方法

    根据bash手册上的描述:

    An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option.

    从上面的描述看,只要执行bash命令的时候,不带有“选项以外的参数”或者-c选项,就会启动一个交互式shell。要理解这句话,就要弄懂“选项以外的参数”是什么意思,其实它指的就是shell的脚本文件;而-c选项将指定字符串作为命令读入bash,也就相当于执行指定的命令,它和前者有些类似,只是不从脚本文件中读取罢了。请看例子:

    [chen@localhost Temp]$ echo "uname -r; date" > script.sh
    [chen@localhost Temp]$ bash ./script.sh 
    3.10.0-514.el7.x86_64
    Tue Apr 18 14:43:50 CST 2017
    [chen@localhost Temp]$ 
    [chen@localhost Temp]$ bash -c "uname -r; date"
    3.10.0-514.el7.x86_64
    Tue Apr 18 14:44:49 CST 2017
    [chen@localhost Temp]$ 

    通常来说,用于执行脚本的shell都是“非交互式”的,但我们也有办法把它启动为“交互式”shell,方法就是在执行bash命令时,添加-i选项:

    [chen@localhost Temp]$ bash -c "echo \$-"
    hBc
    [chen@localhost Temp]$ bash -i -c "echo \$-"
    himBHc

    我们看到,添加了-i选项的bash -c命令为我们启动了一个“交互式”shell。

    判别方法

    根据bash手册上的描述:

    PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.

    用于在shell脚本和startup文件中判断当前shell“交互”属性的方法,就是判断变量PS1是否有值,或者判断变量$-是否包含i,请看例子:

    [chen@localhost Temp]$ cat ./test1.sh 
    echo "\$0   : $0"
    echo "\$-   : $-"
    echo "\$PS1 : $PS1"
    [chen@localhost Temp]$ bash ./test1.sh     # 非交互式shell
    $0   : ./test1.sh
    $-   : hB
    $PS1 : 
    [chen@localhost Temp]$ bash -i ./test1.sh  # 交互式shell
    $0   : ./test1.sh
    $-   : himB
    $PS1 : [\u@\h \W]\$ 
    [chen@localhost Temp]$ 

    “登陆shell”与“非登陆shell”

    含义说明

    “登陆shell”通常指的是:
    1. 用户通过输入用户名/密码(或证书认证)后启动的shell;
    2. 通过带有-l|--login参数的bash命令启动的shell。
    例如,系统启动、远程登录、使用su -切换用户、通过bash --login命令启动bash等。

    而其他情况启动的shell基本上就都是“非登陆shell”了。
    例如,从图形界面启动终端、使用su切换用户、通过bash命令启动bash等。

    判别方法

    根据bash手册上的描述:

    A login shell is one whose first character of argument zero is a -, or one started with the --login option.

    我们可以通过在shell中echo $0查看,显示-bash的一定是“登陆shell”,反之显示bash的则不好说。

    [chen@localhost ~]$ bash --login
    [chen@localhost ~]$ echo $0
    bash
    [chen@localhost ~]$ 

    可以看出,使用bash --login启动的“登陆shell”,其$0也并非以-开头,这也就是为什么手册上的描述里使用“or”的原因。

    另外,当我们执行exit命令退出shell时,也可以观察到它们的不同之处:

    [chen@localhost ~]$ bash --login
    [chen@localhost ~]$ exit   # 退出登陆shell
    logout
    [chen@localhost ~]$ bash
    [chen@localhost ~]$ exit   # 退出非登陆shell
    exit
    [chen@localhost ~]$ 

    原则上讲,我们使用logout退出“登陆shell”,使用exit退出“非登录shell”。但其实exit命令会判断当前shell的“登陆”属性,并分别调用logoutexit指令,因此使用起来相对方便。

    主要区别

    对于用户而言,“登录shell”和“非登陆shell”的主要区别在于启动shell时所执行的startup文件不同

    简单来说,“登录shell”执行的startup文件为~/.bash_profile,而“非登陆shell”执行的startup文件为~/.bashrc

    关于bash的startup文件,请参阅我的另一篇博客:
    关于“.bash_profile”和“.bashrc”区别的总结

    展开全文
  • 描述了一些关于交互式shell和非交互式shell的区别,属于概念性的东西。
  • python之SSH(交互式非交互式

    万次阅读 2017-09-04 19:13:03
    python中有一个paramiko,功能强大,用来做SSH比较方便 ... res=chan.recv(1024)#必须,接受返回消息 chan.close() 注意invoke_shell这个函数即可 另外使用这个函数命令后面记得加“\n”
  • 摘要:在进行环境变量设置和命令别名的设置的时候,常常会接触到四个概念:交互式bash、非交互式bash、login bash和no login bash。...1.交互式bash与非交互式bash 交互式模式就是在终端上执行,shell等待
  • 曾经写过“交互式shell和非交互式shell、登录shell和登录shell的区别”,但那时理解相对更浅一些,现在多了一点认识,把这篇文章稍微完善一下吧。 交互式shell和非交互式shell、登录shell和登录shell的区别。...
  • 创建桌面交互式服务与非交互式服务的区别 顾名思义,交互式服务可以与界面进行交互,比如弹出对话框,日志窗口输出等。交互服务不允许访问网络共享资源,比如网络影射路径等。 如果需要访问网络共享资源,则需要...
  • 非交互式是参考shamir的方案,可能不是其他论文的非交互式的零知识证明方案,不一定正确。
  • 交互式非交互式的shells和脚本 交互式的shell在 tty终端从用户的输入中读取命令. 另一方面, shell能在启动时读取启动文件,显示一个提示符并默认激活作业控制. 用户能交互地使用shell.运行脚本的shell一般都是非...
  • 交互式shell和非交互式shell、登录…

    千次阅读 2014-11-25 18:11:31
    交互式shell和非交互式shell、登录shell和登录shell的区别。 首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录。 交互式shell和非交互式shell 交互式模式就是shell等待你的输入,并且...
  • mysql交互式连接&非交互式连接

    千次阅读 2015-12-01 10:05:23
    非交互式操作:就是你在你的项目中进行程序调用。比如一边是tomcat web服务器,一边是数据库服务器,两者怎么通信?在java web里,我们通常会选择hibernate或者是jdbc来连接。那么这时候就是非交互式操作。 在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 622,138
精华内容 248,855
关键字:

交互式与非交互式