第三天内容:

1、linux目录及文件管理

2、linux文本工具及bash重定向

3、linux用户和组管理

4、linux用户和组管理进阶

回顾:

     文件类型:f,d,l,c,b,p,s

     文件timestamp  atime:最近一次访问时间,mtime:数据的改变,ctime:元数据的改变

     文本查看:cat,tac,more,less,head,tail

一、bash特性之命令别名和命令引用

        alias

        alias ALIAS=COMMAND(别名=命令)

        命令与命令同名时:

            绝对路径

            \command

            生效范围:命令行定义的别名,其生效范围为当前会话。

        unalias [ALIAS]

            -a:撤销所有别名

        注意:alias 可以在多个文件中定义,默认 ~/.bashrc

              如:alias c='cd' 后 source .bashrc ,c命令作为cd的别名生效,如果想取消别名在配置文件中删除是不生效的,必须unalias c 然后source .bashrc, 取消设置的别名。

        bash支持的引用:  ''   ""   ``:引用一个命令的执行结果$() 

二、bash特性之文件名通配(globbing)

        * :任意长度的任意字符  p*d, pad  pbd   pd  *ab*c

        ?:匹配任意单字符

        [ ]:匹配指定范围内的任意单字符 [abc],[a-z],[0-9]  不区分大小写,如:a[0-9a-z]bbb

        [^]:匹配指定范围以外的任意字符  -如 找a.b    ls a[^0-9a-z]b

          字符集合:

                [:space:]: 所有空白字符,任意一个空白字符[[:space:]]    

                            如匹配 a b 则   a[[:space:]]b

                [:punct:]:所有标点符号  如匹配a.b 则a[[:punct:]]b

                [:lower:]:所有小写字母

                [:upper:]:所有大写字母

                [:alpha:]:所有的字母

                [:digit:]:所有的数字 相当于0-9

                [:alnum:]:所有的字母和数字      

                            如匹配所有字母和数字以外的 a[^[:alnum]]b   则 a b  a.b

 

练习:1、显示/var目录下所有以1开头,以一个小写字母结尾,且中间出现一位数字的文件或者目录

       #ls /var/1*[[:digit]]*[[:lower]]           

      2、显示/etc/目录下,一任意一位数字开头,且以非数字结尾的文件或目录

       #ls -d /etc/[[:digit]]*[^[:digit]]     

      3、现在/etc/目录下,以非字母开头,后面跟了一个字母及其他任意长度字符的文件或目录

       #ls -d /etc/[^[a-z]][a-z]*

      4、在/tmp/mytest目录中创建以testdir打头,后跟当前日期和时间的空目录,

      形如,testdir-14-07-03-09-15-33; #mkdir -pv /tmp/mytest/testdir-$(date +%F-%H-%M-%S)

    echo 命令

三、文件管理类命令

    复制:cp

    移动:mv

    删除:rm

    cp: 文件复制

         cp SRC DEST

            如果DEST不存在,复制SRC为DEST

            如果DEST存在,若DEST是文件,则覆盖;若DEST是目录,将SRC复制进DEST中,并保持原名

         cp SRC… DEST

            如果SRC不止一个,则DEST必须的是目录

         cp SRC DEST

            SRC是目录:

                可使用-r选项:

        练习:复制/etc目录下,所有以P开头,以非数字结尾的文件或目录至/tpm/mytest1目录;

                #mkdir /tmp/mytest1  #cp -r /etc/p*[^[:digit:]] /tmp/mytest1

              复制/etc/目录下,所有以.d结尾的文件或目录至/tmp/mytest2目录;

                #mkdir /tmp/mytest2  #cp -r /etc/*.d /tmp/mytest2

              复制/etc/目录下所有以1或m或n开头,以.conf结尾的文件至/tmp/mytest3目录

                #mkdir /tmp/mytest3  #cp -r /etc/[1mn]*.conf /tmp/mytest3

             -P:复制符号链接文件本身,而非其指向的目标文件

                --preserve [=ATTR_LIST]

                  mode,ownership,timestamps

                  mode:权限  ownership:属主,属组   timestamps:时间戳

                  -p:相当于 --preserve=mode,ownership,timestamps

             -a:相当于-dR --preserve=all  

                归档(archive)或备份

             -i:交互式

             -f: force 强制

    mv命令:

          mv SRC… DEST

          -i :交互式复制

    rm命令:

          alias rm='rm -i'管理员默认,普通用户没有。 \rm file 默认不带-i。

          -r 删除目录 --no-preserve-root / 删除根目录

    rmdir和rm的区别:

        1、rmdir 用来删除空目录,

            其选项有-v显示删除过程,-p递归删除该目录下为空的子目录(子目录必须空)

        2、rm 用来删除文件或者目录,如果目录不为空,配合选项也能删除非空目录

            其选项有-v显示删除过程,-f 强制删除,不提示所删除的目录是否存在;

            -r 指定删除该目录下的所有文件,要删除一个非空的目录使用-rf组合即可。

            

用户可以用rm命令删除不需要的文件。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是断开了链接,原文件保持不变。

rm命令的一般形式为:rm [选项]... 目录... 删除指定的<文件>(即解除链接)。

-d      --directory    删除可能仍有数据的目录 (只限超级用户)

-f      --force          略过不存在的文件,不显示任何信息
-i      --interactive 进行任何删除操作前必须先确认
-r/R --recursive    同时删除该目录下的所有目录层
-v      --verbose     详细显示进行的步骤
          --help            显示此帮助信息并离开
         --version      显示版本信息并离开

要删除第一个字符为‘-’的文件 (例如‘-foo’),请使用以下其中一种方法:

rm -- -foo

rm ./-foo

    文本编辑命令:nano全屏编辑器

    文本处理类命令:

    wc:word count ,查看文本有多少行,文本统计工具,-l 仅显示行,-w 单词数,-c字节数

        如:wc /etc/inittab 26 149 884 /etc/inittab 说明inittab文件有26行149单词884字节。

    cut:剪切某文件的行信息

        -d 指定分隔符 

        -f 指定要显示的字段   m:第m列     m,n:第m和n列     m-n:第m到n列

    sort:排序  如:sort /etc/passwd  

        -f:忽律字符大小写   

        -t:指定分隔符  

        -k:指定分隔之后要进行排序比较的字段   如:sort -t: -k3 /etc/passwd

        -n:以数值大小进行排序   

        -u:排序后去重

    uniq:去重  如 sort hi.txt | uniq

        -d:仅显示重复的行   -u:只显示未曾重复的行  -c:显示每一行出现的次数

练习:1、显示当前系统上每个用户的Shell   #cut -d: -f1,7 /etc/passwd

      2、显示当前系统上所有用户使用的各种shell  #cut -d: -f7 /etc/passwd | sort -u

      3、取车/etc/inittab文件的第7行 #head -n 7 /etc/intittab | tail -n 1

      4、取出/etc/passwd文件中第7个用户的用户名 #head -n 7 /etc/passwd | tail -1 | cut -f 1

      5、统计etc目录下以大小P开头的文件的个数  #ls -d /etc/[Pp]* | wc -l

四、bash特性之输入、输出重定向和管道

        程序:

            数据来源:输入流

            数据目标:输出流

        标准输入,标准输出,标准错误输出

        文件:文件系统(内核)标准输入:0(键盘) ,标准输出:1,错误输出:2(显示器)

        重定向:改变其标准位置

        输出重定向:command > position   覆盖输出

                    command >> position  追加输出

        错误重定向:command 2> position  覆盖输出

                    command 2>> position 追加输出

        合并重定向:command &> position  不管对错都会写入文件中

                    command > position 2>&1 标准输出和标准错误输出一起定向到一个文件中

        分别重定向:command > position 2> position  正确和错误输出在不同的文件中。

        

        输入重定向:command < position

        文本处理命令:tr   tr 'test1' 'test2'   

                      -d:删除指定字符集合中的所有字符

        如:tr 'a-z' 'A-Z'< /etc/issue  将issue下的小写字母都改成大写字母。

        << 此处文档,如:cat > /tmp/doc.txt <<EOF ,(EOF文件结束符)。#cat <<END 屏幕显示

        多道输出 -- tee命令,即显示屏幕又重定向,集合管道使用。

        如cat /etc/issue |tee /tmp/issue3.txt # 重定向至issue.txt并且在屏幕显示。

五、 /dev/null:丢弃数据的设备文件(数据黑洞)

     ls /var > /dev/null    echo $? 获取其执行结果的。0 表示正确,1-255 表示错误。

      bash有个命令set 能设定bash的好多功能。

        例如:cp /etc/issue /tmp/  ,cat /etc/fstab > /tmp/issue ,这样就会覆盖issue文件

        而运行 set -C 再 cat /etc/fstab > /tmp/issue 就出现提示错误,不能覆盖,set +C还原。         或者 cat /etc/fstab >| /tmp/issue  也可以覆盖。

六、用户和组

    DOS单用户系统,没有用户的说法,用户是多用户系统发展的结果。

    User ID=UID   Group ID=GID 用户名通过名称解析变成UID。 

        用户和组是实现分派资源的核心要素,

        用户分为三类 :

             管理员:  0 交互式登陆

             系统用户  1-499   无需登陆只用来运行后台程序(daemon守护进程),无交互式登陆。

             普通用户  500+,组也分为三类和用户概念相同,交互式登陆。

       密码是一种验证机制,验证用户身份的凭证。

       权限是分配资源的一种机制,用于规范用户使用资源的权力。文件权限(rwx)

              文件;r: 查看文件内容,w:修改文件内容,x:把此文件启动为一个运行的程序(进程)

              目录:r:可以使用ls命令查看目录中的文件名列表

                        w:可以在目录中创建或删除文件

                        x:可以cd 到此目录中,以及使用ls -l 显示目录中文件的元数据信息。

        用户访问文件是的权限匹配模型:

                    1、检查运行此程序的属主是否与其正在访问的文件的属主相同?

                        如果相同,则也属主的权限访问;否则

                    2、检查运行此进程的属主是否属于此文件的属组?

                        如果是,则以属组的权限访问;否则 以其他用户的身份访问。

        用户管理:linux中和用户组有关的文件

                        /etc/passwd :用户的账户信息

                        /etc/shadow:用户密码和相关的账户设定

                        /etc/group 组的账号信息

                        /etc/gshadow 组密码信息

                /etc/passwd文件:

                account:password:UID:GID:GECOS:directory:shell

                登陆名:密码点位符:UID:GID:注释信息:家目录:用户的默认shell      

         /etc/shells 下显示系统可用的安全shell。

        

        useradd:添加用户如果没有指定用户组,系统会自动创建一个和用户名相同的组作为添加用户的基本组。用户可以加入多个组(基本组、附加组)

            -u UID , -g GID , -G 附加组 , -d 指定家目录,如果目录存在会有警告信息,-c 'comment':注释信息,

            -s 给用户指定shell信息,如: useradd -s /bin/tcsh user

            -m 强制给用户创建家目录  -M 不给用户创建家目录 -r 创建非系统登陆用户(系统用户一般不创建家目录)

        groupadd:

            -g:GID,-r : 系统组

    passwd :普通用户只能修改自己的密码,管理员可以passwd [username]给他其他用户设定密码。

            密码复杂度策略(数字、大写、小写和特殊字符至少三种)最短长度5位,不易使用易猜测             的密码,定期修改,且不要使用近期使用过的密码。

    加密方式:

            对称加密:加密和解密使用同一个密钥,密钥分发困难

            公钥加密:加密和解密使用一对密钥,公钥公开的,私钥保密的。如:Bob用Alice公开的公钥加密后传输给Alice,Alice用自己的私钥解密----这是公钥加密的过程。那么Bob在获取Alice公钥的时候是否是安全的,途中被篡改了怎么办?也就是如何能获取到对方安全的公钥呢? 这就涉及到CA(证书颁发机构)。Alice把证书发给Bob,而不是公钥,BOb去验证Alice的证书是否合法渠道,是否安全(证书中包含Alice的公钥),若合法、安全则用证书中的公钥加密,若不合法,拒绝此证书。(其中还涉及证书的验证技术,这一套机制成为PKI机制)。

            单向加密:能加密不能解密,提取数据唯一特征码。

                1.定长输出 2.不可逆 3.雪崩效益

    passwd --stdin ,-l(lock),-u (unlock)

    /etc/shadow文件格式

    用户名,加密的密码,最近一次修改密码的时间,密码最短使用期限,密码最长使用期限,面膜过期警告区间,密码非活动期限,账号过期期限,保留区域

    userdel  userdel [options] username    -r:删除用户及其家目录

    groupdel groupdel groupname 

    usermod : usermod [options] username

            -u uid ,-g gid , -G 修改用户的附加组,此选项通过跟-a一起使用以追加方式修改附加组

                如:usermod -a -G mygrp,testgrp user6

            -c comment 修改注释信息,-d /path/to/somewhere 修改用户家目录同时使用-m 

            -s shell ,-l login_name 修改用户名,-L 锁定用户,-U 解锁用户

    chsh username 修改用户的shell

    chfn username 修改用户的注释信息

    chage : chage [options] username

    groupmod:修改组信息 -g gid ,-n newgrpname ,给组设定密码 gpasswd

        

查看用户信息:

    id user ,who ,whoami,finger

切换用户:su : switch user

     

      练习:创建用户mandriva,id为2200,基本组为disrto,组ID为3300,附加组为peguin

            # groupadd -g 3300 disrto 

            # groupadd -g peguin

            # useradd -u 2200 -g disrto -G peguin mandriva

            创建用户gentoo 其全名为Gentoo,默认shell为/bin/tcsh

            # useradd -c "Gentoo" -s /bin/tcsh gentoo

            修改mandriva的UID为4400,基本组为linux,附加组为distro和gentoo

            #usermod -u 4400 -g linux -G distro,gentoo mandriva

            给gentoo添加密码,设定密码最短使用期限为2天,最长60天,警告3天,非活动期限为7天

            # echo 'gentoo'| passwd --stdin gentoo 或者 # passwd gentoo

            # chage