bash其他命令及变量介绍和用户、用户组的各类命令

12、bash变量算法

 变量:一段有名称的连续的内存空间;这段内存空间的名称,成为变量名;在这段内存空间中存储的数据,则称为变量值;shell

 数据:文件,存在值;windows

 向内存空间(变量)中存储数据的过程,称为赋值操做;赋值符号一般为=”;数组

 

 变量的类型:安全

  123 --整型:01111011bash

      --字符型:ASCII3字节服务器

      --字符型:UTF-89字节网络

变量:dom

   强变量:使用以前必须事先予以声明;必须声明变量类型;ssh

   弱变量:在使用以前无需声明、也无需指明变量类型;(bash变量)

 变量的赋值方法:

  VARNAME=VALUE

  其含义:将某数值(VALUE)经过赋值操做存储于特定的内存空间中(VARNAME

  bash变量名称的命名规范:

   1.变量名只能以“_”或“字母”为起始字符,后面其余字符能够是任意字母,数字或下划线:

    ABC   A_B

   2.变量名中的字母是大小写敏感的;

   3.命名的书写格式:

全大写:HISTSIZE

全小写:myvar

驼峰式:MyNewVariable

   4.变量名要能见名知意;

   5.变量名不能与已知变量或bash的内置变量重复;

 bash中的变量分类:

  根据变量的做用范围来划分:

  全局变量(环境变量):做用范围为整个shell进程包括其子shell

  本地变量:做用范围为当前登陆时所打开的shell进程,不包括其子shell

  局部变量:做用范围仅仅只是当前程序段,通常用于函数;

  根据变量的声明方式来划分:

  bash内置变量:

   普通的内置变量:HISTSIZE,……

   位置参数变量:$0,$1,$2,$3……

   特殊变量:$?,$#,$*,$@,$$,……

$?:展开为最后一次执行的命令的状态返回值(退出状态码):用以表示最后一次执行的命令是否成功执行;

$#:不包括$0在内的其他位置参数的个数,以十进制数字表示;

$*:从$1开始展开为位置参数当使用双引号引用展开的结果时,他展开为特殊变量IFS的第一个字符分隔值;

$@:从$1开始展开为位置参数,当使用双引号引用展开的结果时,他展开为一个单独的字符串;

$$:展开为当前shell的进程标识符

 

  自定义变量:

 变量的使用:

  1.变量的声明和赋值:

1)声明全局变量(环境变量):

  export VARNAME

  export VARNAME=VALUE

  

  declare命令:

   declare -Set variable values and attributes

  格式:declare [-aAfFgilrtux] [-p] [name[=value] ...]

   经常使用选项:

    -a:声明索引数组(若是支持)

    -A:声明关联数组(若是支持)

    -i:声明整型变量

    -l:声明变量并将变量值中的字母转换为小写字母

    -u:声明变量并将变量值中的字母转换为大写字母

        -r:声明只读变量,该变量只能进行一次赋值操做

        -x:声明变量并将其导出为全局变量;

       declare  -x VARNAME[=VALUE]

    2)声明本地变量:

      VARNAME=VALUE

3)声明局部变量;

  local VARNAME[=VALUE]

   2.查看环境命令

set命令:查看和修改shell属性的值及查看shell变量名和变量值;

set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

    Set or unset values of shell options and positional parameters.

export命令:查看变量名称,也能够为变量赋值

env命令:

3. 查看变量的值:

     echo ${VARNAME}

    4.撤销变量的赋值及变量声明:

      unset VARNAME

 有关于保存变量的shell配置文件:

  通用配置文件:

   /etc/bashrc

   /etc/profile

   /etc/profile.d/*

 私人配置文件:

   ~/.bashrc

   ~/.bash_profile

注意:

1. 通常状况下,变量都是随用随声明,除非有必要不然不建议修改配置文件的内容;

2. 声明变量在使用完之后,最好使用unset命令予以撤销;

用户和组管理:

 用户帐户

 组帐户

 权限分配

没有一个完整的认证机制资源将会形成一种混乱的局面尤为是在服务器上他并非给某我的或某个团体网给多个部门和团体使用,为了保证资源的安全利用最开始由Cisco开发并创建了AAA认证体系:

 Authentication:认证并核实使用者身份;

 Authotization :受权,对已经核实身份的使用者进行资源分配;

 Acciunting:审计,监管资源被使用的状况;

 

多任务,多用户操做系统;(windows中并不能够多用户操做)

可以实现资源使用和完成任务的主体是:应用程序进程;

安全上下文:Secure Context(对进程和文件都是有的)

  进程是以发起者的身份运行的;能够理解为,进程的全部者就是发起者;每一个进程上都会标记上其全部者的身份信息;

  当继承试图访问资源的时候,安全上下文会比对进程的全部者和资源的全部者之间的关系;

  首先,查看进程的全部者是否和资源的全部者为同一用户,若是是,就按照全部者所拥有的权限来使用资源;若是不是,则判断进程的全部者是否属于该资源所属组的成员;若是是,按照所属组的权限来使用资源;

若是不是,就按照最为普通的其余用户的权限来使用资源;(最关键的两个问题全部者和所属组)

用户帐户:实现操做者和计算机交互式操做的基础,是操做者的身份在知足了验证条件以后的计算机系统中的映射;

用户帐户分类(Linux中用户帐户有不少):

 超级用户(管理员):root/   

 普通用户:

   系统用户(非登陆用户)

     为了保证系统安全,每每会让某些进程或服务必须以非管理员的用户身份运行;(网络会话劫持:劫持系统中正在进行的一个进程)这类非管理员用户,称为系统用户:此类用户通常不容许登录到系统,防止被网络会话劫持后系统遭到破环。

   登陆用户

      能经过登录行为验证用户身份进而得到资源访问权限并能够对资源进行操做的用户,能够称为登陆用户;   

用户帐户的表示方式:

 用户登录名称:

   位操做者提供简单易记的字符串表示

 用户的数子IDUID):

   为计算机操做系统提供的标准数字标识符号,0~2^32-1

超级用户:

  用户名:root

  UID0

普通用户:

  系统用户:

   Centos 6及之前的版本:系统的UID1~499

   Centos 7及之后的版本:系统的UID1~999

  登陆用户:

   Centos 6及之前的版本:500+

   Centos 7及之后的版本:1000+

   注意:60000+UID一般须要用户自定义标识;

名称解析:

  用户名<- ->UID

  用户名解析库:/etc/passwd

   操做系统中的认证组件经过解析库实现认证机制,即认证登陆用户是否为已经存在的用户;

  用户的认证库:/etc/shadow

   经过此前的解析库认定用户是存在的,在通过认证库的认证,来证实登陆用户就是其声明的用户;

  默认的认证机制:密码认证;

  密码发杂性要求:

   1.尽可能避免使用有规律的或者来源于字典中的字符串做为密码;

   2.密码要足够长,通常不得少于6个字符;

   3.密码要足够复杂,其中应该至少包括大写字母小写字母数字及其余符号中的三类;

   4.密码要不按期更换。

Linux中保存到认证库的密码是通过单向加密算法处理过的;

 可以加密密码的算法有两类:

  MD

   MD5Message Digest Version 5,消息摘要算法第五版;

   128位定长输出;(如今已经不多会用到)

  SHASecure Hash Algorithm,安全的哈希算法;

     sha1:160加密输出

     sha224

     sha256

     sha384

     sha512Linux中默认的加密算法;

     salt:经过随机算法计算获得的随机数;

     随机数的生成装置:

      /dev/random

       仅仅是从熵池中返回随机数;若是熵池中随机数耗尽,进程会被阻塞;

      /dev/urandom

       首先试图从熵池中返回随机数,若是熵池中随机数耗尽,则利用伪随机数生成器生成伪随机数;

    在认证库中的密码的最终形态:算法+salt+加密字符串;

      算法:$1~$6

      salt$随机字符串

      加密字符串:$单向加密的结果

组帐户:将具备某些相同或类似属性的用户联系在一块儿以即可以集中受权的容器;

组的分类:

  超级用户组

  普通用户组

系统用户组

登陆用户组

组帐户的标识方法:

  组帐户名称:

  组帐户IDGID):

超级用户组:0

系统用户组:

  Centos6 -500+

      Centos7+1000+

组名解析:

  解析库:/etc/group

  认证库:/etc/gshadow

  组也须要使用密码加密保护;

用户帐户和组帐户之间的关系:

 Linux中,每一个用户必须字少属于一个组;

 用户帐户的GID标识被称为用户的主要组(基本组)Primary Group;每一个用户必需要有主要组,并且只能有一个;

在主要组的基础之上,用户能够与其余的组帐户存在逻辑关系,此类组称为用户的附加组(附属组,额外组),Addtion Group;对于用户来讲,此类组能够没有,也能够有多个;

用户和组的管理命令:

  组帐户的管理命令:

   groupadd groupdel groupmod

  用户帐户的管理命令:

   useradduserdelusermod

  认证相关的命令:

   passwdgpasswd

  其余的相关命令:

   chagechshfingersuid

与用户和组相关的命令:

 1.groupadd

   groupadd - 建立一个新组

   格式:groupadd [选项] group

   经常使用选项:

-g GID:指定要建立的组的GID

-r:将组建立为系统组,此时应该保证GID在系统组范围内;

2. Groupdel

  groupdel - 删除一个组

  格式:groupdel [选项] GROUP

  注意:若是某个组是某个用户的主要组,则改组不能删除;

3. Groupmod

  groupmod - modify a group definition on the system

  格式:groupmod [选项] GROUP

  经常使用选项:

   -g GID:修改指定组的GID

   -n GROUP_NAME:修改指定组的组帐户名称;

  例如:[root@localhost ~]# groupadd group1

[root@localhost ~]# tail /etc/group

postfix:x:89:

sshd:x:74:

slocate:x:21:

avahi:x:70:

stapusr:x:156:

stapsys:x:157:

stapdev:x:158:

tcpdump:x:72:

die:x:1000:die

group1:x:1001:

[root@localhost ~]# groupmod -g 6000 -n grp1 group1

[root@localhost ~]# tail /etc/group

postfix:x:89:

sshd:x:74:

slocate:x:21:

avahi:x:70:

stapusr:x:156:

stapsys:x:157:

stapdev:x:158:

tcpdump:x:72:

die:x:1000:die

grp1:x:6000:

 4.useradd

  useradd - 建立一个新用户或更新默认新用户信息

  格式: useradd [选项] username

         useradd -D[选项]

  经常使用选项:

-c, --commentCOMMENT:为用户添加注释信息

-d, --homeHOME_DIR:为用户指定家目录的路径;此目录不能事先存在

        -e, --expiredateEXPIRE_DATE:用户帐户将被禁用的日期 ;如:2017/10/11

        -f, --inactiveINACTIVE:为用户指定密码使用达到最大时间以后的宽限期

        -g, --gidGROUP:为用户指明GID;若是不写此选项,系统将建立一个与用户相同的组

        -G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:为用户添加附加组

-m, --create-home :必须为用户建立家目录

-M  :不为用户建立家目录;在建立系统用户时经常使用

-r--system:建立系统用户;

-s, --shellSHELL:为用户指定默认的shell

-u, --uidUID:为用户指定UID

 5.userdel

  userdel - 删除用户帐户和相关文件

  格式:userdel [选项] username

  经常使用选项:

   -r, --remove:删除用户的同时删除用户的家目录及用户邮箱文件;

 6.usermod

  usermod -修改一个用户帐户

  格式;usermod[选项]username

  经常使用选项:能够在shellman一下基本上和useradd同样

   -c, --commentCOMMENT:修改注释信息

   -d, --homeHOME_DIR:修改用户的家目录

   -e, --expiredateEXPIRE_DATE:修改用户密码过时的绝对日期

   -f, --inactiveINACTIVE:修改用户密码过时以后的宽限期;

   -g, --gidGROUP:为用户指明GID;       

 -G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:修改用户的附加组位此列表中的组,若是同时使用了-a选项,则保留了原有的附加组,将此列表中的组追加到用户的附加组列表;

   -l, --loginNEW_LOGIN:修改用户的登陆名

 -s, --shellSHELL:为用户指定默认的shell

-u, --uidUID:为用户指定UID

-L, --lock:锁定用户

-U, --unlock:解锁被usermod -L锁定的用户;

  7.passwd

passwd - update user's authentication tokens

格式:passwd  [-k]  [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]

   经常使用选项:

-l, --lock:锁定用户

-u--unlock:解锁用户

--stdin:经过标准输入接受密码,能够用于管道;

例如:[root@localhost ~]# echo 123 | passwd --stdin user1

更改用户 user1 的密码 。

passwd:全部的身份验证令牌已经成功更新。

-d, --delete:删除用户密码,也能够用于解除用户锁定

  [root@localhost ~]# tail -1 /etc/shadow

user2:!!:17471:0:99999:7:::

    其中的叹号证实用户已被锁定,能够经过解锁的方式登陆用户也能够在root用户下用vi去删除!来实现对用户的解锁

    -n, --minimum DAYS:用户密码的最短使用时长;默认值位0

    -x, --maximum DAYS:用户密码的最长使用时长;默认值位99999

    -w, --warning DAYS:用户密码过时以前多少天开始发送警告信息;

    -i, --inactive DAYS:用户密码过时以后的宽限期;

    -S, --status”:查看用户密码的状态信息    

  8.chage

     chage - 更改用户密码过时信息

     格式:chage [选项] username

      经常使用选项:

       -d, --lastdayLAST_DAY

       -E, --expiredateEXPIRE_DATE

       -I, --inactiveINACTIVE

-l, --list 现实帐户年龄信息

 -m, --mindaysMIN_DAYS

-M, --maxdaysMAX_DAYS

-W, --warndaysWARN_DAYS

  9.chsh

chsh - change your login shell

格式:chsh [-s shell] [-l] [-u] [-v] [username]

  10.finger

finger user information lookup program

格式:finger [-lmsp] [user ...] [user@host ...]

 

11.id

 id - print real and effective user and group IDs

格式:id [OPTION]... [USER]

经常使用选项:

-u:显示用户的有效UID

-g:显示用户的有效GID

-n:显示名称;

 12.su

su - run a command with substitute user and group ID

格式:su [options...] [-] [user [args...]]

经常使用选项:

-, -l, --login:之后面的用户身份登陆到系统;

-c "COMMAND":之前面指定的用户身份运行COMMAND;不进行身份登陆切换;

相关文章
相关标签/搜索