一、输入输出的管理
在linux中,正确的输出编号为1,错误的输出编号为2。我切换到普通用户时,执行find /etc -name passwd 命令后会输出如下(find /etc -name passwd : 在/etc文件夹下查找所有文件名中含有passwd字 符的文件)
上面显示所有的查找信息,其中有28条是因为所在路径该用户没有权限导致查找失败,2条是正确的输出。
我们可以使用下面的命令对我们查找结果进行过滤显示。
1、find /etc -name passwd > flie #重定向正确输出
说明:将所有正确输出放入文件file中,将所有的错误结果显示出来,与find /etc -name passwd 1> flie
相同。
此时我们再次使用cat file命令查看file文件内容
可以看到两条正确的输出已经被写入文件中了。
2、find /etc -name passwd 2> file #重定向错误输出
说明:将所有错误信息放入文件file中,将所有的正确结果显示出来
此时我们再次使用cat file命令查看file文件内容,结果正确无误。
3、find /etc -name passwd &> file #重定向所有输出
说明:将所有查找信息不论错与对全部放入放入文件file中。
我们可以发现,当我们执行find /tec -name passwd &>file 时我们并没有显示任何输出信息,但是我们cat file 后会发现废了文件中的所有内容
4、find /etc -name passwd >>file #追加正确输出
将输出的正确信息追加放入 file文件中,绝对不会是覆盖原文件
5、find /etc -name passwd 2>>file #追加错误输出
将所有的输出信息追加放入 file中
6、find /etc -name passwd &>>file #追加所有输出
将所有的输出信息追加输入到 file文件中
7、当我们不想将信息输出到一个文件中,也不想显示他,可以使用下面命令
find /etc -name passwd &>> /dev/null
这样我们可以将所有的信息全部放入垃圾箱中
8、 2>&1 #把错误的输出编号由2变成1
在管理输出的时候我们可以使用管道 ,管道的作用是将前一条命令的输出变成管道后命令的输入,例如:
ls /bin | wc -l #统计ls /bin 命令输出的行数
date |tee file |wc -l #tee命令复制date命令的输出到file中,并统计输出行数
系统中错误的输出是无法通过管道的。但是我们可以使用 2>&1 将错误的编码变为正确的编码1 进行输出
例如:
find /etc -name passwd 2>&1 | wc -l #将所有输出错误的编码 变为1 之后和编码信息正确的 一起统计行数 (错误 28 +正确 2 )
find /etc -name passwd | wc -l #将所有的信息显示,正确的进入管道 进行行数统计,显示只有错误的信息。
由上图可知 正确信息只有两条
思考:我们需要只使用一条命令来统计所有的错误的命令总共有多少条?(即在本例中 使其输出28)
解答 : find /etc -name passwd 2>&1 >file | wc - l
注:多条连续的命令是依次执行的,并且只有当管道左边的指令完全结束时,管道右边的命令才会开始
二、man 命令
man [级别] [文件名,命令,目录,库函数,等等]
级别 : 1 #系统命令
2、 #系统接口
3、 #库函数
4、 #特殊文件、比如说设备文件等
5、 #文件
6、 #游戏
7、 #系统的软件包
8、 #系统管理命令
9、 #内核
在man页面内我们可以使用下面的快捷键
1、pageup|pagedown ##向下一个屏幕或者向上一个屏幕
2、d|u ##向下或者向上半个屏幕
3、G|gg ##跳转页面到man最下面或最上面
4、/关键字 ##搜索关键字,关键字会高亮显示,n向下匹配,N向上
5、q ##退出帮助页面
三、用户及用户的管理
(一)、用户的理解
group_name:password:GID:user_list (组名:组密码:组ID:组成员)
(2)、用户的建立
useradd 参数 参数 用户名
-u uid student #指定student用户的uid
-g 组名 student #指定student用户的初始组信息,这个组必须存在
-G 家族 student #指定student用户家族,这组必须存在
-c 说明 student #student用户说明
-d 家目录 student #student用户的家目录
-s student #student用户所使用的shell, /etcshells记录了用户能使用shell的名字
例如 我们新建一个 teacher用户 我们指定大的UID 为1002 所属有student这个组 并且我们指定它的家目录为/home/hello 如下:
我们可以的看到已经成功创建,并且这个用户的GID 时1002,家目录也正确 。
例:创建一个uid=1003 属于student组的 用户说明为teacher的 用户家族为student的 不支持登录的teachertest用户
(2)、用户删除
suerdel -r student #删除student用户的信息和系统配置
注意:删除用户时 一定要使用 -r命令 不然一些写属于该用户的系统设置和文件会不能完全删除,导致再次创建同名用户时可能会失败
(3)、组的建立
groupadd -g [gid] groupname #建立一个组名为groupname的组
groupdel 组名字 #删除组
建立一个组名为grouptest的组,并指定他的gid==1002;
(4)、用户id信息查看
id 参数 用户
-u student ##用户uid
-g student ##用户初始组id
-G student ##用户所有所在组id
-n student ##显示名称而不是id数字
-a student ##显示所有信息
(5).用户信息更改
usermod 参数 参数 用户
-l 用户新名称 student #更改用户名称
-u uid student #更改uid
-g gid student #更改gid
-G 附加组 student #更改附加组
-aG 附加组 student #添加附加组
-c 说明 student #更改说明
-d 家目录 student #更改家目录指定
-md 家目录 student #更改家目录指定及家目录名称
-s student #更改shell
-L student ##冻结帐号
-U student ##解锁
例1:更改用户teachertest的名称为teacher1
例2:将用户teacher1的uid改为1111
例3:将teacher1用户的gid改为0
例4:将teacher1用户的附加组改为 0
例5 :将用户teacher1添加附加组student中
例5 :将用户teacher的shell该为不支持登录
(5).将用户从某个组中删除
gpasswd groupname -d username
四、用户权力下放
一般来讲一般来说,root权限是在系统管理员手中,不能轻易就给了普通用户,但是有时普通用户想做一些高级一点的操作,又得麻烦系统管理员,比如啊,改个程序文件重启个Apache等等。于是就有了root权限的下放。在linux系统中超级用户可可以下放普通用户不能执行的操作给普通用户,系统中用户的权利配置文件在 : /etc/sudoers
系统中我们可以使用下面的方法进行用户权利配置:
第一步:超级用户执行visudo进入编辑 /etc/sudoers 模式
第二步:在文件中的第93(我的是第93行,根据不同系统行数不同)按照下面格式输入
用户名 主机名=(或得到的用户的身份) 命令
student localhost.localdomain=(root) /usr/sbin/useradd
表示student用户能在localhost.localdomian以超级用户身份执行/usr/sbin/useradd ,进行用户的新建。
第三步 : 执行 sudo useradd #如果用户是第一次使用sudo 命令需要输入当前用户的密码,但是当我们在
/etc/sudoers 文件中做如下设置时 我们可以不需要当前用户的密码。
student localhost.localdomain=(root) NOPASSWD /usr/sbin/useradd
例:将创建用户的与删除用户的权利下放给student用户,并且用student用户创建一个admin用户,并删除他
1、root 用户使用visudo命令打开/etc/sudoers文件
2、在第93行添加命令
student localhost.localdomain=(root) /usr/sbin/useradd
student localhost.localdomian=(root) /usr/sbin/userdel
3、使用 watch -n 1 'tail -n 5 /etc/passwd ; ls -l /home' 对用户进行监视,并且切换当前
用户到student后,执行 sudo sueradd admin #添加用户admin
由上图可以看出 student用户创建admin用户已经成功 ,并且这个过程中使用了student的密码
4、使用 sudo userdel admin
可以看到已经成功删除admin用户,并且是第二次使用sudo 所以没有使用当前用的的密码
五、用户认证信息的控制
chage 参数 参数 用户-d number student ##用户密码组后一次修改的时间,如果设定成0,用户登
陆系统后必须修改自己的密码
-m number student ##最短有效期,设置为0意味着该用户可以在任何时间修改密码
-M number student ##最长有效期-W number student ##警告期
-I number student ##用户非活跃天数
-E number student ##帐号到期日格式 -E "YYYY-MM-DD"过了这天,此帐号将不可用
注意 :chage 命令和passwd命令的功能各有很多相同之处 ,这里我们可以使用watch -n 1 ‘passwd -S username’对密码状态进行监控。
watch -n 1 ‘passwd -S username'执行后 会出现如下所示结果
用户名 ,ps ,户密码组后一次修改的时间 ,账号密码的最短有效期,账号密码的最长有效期,,账号密码的警告期,用户的非活跃天数
例:将用户的密码的最后一次更改的时间变为2018年4月1日,密码的最短有效期改为20天,最长有效期 为30天,警告期为5天,非活跃天数为3天
当我们使用 chage -d 后面的时间如果没有单位或者不是年-月-日,只有数字的时候,他是不是代表距离1970年1月1日的时间。
五、root密码忘记后找回方法
1.重新启动系统
2.在系统启动阶段按上下健停止系统系统引导
3.选择启动引导标题,按“E”进行编辑
4.找到linux16引导条目这一行,从这行最后删除到ro选项,并把ro改为rw,然后添加rd.break选项
6.进入系统后执行chroot /sysroot切换到真实的系统环境
7.passwd root修改超级用户密码
8.建立文件/.autorelabel让系统从新扫描所有文件