devops

Linux上的文件管理及用户权限管理

2018-11-26  本文已影响0人  Pu2zL3he4d

1.bash的基础特性:

bash的基础特性:命令的执行状态结果

    命令执行的状态结果:
        bash通过状态返回值来输出此结果:
            成功:0
            失败:1-255

        命令执行完成之后,其状态返回值保存于bash的特殊变量$?中;

    命令正常执行时,有的还回有命令返回值:
        根据命令及其功能不同,结果各不相同;

    引用命令的执行结果:
        $(COMMAND)
        或`COMMAND`

bash的基于特性:引用
    强引用:''
    弱引用:""
    命令引用:``

bash基础特性:快捷键
    Ctrl+a:跳转至命令行行首
    Ctrl+e:跳转至命令行行尾

    Ctrl+u:删除行首至光标所在处之间的所有字符;
    Ctrl+k:删除光标所在处至行尾的所有字符;

    Ctrl+l:清屏,相当于clear

bash的基础特性之:命令行展开
    ~:自动展开为用户的家目录,或指定的用户的家目录;           
    {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;
        例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b

globbing:文件名通配(整体文件名匹配,而非部分)

    匹配模式:元字符
        *:匹配任意长度的任意字符
            pa*, *pa*, *pa, *p*a*
                pa, paa, passwd
        ?:匹配任意单个字符
            pa?, ??pa, p?a, p?a?
                pa, paa, passwd
        []:匹配指定范围内的任意单个字符
            有几种特殊格式:
                [a-z], [A-Z], [0-9], [a-z0-9]
                [[:upper:]]:所有大写字母
                [[:lower:]]:所有小写字母
                [[:alpha:]]:所有字母
                [[:digit:]]:所有数字
                [[:alnum:]]:所有的字母和数字
                [[:space:]]:所有空白字符
                [[:punct:]]:所有标点符号

                pa[0-9][0-9], 2[0-9][0-9]
        [^]:匹配指定范围外的任意单个字符
            [^[:upper:]]
            [^0-9]
            [^[:alnum:]]

2.IO重定向及管道

    程序:指令+数据
        程序:IO

        可用于输入的设备:文件
            键盘设备、文件系统上的常规文件、网卡等;
        可用于输出的设备:文件
            显示器、文件系统上的常规文件、网卡等;

        程序的数据流有三种:
            输入的数据流;<-- 标准输入(stdin),键盘;
            输出的数据流:--> 标准输出(stdout),显示器;
            错误输出流:  --> 错误输出(stderr),显示器;

        fd: file descriptor,文件描述符
            标准输入:0
            标准输出:1
            错误输出:2

    IO重定向:

        输出重定向:>
            特性:覆盖输出
        输出重定向:>>
            特性:追加输出

        # set -C
            禁止覆盖输出重定向至已存在的文件;
            此时可使用强制覆盖输出:>|
        # set +C
            关闭上述特性

        错误输出流重定向:2>, 2>>

        合并正常输出流和错误输出流:
            (1) &>, &>>
            (2) COMMAND > /path/to/somefile 2>&1
                COMMAND >> /path/to/somefile 2>&1

            特殊设备:/dev/null

        输入重定向:<

        tr命令:
            tr [OPTION]... SET1 [SET2]
                把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符

            用法1:
                tr SET1 SET2 < /PATH/FROM/SOMEFILE
            用法2:
                tr -d SET1 < /PATH/FROM/SOMEFILE

            注意:不修改原文件

        Here Document:<<

            cat << EOF
            cat > /PATH/TO/SOMEFILE << EOF

        管道:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流
            COMMAND1 | COMMAND2 | COMMAND3 | ...

            tee命令:
                COMMAND | tee /PATH/TO/SOMEFILE

        练习1:把/etc/passwd文件的前6行的信息转换为大写字符后输出;
            head -n 6 /etc/passwd | tr 'a-z' 'A-Z'

    命令总结:tr, tee

3.目录管理类的命令:mkdir, rmdir

    mkdir, rmdir

    mkdir:make directories

        mkdir [OPTION]... DIRECTORY...
            -p: 自动按需创建父目录;
            -v: verbose,显示详细过程;
            -m MODE:直接给定权限;

            注意:路径基名方为命令的作用对象;基名之前的路径必须得存在;

    rmdir:remove empty directories

        rmdir [OPTION]... DIRECTORY...

            -p:删除某目录后,如果其父目录为空,则一并删除之;
            -v: 显示过程;
tree命令:
    tree [options] [directory]
        -L level:指定要显示的层级;

Q:使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z

image.png image.png image.png
image.png

4.文件查看类命令:cat, tac, head, tail, more, less, stat, touch

    分屏查看命令:more和less

    more命令:
        more FILE
            特点:翻屏至文件尾部后自动退出;

    less命令:
        less FILE

    head命令:
        查看文件的前n行;
            head [options] FILE
                -n #
                -#

    tail命令:
        查看文件的后n行;
            tail [options] FILE
                -n #
                -#
                -f:查看文件尾部内容结束后不退出,跟随显示新增的行;

    stat命令:
        stat - display file or file system status

        stat FILE...

        文件:两类数据
            元数据:metadata
            数据: data

        时间戳:
            access time:2015-12-10 16:12:22.776423693 +0800
            modify time:2015-12-10 16:12:22.776423693 +0800
            change time:2015-12-10 16:12:22.776423693 +0800

    touch命令:
        touch - change file timestamps

        touch [OPTION]... FILE...
            -c: 指定的文件路径不存在时不予创建;
            -a: 仅修改access time;
            -m:仅修改modify time;
            -t STAMP
                [[CC]YY]MMDDhhmm[.ss]

Q:在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22

image.png
image.png
image.png

Q:文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息?

image.png image.png

5.文件管理工具:cp, mv, rm

    cp命令:copy
        源文件;目标文件;

       单源复制:cp [OPTION]... [-T] SOURCE DEST
       多源复制:cp [OPTION]... SOURCE... DIRECTORY
                 cp [OPTION]... -t DIRECTORY SOURCE...

        单源复制:cp [OPTION]... [-T] SOURCE DEST
            如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中;
            如果DEST存在:
                如果DEST是非目录文件:则覆盖目标文件;
                如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;

        多源复制:cp [OPTION]... SOURCE... DIRECTORY
                  cp [OPTION]... -t DIRECTORY SOURCE...

            如果DEST不存在:错误;
            如果DEST存在:
                如果DEST是非目录文件:错误;
                如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;

        常用选项:
            -i:交互式复制,即覆盖之前提醒用户确认;
            -f:强制覆盖目标文件;
            -r, -R:递归复制目录;
            -d:复制符号链接文件本身,而非其指向的源文件;
            -a:-dR --preserve=all, archive,用于实现归档;
            --preserv=
                mode:权限
                ownership:属主和属组
                timestamps: 时间戳
                context:安全标签
                xattr:扩展属性
                links:符号链接
                all:上述所有属性

    mv命令:move
       mv [OPTION]... [-T] SOURCE DEST
       mv [OPTION]... SOURCE... DIRECTORY
       mv [OPTION]... -t DIRECTORY SOURCE..         

       常用选项:
            -i:交互式;
            -f:force

    rm命令:remove
        rm [OPTION]... FILE...

        常用选项:
            -i:interactive
            -f:force
            -r: recursive

            删除目录:rm -rf /PATH/TO/DIR
                危险操作:rm -rf /*

        注意:所有不用的文件建议不要直接删除,而是移动至某个专用目录;(模拟回收站)

Q:复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

image.png image.png

5.用户、组和权限管理

    Multi-tasks, Multi-Users

    每个使用者:
        用户标识、密码;
            Authentication
            Authorization
            Audition

        组:用户组,用户容器

    用户类别:
        管理员
        普通用户
            系统用户
            登录用户

        用户标识:UserID, UID
            16bits二进制数字:0-65535
                管理员:0
                普通用户:1-65635
                    系统用户:1-499(CentOS6), 1-999(CentOS7)
                    登录用户:500-60000(CentOS6), 1000-60000(CentOS7)

            名称解析:名称转换
                Username <--> UID

                根据名称解析库进行:/etc/passwd

    组:
        组类别1:
            管理员组
            普通用户组
                系统组
                登录组

        组标识:GroupID, GID
            管理员组:0
                普通用户组:1-65635
                    系统用户组:1-499(CentOS6), 1-999(CentOS7)
                    登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)   

        名称解析:groupname <--> gid
            解析库:/etc/group  

        组类别2:
            用户的基本组
            用户的附加组

        组类别3:
            私有组:组名同用户名,且只包含一个用户;
            公共组:组内包含了多个用户;

    认证信息:
        通过比对事先存储的,与登录时提供的信息是否一致;
        password:
            /etc/shadow
            /etc/gshadow

        密码的使用策略:
            1、使用随机密码;
            2、最短长度不要低于8位;
            3、应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类;
            4、定期更换;

        加密算法:
            对称加密:加密和解密使用同一个密码;
            非对称加密:加密和解密使用的一对儿密钥;
                密钥对儿:
                    公钥:public key
                    私钥: private key
            单向加密:只能加密,不能解密;提取数据特征码;
                定长输出
                雪崩效应

                算法:
                    md5: message digest, 128bits
                    sha:secure hash algorithm, 160bits
                    sha224
                    sha256
                    sha384
                    sha512

                在计算之时加salt,添加的随机数;

    /etc/passwd:用户的信息库
        name:password:UID:GID:GECOS:directory:shell

        name: 用户名
        password:可以是加密的密码,也可是占位符x;
        UID:
        GID:用户所属的主组的ID号;
        GECOS:注释信息
        directory:用户的家目录;
        shell:用户的默认shell,登录时默认shell程序;

    /etc/shadow:用户密码
        用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段

    /etc/group:组的信息库
        group_name:password:GID:user_list

            user_list:该组的用户成员;以此组为附加组的用户的用户列表;

相关命令:useradd, userdel, usermod, passwd, groupadd, groupdel, groupmod, gpasswd, chage, chsh, id, su


用户管理基础概念:
    用户类别:
        管理员、普通用户(系统用户和登录用户)
    组类别:
        管理员组、普通用户组
        基本组和附加组
        私有组、公共组
    数据库文件:
        /etc/passwd
            login:password:uid:gid:comment:home:shell
        /etc/shadow
            login:encrpted_password:...
        /etc/group
            group:password:gid:user_list

        密码存储格式:单向加密,并借助于salt完成
            1: md5
            sha1
            sha224
            sha256
            sha384
            6: sha512

Linux用户和组管理

安装上下文:
    进程以其发起者的身份运行;
        进程对文件的访问权限,取决于发起此进程的用户的权限;

系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户;这类用户从不用登录系统;


groupadd命令:添加组

    groupadd [选项] group_name

        -g GID:指定GID;默认是上一个组的GID+1;
        -r: 创建系统组;

groupmod命令:修改组属性

    groupmod [选项] GROUP
        -g GID:修改GID;
        -n new_name:修改组名;

groupdel命令:删除组

    groupdel [选项] GROUP

useradd命令:创建用户

    useradd [选项] 登录名
        -u, --uid UID:指定UID;
        -g, --gid GROUP:指定基本组ID,此组得事先存在;
        -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;
        -c, --comment COMMENT:指明注释信息;
        -d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
        -s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
        -r, --system:创建系统用户;

    注意:创建用户时的诸多默认设定配置文件为/etc/login.defs     

    useradd -D:显示创建用户的默认配置;
    useradd -D 选项: 修改默认选项的值;

        修改的结果保存于/etc/default/useradd文件中;

usermod命令:修改用户属性

    usermod [选项] 登录
        -u, --uid UID:修改用户的ID为此处指定的新UID;
        -g, --gid GROUP:修改用户所属的基本组;
        -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;
        -a, --append:与-G一同使用,用于为用户追加新的附加组;
        -c, --comment COMMENT:修改注释信息;
        -d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;
        -m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
        -l, --login NEW_LOGIN:修改用户名;
        -s, --shell SHELL:修改用户的默认shell;

        -L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";
        -U, --unlock:解锁用户的密码;

userdel命令:删除用户

    userdel [选项] 登录
        -r:删除用户时一并删除其家目录;

练习1:创建用户gentoo,UID为4001,基本组为gentoo,附加组为distro(GID为5000)和peguin(GID为5001);
练习2:创建用户fedora,其注释信息为"Fedora Core",默认shell为/bin/tcsh;

练习3:修改gentoo用户的家目录为/var/tmp/gentoo;要求其原有文件仍能被用户访问;
练习4:为gentoo新增附加组netadmin;

passwd命令:

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

    (1) passwd:修改用户自己的密码;
    (2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;

        -l, -u:锁定和解锁用户;
        -d:清除用户密码串;
        -e DATE: 过期期限,日期;
        -i DAYS:非活动期限;
        -n DAYS:密码的最短使用期限;
        -x DAYS:密码的最长使用期限;
        -w DAYS:警告期限;

        --stdin:
            echo "PASSWORD" | passwd --stdin USERNAME

gpasswd命令:

    组密码文件:/etc/gshadow

    gpasswd [选项] group
        -a USERNAME:向组中添加用户
        -d USERNAME:从组中移除用户

newgrp命令:临时切换指定的组为基本组;

    newgrp [-] [group]

        -: 会模拟用户重新登录以实现重新初始化其工作环境;

chage命令:更改用户密码过期信息

    chage [选项] 登录名

        -d
        -E
        -W
        -m
        -M

id命令:显示用户的真和有效ID; 

    id [OPTION]... [USER]
        -u: 仅显示有效的UID;
        -g: 仅显示用户的基本组ID; 
        -G:仅显示用户所属的所有组的ID;
        -n: 显示名字而非ID;

su命令:switch user

    登录式切换:会通过读取目标用户的配置文件来重新初始化
        su - USERNAME
        su -l USERNAME
    非登录式切换:不会读取目标用户的配置文件进行初始化
        su USERNAME

    注意:管理员可无密码切换至其它任何用户;

    -c 'COMMAND':仅以指定用户的身份运行此处指定的命令;

其它几个命令:chsh, chfn, finger, whoami, pwck, grpck

命令总结:groupadd, groupmod, groupdel, useradd, usermod, userdel, passwd, gpasswd, newgrp, id, su, chage

Q:创建用户tom,指定UID为5001,指定家目录为/tmp/tom, 指定shell为/bin/zsh, 指定基本组为tom,附加组为jack

image.png image.png
上一篇下一篇

猜你喜欢

热点阅读