当我们在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. Android(java)学习笔记93:Android布局详解之一:FrameLayout

    FrameLayout是最简单的布局了.所有放在布局里的控件,都按照层次堆叠在屏幕的左上角.后加进来的控件覆盖前面的控件. 在FrameLayout布局里,定义任何空间的位置相关的属性都毫无意义.控件 ...

  2. centos7重置root开机登录密码

    今天忘记了centos7 root登录的密码,本来要好好的做个图文的教程也好啊,但是忘记截图什么的,就不在重复的工作了, 参考了下面的两个链接重置了密码,结合使用效果更好哦,嘿嘿.. 下次要是再遇到这 ...

  3. LeetCode 152

    Maximum Product Subarray Find the contiguous subarray within an array (containing at least one numbe ...

  4. [改善Java代码]集合中的元素必须做到compareTo和equals同步

    实现了Comparable接口的元素就可以排序,

  5. 关于Eclipse插件之IWorkbench IWorkbenchWindow IWorkbenchPage |WorkbenchPart......等的总结

    1..IWorkbench: workbench是eclipse用户界面中最底层的对象,它建立在Display之上,包含一个或多个IWorkbenchWindow,用于向终端用户呈现信息 当你的wor ...

  6. merge into update

    如果要DML实现真正意义上的并发,在开始执行需要并发语句前,需要执行开启session并发  ALTER SESSION ENABLE PARALLEL DML;  在执行完语句后,需要执行关闭ses ...

  7. css cursor url用法格式详解

    css cursor url用法格式:css:{cursor:url('图标路径'),auto;} //IE,FF,chrome浏览器都可以 实例代码:html{cursor: url("h ...

  8. HTML5와 CSS3 적용기

    HTML5의 DTD 선언 <!DOCTYPE html>  HTML5의 인코딩 선언 <meta charset="utf-8">  그리고나서는 새로 ...

  9. boost.ASIO-可能是下一代C++标准的网络库

    曾几何时,Boost中有一个Socket库,但后来没有了下文,C++社区一直在翘首盼望一个标准网络库的出现,网络上开源的网络库也有不少,例如Apache Portable Runtime就是比较著名的 ...

  10. usp_Copy_Unzip_DirFiles -- 拷贝,解压,列出文件名 from FTP Folder to Work Folder

    CREATE PROC usp_Copy_Unzip_DirFiles @FTPPath NVARCHAR(4000)= '', -- ftp 文件夹路径 @WorkPath NVARCHAR(400 ...