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

十二、bash变量

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

数据:文件,存在值;

向内存空间(变量)中存储数据的过程,称为赋值操作;赋值符号通常为=”;

变量的类型:

123 --整型:01111011

--字符型:ASCII3字节

--字符型:UTF-89字节

变量:

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

弱变量:在使用之前无需声明、也无需指明变量类型;(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,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;不进行身份登录切换;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2280端口映射到公网,发现经常被暴力破解,自己写了个临时封禁ip功能的脚本,实现5分钟内同一个ip登录密码错误10次就封禁这个ip5分钟,并且进行邮件通知使用步骤openwrt为19.07.03版本,其他版本没有测试过安装bashmsmtpopkg
#!/bin/bashcommand1&command2&wait从Shell脚本并行运行多个程序–杨河老李(kviccn.github.io)
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/phpls-ls 2.编辑修改.bash_profile文件(没有.bash_profile文件的情况下回自动创建)sudovim~/.bash_profile在文件的最后输入以下信息,然后保存退出exportPATH="/Applications/MAMP/bin/php/php7.2.20/b
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如zh_CN之类的语言包,进行中文语言包装:apt-getinstalllanguage-pack-zh-hans3、安装好后我们可以进行临时修改:然后添加中文支持: locale-genzh_CN.UTF-8临时修改> export LC_ALL='zh_CN.utf8'> locale永久
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexadecimalbash2#[0~1]0[0~7]0x[0~f]or0X[0~f]perl0b[0~1]0[0~7]0x[0~f]tcl0b[0~1]0o[0~7]0x[0~f]bashdifferentbaserepresntationreference2.StringlengthLanguageStr
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全命令补全方法:yum-yinstallbash-completionsource/usr/share/bash-completion/bash_completionsource<(kubectlcompletionbash)echo"source<(kubectlcompletionbash)">>~/.bashrc 
参考这里启动jar包shell脚本修改过来的#!/bin/bash#默认应用名称defaultAppName='./gadmin'appName=''if[[$1&&$1!=0]]thenappName=$1elseappName=$defaultAppNamefiecho">>>>>>本次重启的应用:$appName<
#一个数字的行#!/bin/bashwhilereadlinedon=`echo$line|sed's/[^0-9]//g'|wc-L`if[$n-eq1]thenecho$linefidone<1.txt#日志切割归档#!/bin/bashcd/data/logslog=1.logmv_log(){[-f$1]&&mv$1$2
#文件增加内容#!/bin/bashn=0cat1.txt|whilereadlinedon=[$n+1]if[$n-eq5]thenecho$lineecho-e"#Thisisatestfile.\n#Testinsertlineintothisfile."elseecho$linefidone#备份/etc目录#
# su - oraclesu: /usr/bin/ksh: No such file or directory根据报错信息:显示无法找到文件 /usr/bin/ksh果然没有该文件,但是发现存在文件/bin/ksh,于是创建了一个软连接,可以规避问题,可以成功切换到用户下,但无法执行系统自带命令。$. .bash_profile-ksh: .: .b
history显示历史指令记录内容,下达历史纪录中的指令主要的使用方法如果你想禁用history,可以将HISTSIZE设置为0:#exportHISTSIZE=0使用HISTIGNORE忽略历史中的特定命令下面的例子,将忽略pwd、ls、ls-ltr等命令:#exportHISTIGNORE=”pwd:ls:ls-ltr:”使用HIS
一.命令历史  1.history环境变量:    HISTSIZE:输出的命令历史条数,如history的记录数    HISTFILESIZE:~/.bash_history保存的命令历史记录数    HISTFILLE:历史记录的文件路径    HISTCONTROL:     ignorespace:忽略以空格开头的命令
之前在网上看到很多师傅们总结的linux反弹shell的一些方法,为了更熟练的去运用这些技术,于是自己花精力查了很多资料去理解这些命令的含义,将研究的成果记录在这里,所谓的反弹shell,指的是我们在自己的机器上开启监听,然后在被攻击者的机器上发送连接请求去连接我们的机器,将被攻击者的she
BashOne-LinersExplained,PartI:Workingwithfileshttps://catonmat.net/bash-one-liners-explained-part-oneBashOne-LinersExplained,PartII:Workingwithstringshttps://catonmat.net/bash-one-liners-explained-part-twoBashOne-LinersExplained,PartII
Shell中变量的作用域:在当前Shell会话中使用,全局变量。在函数内部使用,局部变量。可以在其他Shell会话中使用,环境变量。局部变量:默认情况下函数内的变量也是全局变量#!/bin/bashfunctionfunc(){a=99}funcecho$a输出>>99为了让全局变量变成局部变量
1、多命令顺序执行;  命令1;命令2  多个命令顺序执行,命令之间没有任何逻辑联系&&  命令1&&命令2  逻辑与,当命令1正确执行,才会执行命令2||  命令1||命令2  逻辑或,当命令1执行不正确,才会执行命令2例如:ls;date;cd/home/lsx;pwd;who ddif=输入文件of=输
原博文使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?首先,这个符号(#!)的名称,叫做"Shebang"或者"Sha-bang"。Linux执行文件时发现这个格式,会把!后的内容提取出来拼接在脚本文件或路径之前,当作实际执行的命令。 Shebang这个符号通常在Unix系统的脚本
1、历史命令history[选项][历史命令保存文件]选项:-c:  清空历史命令-w:  把缓存中的历史命令写入历史命令保存文件 ~/.bash_historyvim/etc/profile中的Histsize可改存储历史命令数量历史命令的调用使用上、下箭头调用以前的历史命令使用“!n”重复执行第n条历史
目录1.Shell脚本规范2.Shell脚本执行3.Shell脚本变量3.1环境变量3.1.1自定义环境变量3.1.2显示与取消环境变量3.1.3环境变量初始化与对应文件的生效顺序3.2普通变量3.2.1定义本地变量3.2.2shell调用变量3.2.3grep调用变量3.2.4awk调用变量3.3
   http://www.voidcn.com/blog/wszzdanm/article/p-6145895.html命令功能:显示登录用户的信息命令格式:常用选项:举例:w显示已经登录的用户及正在进行的操作[root@localhost~]#w 11:22:01up4days,21:22, 3users, loadaverage:0.00,0.00,0.00USER