linux用户,组,权限.shell基础,历史,别名,数据流重定向,管道,正则
1.用户,权限,组 1.1 用户与组在Linux系统中,根据系统管理的需要将用户账号分为三种不同的类型:超级用户、普通用户、系统用户,每种类型的用户账号其拥有的权限、担任的角色都各不相同.
超级用户:root是Linux系统中默认的超级用户账号,对本主机拥有至高无上的完全权限,类似于windows系统中的Administrator用户。由于权限太大,所以Linux系统默认是不建议用root用户登录系统的,只有当进行系统管理、维护任务时,才使用root用户登录,日常事务处理建议使用普通用户账号进行。UID为固定值0.
系统用户:在安装Linux系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行.UID默认在1~499之间.
普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的主目录中有完全权限.UID默认使用500~60000.
而我们用户组也可以有以下分类:
私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
基本组:用户的默认组
附加组,额外组:默认组以外的其它组
1.2 用户与组帐号文件用户账号相关的配置文件:
/etc/passwd 保存用户名称、主目录、登录Shell等基本信息,这是一个文本文件,任何用户都可以 读取文件中的内容
/etc/shadow 保存用户的密码、账号有效期等信息,只有超级用户root才有权限读取shadow文件中 的内容,普通用户是无法查看这个文件的,并且即使是root用户也不允许直接编辑该 文件中的内容。
说明:这两个配置文件中,每一行对应一个用户账号,不同的配置项之间用冒号“:”进行分隔,直接修改这些文件或者使用用户管理命令都可以对用户账号进行管理。
/etc/passwd:系统中新增加的用户账号信息将保存到passwd文件的末尾。passwd文件的每一行内容中,包含了7个用冒号“:”分隔的配置字段。
root:x:0:0:root:/root:/bin/bash第1个字段root:用户名。
第2个字段x:密码占位符x。注意,所谓的密码占位符只是表示这是一个密码字段,但用户的密码却并不是存放在这里,而是存放在/etc/shadow文件中。之所以这样设计,是由于在早期的UNIX操作系统中,用户帐号的密码信息是保存在passwd文件中的,但这样不法用户可以很容易的获取密码字串并进行暴力破解,因此存在一定的安全隐患。所以后来经改进后,将密码转存入专门的shadow文件中,并严格控制权限,这样passwd文件中就仅保留密码占位符“x”。
第3个字段0:用户的UID
第4个字段0:用户所属基本组的GID
第5个字段root:用户账户描述
第6个字段/root:用户的主目录
第7个字段/bin/bash:用户使用的shell
/etc/shadow :
root:$6$wRRWT6uS$bTPOf9Z5Si.CkoyIDrWHwyuDx3QxKWju.09D10tk0EdfaYe07UmjIImFzavMU/IKizXKzLEfR2Nf1FRd556DK/:15714:0:99999:7:::第一个字段root:用户名
第二个字段$6$-DK/:用户密码,经过MD5加密之后的密文。如果是有些用户在这段是“x”或 者“*”或“!!”,表示这个用户不能登录到系统;这个字段是非空的;
第三个字段15714:上次修改口令的时间,这个时间是从1970年01月01日算起到最近一次修改口令的时间 间隔(天数),
第四个字段0:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多 少天才能修改其口令
第五个字段99999:两次修改口令间隔最多的天数;99999表示不需要修改
第六个字段7:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要 作废;
第七个字段(空):在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用 此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用
第八个字段(空):用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天 数),如果这个字段的值为空,帐号永久可用;
第九个字段(空):保留字段,目前为空,以备将来Linux发展之用;
用户名
密码
从1970年1月1日起到上次修改密码所经过的天数
密码再过几天可以被变更(0表示随时可以改变)
密码再过几天必须被变更(99999表示永不过期)
密码过期前几天提醒用户(默认为一周)
密码过期几天后帐号被禁用
从1970年1月1日算起,多少天后账号失效
组账号相关的配置文件:
/etc/group :保存组账号名称、GID号、组成员等基本信息,
/etc/gshadow :后者用于保存组账号的加密密码字串等信息(但很少使用到)。
说明:某一个组账号包含有哪些成员,将会在/etc/group文件内每一行的最后一个字段中体现出来,多个组成员之间使用“,”分隔。
/etc/group :
daemon::5:root,daemon第一个字段daemon:组名称
第二个字段(空):组密码,加密后的口令。一般Linux系统的用户组都没有口令,即这个字段一般为 空,或者是*
第三个字段5:组ID
第四个字段(root,daemon):组成员,该组包含root和daemon两个成员
/etc/gshadow :
bin:::root,bin,daemon第一个字段bin:组名称
第二个字段(空):组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码
第三个字段(空):组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割
第四个字段(root,bin,daemon):组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割
1.3 用户与组命令useradd:
useradd+用户名.创建用户
主要参数:
-u:指定用户的uid
-d:指定用户的主目录
-g:指定用户的基本组
-G:指定用户的额外组
-e:指定用户的失效时间
-M:不建立用户主目录
-s:指定用户的默认shell
-r:添加系统用户
userdel:
userdel+用户名.删除用户
主要参数:
-r:同时删除用户的主目录
id:
id+用户名.查看相关用户信息
主要参数:
-u:只看uid
-g:只看基本组id
-G:看额外组id
-n:看信息的名字
finger:
finger+用户名. 查看用户帐号信息.
usermod:
usermod+用户名.修改用户帐号属性
主要参数:
-u UID .修改uid.
-g GID .修改基本组id
-G GID .修改用户额外组id,若要追加模式,需加上-a.
-l :重命名用户名
-d :修改用户的主目录.若要同时复制以前的文件至新的主目录,加上-m.
-s :修改用户默认shell
-L :锁定帐号
-U :解锁帐号
passwd:
passwd+参数+用户名 用户密码设定
主要参数:
-d:清空密码
-l:锁定用户帐号
-u:解锁用户帐号
-n:修改密码冻结天数
-x:修改密码有效天数
-w:修改密码警告天数
-i:修改密码宽限天数
-S:列出用户密码的相关信息
stdin 从标准输入设置密码
chage(change age)
修改用户账号密码的时间参数
chage命令行选项:
-l
列出用户账号密码的详细时间参数
-d
修改密码修改日期,/etc/shadow中第三字段,为0表示第一次登陆强制修改密码
-m
修改密码冻结天数,/etc/shadow中第四字段
-M
修改密码有效天数,/etc/shadow中第五字段
-W
修改密码警告天数,/etc/shadow中第六字段
-I
修改密码宽限天数,/etc/shadow中第七字段,为-1表示不会失效
-E
修改账号失效日期,/etc/shadow中第八字段
groupadd
创建组
主要参数:
-g 指定GID
-r 添加为系统组
groupmod:
修改用户组
主要参数:
-g 指定GID
-n 重命名组名称
groupdel:
删除用户组
若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组
gpasswd
设置组帐号的密码,同样可以管理组用户的添加,删除
主要参数:
-a: 添加组成员
-d: 删除组成员
1.4 文件普通权限对一个普通的文件使用ls -ll命令后,看到下面的输出内容

而对于文件权限中的每一位,又分别代表了以下的意思

文件类型又有以下几类:
[d]:目录 [-]:文件 [l]:连接文件 :可供存储的接口设备 [c]:串行端口设备,如键盘和鼠标权限的定义:
r:可读,普通文件的r代表可以读取该文件的实际内容;目录的r代表可以读取该目录结构列表的权 限
w:可写,普通文件的w代表可以编辑,新增或者修改文件内容,但不能删除该文件;目录的w代表可 以更改该目录结构列表的权限如新建,删除,重命名,转移该目录下的文件或目录
x:可执行,普通文件的x代表该文件可以被系统执行;目录的x代表该目录能否成为工作目录,即能 否cd进该目录
容器类型:
u:当前用户
g:当前组
o:其他人
a:所有人
chgrp:
改变文件所属用户组
chgrp [-R] groupname filename/dirname:-R是递归更改目录下的文件chown:
改变文件所有者,也可以实现chgrp的功能
chown [-R] username filename/dirname:只修改所有者 chown [-R] username:groupname filename/dirname:同时修改所有者和用户组 chown [-R] .groupname filename/dirname:只修改用户组chmod:
数字表达 chmod [-R] num filename/dirnamer:4
w:2
x:1
例如将一个文件的权限设置为-rwxr-xr-x: chmod 755 file
用符号表达,chmod 用户类别+|-MODE file

将一个文件的权限设置为-rwxr-xr-x: chmod u=rwx,g=rx,o=rx file.
umask
默认权限遮罩码
目录权限:777-umask
文件权限:666-umask
一般普通用户umask默认002,root用户umask默认022
即:
普通用户新建文件:666-002=664,rw-rw-r ,u读写,G读写,o读
普通用户新建dir:777-002=775,rwxrwxr-x,u读写浏,G读写浏,o读浏
root用户新建文件:666-022=644,rw-r r ,u读写,G读,O读
root用户新建dir:777-022=755,rwxr-xr-x,u读写浏,G读浏,O读浏
2.shell基础 2.1 命令行编辑Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+u: 删除光标至命令行首的内容
Ctrl+k: 删除光标至命令行尾的内容
Ctrl+l: 清屏
2.2 命令历史history
操作历史命令
主要参数:
n :列出几条命令的意思
-c: 情空历史命令
-d: OFFSET(n) 删除指定位置的命令
-w: 保存命令到历史文件中(默认为~/.bash_history)
HISTSIZE
也是一个环境变量,表示历史命令的数量
echo $HISTSIZE 显示历史命令数量
历史命令使用技巧
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令;
!!: 执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数;
2.3 别名 别名设置: alias cls=clear清楚别名设置 unalias cls 2.4 通配
\* 匹配 0 或多个字符
? 匹配任意一个字符
[list] 匹配 list 中的任意单一字符 [!list] 匹配 除list 中的任意单一字符 [c1-c2] 匹配 c1-c2 中的任意单一字符{string1,string2,…} 匹配 sring1 或 string2 (或更多)其一字符串
[:space:]:空白字符 [:punct:]:标点符号 [:lower:]:小写字母 2.5 bash环境配置文件站在用户登录的角度来说,SHELL的类型:
登录式shell:
正常通常某终端登录
su - USERNAME
su -l USERNAME
非登录式shell:
su USERNAME
图形终端下打开命令窗口
自动执行的shell脚本
bash的配置文件:
全局配置
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
个人配置
~/.bash_profile, ~/.bashrc
profile类的文件:
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名
登录式shell如何读取配置文件?
/etc/profile > /etc/profile.d/*.sh > ~/.bash_profile > ~/.bashrc > /etc /bashrc
非登录式shell如何配置文件?
~/.bashrc > /etc/basrc > /etc/profile.d/*.sh
看张图,登陆式shell的流程

2.6 数据流重定向
默认输出设备:标准输出,STDOUT, 1
默认输入设备:标准输入, STDIN, 0
标准错误输出:STDERR, 2
>: 输出重定向,覆盖输出
>>:追加输出
set -C: 禁止对已经存在文件使用覆盖重定向;
强制覆盖输出,则使用 >|
set +C: 关闭上述功能
2>: 重定向错误输出
2>>: 追加方式
&>: 重定向标准输出或错误输出至同一个文件
<:输入重定向
<<:Here Document << 结束符 由键盘输入,直到结束符为止.
2.7 管道命令
command1正确输出,作为command2的输入 然后comand2的输出作为,comand3的输入 ,comand3输出就会直接显示在屏幕上面了。
通过管道之后:comand1,comand2的正确输出不显示在屏幕上面
注意:
1、管道命令只处理前一个命令正确输出,不处理错误输出
2、管道命令右边命令,必须能够接收标准输入流命令才行。
管道和重定向的区别
区别是:
1、左边的命令应该有标准输出 | 右边的命令应该接受标准输入
左边的命令应该有标准输出 > 右边只能是文件
左边的命令应该需要标准输入 < 右边只能是文件
2、管道触发两个子进程执行”|”两边的程序;而重定向是在一个进程内执行
上一节说过的管道命令包括cut,sort,wc,uniq,tr,join 接下来说些其他的
grep
通过正则表达式分析一行信息,拿出我们需要的信息
主要参数:
-i: 忽略大小写的不同
-v: 反向选择,显示没有被匹配的行
-o: 只显示被匹配到的字符
-c: 计算找到”查找字符串”的个数
color: 高亮显示
egrep:表示扩展grep,使用扩展正则表达式匹配,差别在于有+符号,不需要转义一些字符,真正的分组等等..
fgrep:表示快速grep,不使用正则表达式,纯粹表示匹配字符串.
tee
双向重定向
tee会同时将数据流送与文件与屏幕;输出到屏幕的,其实就是stdout,可以让下个命令继续处理.
ls -l /home | tee ~/homefile |more 会保存一份到homefile文件中,同时屏幕也有输出.
col
col多数用来做简单处理,如将tab键转成空格键.
主要参数:
-x: 将tab键转成对等的空格键
-b: 在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符.
-A: 显示出所有特殊按键
paste
paste比join简单多了,就是直接讲两行粘在一起 用分隔符分割
主要参数:
-d: 指定分隔符,不指定默认是tab
\- :file部分写成-表示来自标准输入
cat /etc/group |paste /etc/passwd /etc/shadow - | head -n 3表示三个文件粘在一起,,并取出前三行.
expand
将tab转成空格键
主要参数:
-t: 接数字,指定tab转成多少个空格键
split
切割命令
主要参数
-b: 后面可以接切割成文件袋的大小,可以加单位,如b,k,m
-l: 以行数作为切割
PREFIX: 作为切割文件的前缀
例如将700k的/etc/file 分成一个300k
split -b 300k /etc/file file则会分成fileaa,fileab,fileac.
要重新合并用数据流重定向就可以了
cat /etc/file* >> filexargs
参数代换, 可以读书标准输入,并且以空格符或断行字符进行分辨,将stdin分割成arguments.
主要参数:
-p: 在执行每个命令的时候都询问用户
-n: 后面接次数,要使用几个参数的意思
-e: 接一个结束符,碰到结束符时候停止工作
很多命令不支持管道命令,这时候可以通过xargs来提供命令引用standard input之用.
关于-
可以代替stdin和stdout
例如 tar -cvf - /home | tar -xvf -前面一个-表示标准输出,后面一个-表示标准输入.把前面的文件打包传送到后面
3. 正则表达式元字符:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 字符集合: [:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]匹配次数(贪婪模式):
*: 匹配其前面的字符任意次
.*: 任意长度的任意字符
\?: 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,至多n次
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
\$: 锚定行尾,此字符前面的任意内容必须出现在行尾
^$: 空白行
\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现
分组:
\(\)
扩展正则表达式
+:重复一个或一个以上的前面字符
?:零个或一个前字符
|:用或的方式找出数个字符串
():找出分组字符串
()+:多个重复组的判别