Linux基础学习(三)

时间:2024-04-03 12:37:48

一、输入输出的管理

        在linux中,正确的输出编号为1,错误的输出编号为2。我切换到普通用户时,执行find /etc -name passwd 命令后会输出如下(find /etc -name passwd   : 在/etc文件夹下查找所有文件名中含有passwd字 符的文件)

         Linux基础学习(三)           上面显示所有的查找信息,其中有28条是因为所在路径该用户没有权限导致查找失败,2条是正确的输出。

  我们可以使用下面的命令对我们查找结果进行过滤显示。

        1、find /etc -name passwd > flie                          #重定向正确输出

           说明:将所有正确输出放入文件file中,将所有的错误结果显示出来,与find /etc -name passwd 1> flie

        相同。

            Linux基础学习(三)

            此时我们再次使用cat file命令查看file文件内容

            Linux基础学习(三)

            可以看到两条正确的输出已经被写入文件中了。

        2、find /etc -name passwd 2> file                     #重定向错误输出

               说明:将所有错误信息放入文件file中,将所有的正确结果显示出来

                Linux基础学习(三)

                此时我们再次使用cat file命令查看file文件内容,结果正确无误。

                Linux基础学习(三)

        3、find /etc -name passwd &> file    #重定向所有输出

             说明:将所有查找信息不论错与对全部放入放入文件file中。

            Linux基础学习(三)

        我们可以发现,当我们执行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 )

        Linux基础学习(三)

         find /etc -name passwd  |  wc -l              #将所有的信息显示,正确的进入管道 进行行数统计,显示只有错误的信息。

        Linux基础学习(三)

        由上图可知 正确信息只有两条

        思考:我们需要只使用一条命令来统计所有的错误的命令总共有多少条?(即在本例中 使其输出28)

        解答 : find /etc -name passwd 2>&1 >file | wc - l

        Linux基础学习(三)

        注:多条连续的命令是依次执行的,并且只有当管道左边的指令完全结束时,管道右边的命令才会开始


二、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                 ##退出帮助页面

三、用户及用户的管理

    (一)、用户的理解

                用户就是系统使用者的身份,在系统总用户存储为若干字符串+若干个系统配置文件。涉及到用户
         的系统配置文件有
                1、 /etc/passwd                        #用户的密码信息
                    用户:密码:uid:gid:说明:家目录:用户使用的shell
               Linux基础学习(三)
                2、 /etc/shadow                        #用户认证信息
                    用户:密码:最后一次密码修改该时间:最短有效期:最长有效期:警告期:非活跃期:帐号到
            期日
                3、/etc/group                             #用户组信息
                    vim /etc/group 

                    group_name:password:GID:user_list   (组名:组密码:组ID:组成员)

                4、/etc/gshadow                        #组认证信息
                5、/home/username                  #用户家目录
                6、etc/skel/. *                             #用户骨架文件
(二)、用户管理

        (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 如下:

             Linux基础学习(三)

            Linux基础学习(三)

        我们可以的看到已经成功创建,并且这个用户的GID 时1002,家目录也正确 。

        例:创建一个uid=1003  属于student组的 用户说明为teacher的 用户家族为student的 不支持登录的teachertest用户   Linux基础学习(三)

        Linux基础学习(三)

        (2)、用户删除

            suerdel -r   student                                  #删除student用户的信息和系统配置

            注意:删除用户时 一定要使用 -r命令 不然一些写属于该用户的系统设置和文件会不能完全删除,导致再次创建同名用户时可能会失败

        (3)、组的建立

            groupadd  -g   [gid]   groupname               #建立一个组名为groupname的组

            groupdel 组名字                                  #删除组

            建立一个组名为grouptest的组,并指定他的gid==1002;

        Linux基础学习(三)

        Linux基础学习(三)

        (4)、用户id信息查看 

        id 参数         用户
        -u       student               ##用户uid
        -g       student                 ##用户初始组id
        -G       student                 ##用户所有所在组id
        -n        student                ##显示名称而不是id数字

        -a       student                  ##显示所有信息

        Linux基础学习(三)

        Linux基础学习(三)

    (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

            Linux基础学习(三)

        例2:将用户teacher1的uid改为1111

            Linux基础学习(三)

        例3:将teacher1用户的gid改为0 

            Linux基础学习(三)

        例4:将teacher1用户的附加组改为 0

            Linux基础学习(三)

        例5 :将用户teacher1添加附加组student中

           Linux基础学习(三)

        例5 :将用户teacher的shell该为不支持登录

            Linux基础学习(三)

            Linux基础学习(三)

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文件

        Linux基础学习(三)

      2、在第93行添加命令

               student               localhost.localdomain=(root)                  /usr/sbin/useradd

               student               localhost.localdomian=(root)                 /usr/sbin/userdel

        Linux基础学习(三)

        3、使用 watch -n 1 'tail -n 5 /etc/passwd ; ls -l /home'  对用户进行监视,并且切换当前

             用户到student后,执行 sudo sueradd admin                #添加用户admin

        Linux基础学习(三)

        由上图可以看出 student用户创建admin用户已经成功 ,并且这个过程中使用了student的密码   

        4、使用 sudo userdel admin                        

       Linux基础学习(三)

        可以看到已经成功删除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'执行后 会出现如下所示结果

                Linux基础学习(三)

                用户名 ,ps ,户密码组后一次修改的时间 ,账号密码的最短有效期,账号密码的最长有效期,,账号密码的警告期,用户的非活跃天数

            例:将用户的密码的最后一次更改的时间变为2018年4月1日,密码的最短有效期改为20天,最长有效期 为30天,警告期为5天,非活跃天数为3天

           Linux基础学习(三)         当我们使用 chage -d 后面的时间如果没有单位或者不是年-月-日,只有数字的时候,他是不是代表距离1970年1月1日的时间。

   

五、root密码忘记后找回方法

        1.重新启动系统
        2.在系统启动阶段按上下健停止系统系统引导

        3.选择启动引导标题,按“E”进行编辑

      Linux基础学习(三)

        4.找到linux16引导条目这一行,从这行最后删除到ro选项,并把ro改为rw,然后添加rd.break选项

    Linux基础学习(三)

    Linux基础学习(三)

        5.ctrl+x启动设定过后的系统引导条目
        6.进入系统后执行chroot /sysroot切换到真实的系统环境

        7.passwd root修改超级用户密码

       Linux基础学习(三)

        8.建立文件/.autorelabel让系统从新扫描所有文件

Linux基础学习(三)

        9.exit两次使系统自动重新启动