当我们在linux平台上开发一些项目时,或者有一些项目是需要部署到linux系统上时,有时候会涉及到linux上的特定的账户,例如有一些项目需要运行在某些特定的账户下,或者有时候需要在全新的环境上搭建一些环境(例如:LAMP)linux+apache+mysql+php 时都可能会涉及到需要添加一些账户信息。如果此时用脚本来维护这些account,就会简化一些不必要的操作,大家应该都知道在linux如果手动添加用户都会涉及到一个交互的操作,无论你是用useradd命名或者直接操作/etc/passwd 或 /etc/shadow 文件。那么这里就以用脚本创建FTP账户为例。

1.首先需要检查你创建的账户是否已经存在该系统上,常见的办法是通过解析/etc/passwd文件确定。当然在linux上如果想实现此操作的方式有很多种,这里就以常见命令组合来完成。借助linux上的cat、awk、grep 来实现此步骤,关于这些命令可以查l命令本身帮助文档 用  “命令 --help” 或者是通过 man 的方式 。代码如下(以创建demo_ftp账户为例):

/bin/cat /etc/passwd | /bin/awk -F ':' '{print $(1)}' | /bin/grep -E "^$FTP_USER$"

这里FTP_USER是一个变量,里面存储的是demo_ftp, cat命令是读取整个passwd文件,然后通过管道命令传递给awk命令,这里用-F是以“:”分隔那些信息,因为在paswwd文件的对于每一行的存储格式都是多个单元用"":"链接的。简单的理解就相当于php中explode函数和js中的spilt,其中print $(1) 就是打印第一列信息。然后将第一列信息在传递给grep命令,-E代表可以使用正则表达式,这是就以这个账户开始和结束(唯一确定一个账户)。

2.如果在shell中执行此命令,需要用``(键盘上Esc键下面那个字符)这个符号来把那个命名包装起来,该命名就返回该账户的信息(前提是该账户已经存在),否在返回空。在此可以做一个判断决定是否创建该账户。

3.如果该机器上没有账户就需要创建,创建命令如下:

    #create folder if not exist
mkdir -p $FTP_FOLDER;
/bin/chmod -R $FTP_FOLDER;
#create user if not exist
/usr/sbin/useradd -c 'FTP User create by shell' -d $FTP_FOLDER -s /sbin/nologin $FTP_USER >/dev/null >&;
echo $FTP_PASSWORD | /usr/bin/passwd $FTP_USER --stdin >/dev/null >&;

FTP_FLODER代表了该FTP账户默认对外提供访问的folder,可以用mkdir -p 命名来创建它,如果该folder存在,该命令就不会创建。chmod命令就是给该folder授权,一般情况下不需要这步,除非有特殊需求。接下来的2行命令就是创建账户的核心。其中-c代表描述信息,-d代表该账户对外提供的访问空间,-s 代表了禁用该账户通过SSH登录,后面的 2 > &1 重定向标准输出和错误信息到伪设备中。如果对这个不熟悉可以在网上查找。最后一行就是给该用户创建密码。

到此步骤完了,但然你还可以通过这样一个脚本完成许多对该账户的特殊设置。

下面一张截图关于整个过程:

Linux下通过shell脚本创建账户的更多相关文章

  1. Linux下添加shell脚本使得nginx日志每天定时切割压缩

    Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...

  2. 2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出

    有两个文本如下,实际中并不知道两文本各有多少行: 文本1.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ccccccccccccccccccccccccccc ...

  3. linux下的shell脚本的使用

    什么是shell? Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户.这种对话方式可是交互 ...

  4. linux下实现shell脚本自动连接mongodb数据库并创建索引

    在linux下创建shell脚本

  5. windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式

    常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...

  6. linux下利用shell脚本实现添加crontab任务

    本来直接用crontab -e 就可以打开vim,输入要执行的任务保存退出就可以添加任务直接启动运行了.但是今天组长说能不能写个shell不用打开vi就能添加到crontab的. 最先想到的是怎么在s ...

  7. linux下的shell脚本(基本)

    shell有些命令和格式不用老是容易忘,学而时习之,不亦说乎~ 先说明以下内容来自: http://c.biancheng.net/cpp/shell/ ,C语言中文网,请大家支持原作,点击链接查看. ...

  8. Linux 下执行Shell 脚本的方式

    Shell 脚本的执行方式通常有如下三种: (1)bash script-name 或者 sh script-name:(2)path/script-name或者./script-name:(3)so ...

  9. linux下使用shell脚本自动化部署项目

    在Java开发项目时经常要把正在开发的项目发布到测试服务器中去测试,一般的话是要把项目先打成war包,然后把war包发布到服务器中,关闭服务器, 最后重新启动服务器,虽然这过程不是很繁琐,但如果是多个 ...

随机推荐

  1. linux 安装xamp

    前一久用上了ubuntu,想折腾下小窝,懒得自己去装Php啊,apache 之类的东西,刚才用上xampp,直接点,等以后要涉及深再弄,暂时先用着xampp.还不错,很好用,这里简单说下安装,(我是新 ...

  2. 字体的大小(pt)和像素(px)如何转换?

    px:相对长度单位.像素(Pixel). pt:绝对长度单位.点(Point). 1in = 2.54cm = 25.4 mm = 72pt = 6pc 具体换算是: Points Pixels Em ...

  3. .NET自动识别HttpWebResponse的编码及是否压缩

    请求和响应头 POST的数据 最近项目使用HttpWebRequest请求网页,处理HttpWebResponse返回消息体,发现网页可能是有GZIP压缩等,所得数据乱码,所以相处了解决方案,大家共同 ...

  4. 包加载失败 未能正确加载包“xxx”...

    打开vs2008或者2005如果弹出一个警告对话框 包加载失败 未能正确加载包“xxx” ...... 的字样,就可以用以下方法解决. 在cmd下运行带参数的devenv.exe: "d(盘 ...

  5. 实现JavaScript的组成----BOM和DOM

    我们知道,一个完整的JavaScript的实现,需要由三部分组成:ECMAScript(核心),BOM(浏览器对象模型),DOM(文档对象模型). 今天主要学习BOM和DOM. BOM: BOM提供了 ...

  6. JavaScript开发之路02(Sencha Touch使用时常见问题及解决办法)

    1.Sencha中使用组件后通过layout: 'vbox'指定页面布局为垂直盒布局并且组件的高度采用height: '百分比'指定时,组件的背景色通过style: 'background:#F6F6 ...

  7. MeasureSpec介绍

    在自定义View和ViewGroup的时候,我们经常会遇到int型的MeasureSpec来表示一个组件的大小,这个变量里面不仅有组件的尺寸大小,还有大小的模式. 这个大小的模式,有点难以理解.在系统 ...

  8. Objective-C ,ios,iphone开发基础:NSDictionary(字典) 和 NSMutableDictionary

    NSDictionary(字典),NSDictionary类似于 .net中的parameter,l类似于java中的map. 通过唯一的key找到对应的值,一个key只能对应一个只,而多个key可以 ...

  9. Redis中的关系查询(范围查询,模糊查询等...)

    本文部分转自于:http://blog.csdn.net/dc_726/article/details/42784317 本文对Redis如何保存关系型数据,以及如何对其匹配.范围.模糊查询进行举例讲 ...

  10. hdu 4628 动态规划

    思路:首先就是状态压缩,然后判断哪些状态是回文串.最后就是动态方程:dp[i]=min(dp[i],dp[j]+1).这个方程得前提条件是状态(j-i)为回文串. #include<iostre ...