文件管理,命令别名,通配符,重定向以及文本处理工具(wc,cut,sort,uniq),用户和组管理,权限管理等(第4天)

1:cp命令详解

cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...


cp SRC DEST
            SRC是文件:
                如果目标不存在:新建DEST,并将SRC中内容填充至DEST中;
                如果目标存在:
                    如果DEST是文件:将SRC中的内容覆盖至DEST中;此时建议为cp命令使用-i选项;
                    如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中;


cp SRC... DEST
            SRC...:多个文件
                DEST必须存在,且为目录,其它情形均会出错;

cp SRC DEST
            SRC是目录:
                此时使用选项:-r
                如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;
                如果DEST存在:
                    如果DEST是文件:报错
                    如果DEST是目录:


常用选项:
            -i:交互式
            -r, -R: 递归复制目录及内部的所有内容;
            -a: 归档,相当于-dR --preserve=all
                -d:相当于 --no-dereference --preserve=links
                --preserve[=ATTR_LIST]
                    mode: 权限
                    ownership: 属主属组
                    timestamps:时间戳
                    links:链接属性
                    xattr:扩展属性
                    context:安全上下文
                    all:全部属性

            -p: 相当于 --preserv=mode,ownership,timestamps
            -v: --verbose
            -f: --force

2:mv命令详解
    mv: move,移动文件
       mv [OPTION]... [-T] SOURCE DEST
       mv [OPTION]... SOURCE... DIRECTORY
       mv [OPTION]... -t DIRECTORY SOURCE...
     
       常用选项:
        -i: 交互式
        -f: 强制

3:rm命令详解
     rm [OPTION]... FILE...

    常用选项:
    -i: 交互式
    -f: 强制删除
    -r: 递归

    rm -rf

4:文本编辑器nano详解
全屏幕编辑器

5:bash的基础特性(2)
1、命令别名(alias):通过alias命令实现
    (1) alias  显示当前shell进程所有可用的命令别名
    (2) alias NAME='VALUE'   定义别名NAME,其相当于执行命令VALUE;
    注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
        Note: 编辑配置给出的新配置不会立即生效;
        bash进程重新读取配置文件有如下两种方法:
source /path/to/config_file
.  /path/to/config_file

撤消别名:unalias
unalias [-a] name [name ...]

Note: 如果别名同原命令的名称,则如果要执行原命令,可使用"\COMMAND";

2、glob (globbing):bash中用于实现文件名“通配”
通配符有:*, ?, []
*  表示任意长度的任意字符
a*b   表示头尾字符分别是a和b,中间跟任意长度的任意字符,可以表示为aab, ab, a123b等等,但是abc这种就不匹配了

?  表示任意单个字符
a?b  表示a后面跟任意一个字符,该字符后面跟b,aab是符合的,ab, a12b, abc就不符合了

[]   表示匹配指定范围内的任意单个字符
[0-9]
        [a-z]  不区分字符大小写
        [abcedfg]

[^]   表示匹配指定范围外的任意单个字符
        [^0-9]

专用字符集合:
[:digit:]      表示任意数字,相当于0-9,所以[[:digit:]]等于[0-9]
[:lower:]    表示任意小写字母
[:upper:]   表示任意大写字母
[:alpha:]    表示任意大小写字母
[:alnum:]   表示任意数字或字母
[:space:]
[:punct:]   表示标点符号
[:graph:]   表示图形
[:print:]     表示可打印字符

练习:
1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录;
# ls -d /var/l*[0-9]*[[:lower:]]

2、显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;
# ls -d /etc/[0-9]*[^0-9]

3、显示/etc/目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录;
# ls /etc/[^[:alpha:]][[:alpha:]]*

4、复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/mageedu目录中;
# cp -a /etc/m*[^0-9] /tmp/mageedu

5、复制/etc目录下,所有以.d结尾的文件或目录至/tmp/magedu.com目录中;
# cp -a /etc/*.d /tmp/magedu.com

6、复制/etc目录下,所以有.conf结尾,且以m,n,r,p开头的文件或目至/tmp/mageedu.com目录中;
# cp -a /etc/[mnrp]*.conf  /tmp/mageedu.com

3、bash的快捷键
Ctrl+l   清屏,相当于clear命令;
Ctrl+a  跳转至命令开始处;
Ctrl+e  跳转至命令结尾处;
Ctrl+c  取消命令的执行;
Ctrl+u  删除命令行首至光标所在处的所有内容;
Ctrl+k  删除光标所在处至命令行尾部的所有内容;


4、bash的的I/O重定向及管道
程序是由指令和数据组成的,程序就是用指令处理数据。那么数据哪里来,处理完成之后,数据要输出到哪里?程序首先会从程序中的变量,列表或者文件中读取数据,然后利用指令处理好数据,之后将数据显示到屏幕中或者是写入到文件保存起来,也有可能是打印出来。这里的读入数据在计算机中成为Input,输出数据成为Output。

任何打开的文件都有一个fd: file descriptor (文件描述符)。为了便于管理,linux中:
标准输入:keyborad, 用数字0表示
标准输出:monitor, 用数字1表示
标准错误输出:monitor, 用数字2表示

I/O重定向:改变标准位置
输出重定向:COMMAND > NEW_POS, COMMAND >> NEW_POS
>      表示覆盖重定向,目标文件中的原有内容会被清除;
>>   表示追加重定向,新内容会追加至目标文件尾部;

# set -C  禁止将内容覆盖输出至已有文件中;
强制覆盖  >|
# set +C

   2>      表示覆盖重定向错误输出数据流;
   2>>   表示追加重定向错误输出数据流;例子:cat /etc/issueee  2>> /tmp/err.txt

   标准输出和错误输出各自定向至不同位置:
   COMMAND > /path/to/file.out 2> /path/to/error.out
   例子: cat /etc/fstab > /tmp/fstab.out  2> /tmp/fstab.err

   合并标准输出和标准错误输出为同一个数据流进行重定向:
   &>    覆盖重定向
   &>>  追加重定向
 
   COMMAND > /path/to/file.out 2> &1
   COMMAND >> /path/to/file.out 2>> &1

   例子:echo  "$PATH"  &> /tmp/path.out

输入重定向:<
tr命令:转换或删除数据,默认是从标准输入读取数据
tr [OPTION]... SET1 [SET2]
例子 :  tr  'a-z'  'A-Z'  <  /etc/fstab

HERE Documentation:<<
# cat << EOF     遇到EOF则停止
# cat > /path/to/somefile << EOF

管道:
COMMAND1 | COMMAND2 | COMMAND3 |...
Note:最后一个命令会在当前shell进程的子shell进程中执行;
例子:echo  "$PATH"  |  tr "a-z" "A-Z"
          echo  "$PATH"  |  tr "a-z" "A-Z"  |  tr  -d  "U"
          cat  /etc/rc.d/rc.sysinit  |  less

tee命令:从标准输入读取数据,写到标准输出和文件
tee [OPTION]... [FILE]...
例子:echo "$PATH" |  tr "a-z" "A-Z" | tee /tmp/tee.out


练习:
1、将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;
#  head -5 /etc/passwd | tr 'a-z' 'A-Z' | tee /tmp/passwd.out

2、将登录至将前系统上用户信息中的后3行的信息转换为大写后保存至/tmp/who.out文件中;
# who | tail -n 3 | tr 'a-z' 'A-Z' > /tmp/who.out

6:文本处理工具:wc, cut, sort, uniq
wc命令详解:
wc [OPTION]... [FILE]...
-l  统计行数   lines
-w 统计单词数 words
-c: 统计字节数 characters
例子:  ifconfig | wc -l

cut命令详解:
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符
-f FILEDS:
    #: 第#个字段
    #,#[,#]:离散的多个字段,例如1,3,6
  #-#:连续的多个字段, 例如1-6
    混合使用:1-3,7
--output-delimiter=STRING
例子: cut  -d':' -f1,7 /etc/passwd

sort命令详解:
sort [OPTION]... [FILE]...
-f: 忽略字符大小写
-r: 逆序
-t DELIMITER: 字段分隔符
-k #:以指定字段为标准进行排序
-n: 以数值大小进行排序
-u: uniq,排序后去重
例子:sort -t: -k3  -n /etc/passwd |  cut -d: -f3

uniq命令详解:
uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数;
-d: 仅显示重复过的行;
-u: 仅显示不曾重复的行;
Note: 连续且完全相同方为重复

练习:以冒号分隔,取出/etc/passwd文件的第6至第10行,并将这些信息按第3个字段的数值大小进行排序;最后仅显示的各自的第1个字段;

7:用户和组管理
资源分派:
Authentication:认证,通过用户名和密码,或者生物识别特征
Authorization:授权,授予某个用户一定的权限,不同等级的用户拥有不同的权限
Accouting:审计,对用户的合理权限做审计

Linux用户:Username/UID
管理员:root,0
普通用户:1-65535
      系统用户:1-499, 1-999 对守护进程获取资源进行权限分配;
      登录用户:500+, 1000+  交互式登录;

Linux组:Groupname/GID
管理员组:root, 0
普通组:
      系统组:1-499, 1-999
      普通组:500+, 1000+

Linux安全上下文:
      运行中的程序:进程 (process)
      以进程发起者的身份运行:
            root用户发起cat操作和tom用户发起cat操作能操作的资源是不一样的
      进程所能够访问的所有资源的权限取决于进程的发起者的身份;

Linux组的类别:(一个用户可以同时加入多个组)
      用户的基本组(主组):组名同用户名,且仅包含一个用户:私有组
      用户的附加组(额外组):

Linux用户和组相关的配置文件:
      /etc/passwd:用户及其属性信息(名称、UID、基本组ID等等);
      /etc/group:组及其属性信息;
      /etc/shadow:用户密码及其相关属性;
      /etc/gshadow:组密码及其相关属性;

/etc/passwd 配置文件:
name:password:UID:GID:GECOS:directory:shell
用户名:密码:UID:GID(用户的基本组ID):GECOS:主目录:默认shell

/etc/group配置文件:
group_name:password:GID:user_list
组名:组密码:GID:以当前组为附加组的用户列表(分隔符为逗号)

/etc/shadow配置文件:(man 5 shadow命令可以查看对shadow文件的帮助)
用户名:加密了的密码(哈希处理过的密码):最近一次更改密码的日期:密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段
加密机制:
      加密:明文--> 密文
      解密:密文--> 明文
      单向加密:提取数据指纹
            md5: message digest, 128bits
            sha1: secure hash algorithm, 160bits
            sha224: 224bits
            sha256: 256bits
            sha384: 384bits
            sha512: 512bits
      雪崩效应:初始的条件的微小改变,将会引起结果的巨大改变;定长输出:
      系统会将用户设置的密码加上salt,然后再哈希出密文
密码的复杂性策略:
1、使用数字、大写字母、小写字母及特殊字符中至少3种;
2、足够长;
3、使用随机密码;
4、定期更换;不要使用最近曾经使用过的密码;

用户和组相关的管理命令:
useradd命令详解:此命令用于创建用户
useradd [options] LOGIN
-u UID: 指定用户的uid,uid的范围是[UID_MIN, UID_MAX], UID_MIN, UID_MAX定义在/etc/login.defs文件中
-g GID:指明用户所属基本组,可为组名,也可以GID,必须事先存在;
-c "COMMENT":用户的注释信息;
-d /PATH/TO/HOME_DIR: 以指定的路径为家目录;
-s SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中;
-G GROUP1[,GROUP2,...[,GROUPN]]]:为用户指明附加组;组必须事先存在;
-r: 创建系统用户
      CentOS 6: ID<500
      CentOS 7: ID<1000
默认值设定:/etc/default/useradd文件中
useradd -D
-s SHELL
练习:创建用户gentoo,附加组为distro和linux,默认shell为/bin/csh,注释信息为"Gentoo Distribution";
   #groupadd distro
   #groupadd linux
   # useradd -G distro,linux -s /bin/tch -c "Gentoo Distribution" gentoo

groupadd命令详解:用于创建组
groupadd [OPTION]... group_name
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组;
      CentOS 6: ID<500
      CentOS 7: ID<1000

id命令详解:查看用户相关的ID信息
id [OPTION]... [USER]
-u: 只看UID
-g: 只看GID
-G: 只看Groups
-n: 显示为Name

su命令详解:switch user切换用户或以其它用户身份执行命令
su [OPTION]... [-] [USER [ARG]...]
切换用户的方式有如下两种:
      su UserName:非登录式切换,即不会读取目标用户的配置文件;
      su - UserName:登录式切换,会读取目标用户的配置文件;完全切换;
      Note:root su至其他用户无须密码;非root用户切换时需要密码;
su [-] UserName -c 'COMMAND'  表示用UserName的身份执行COMMAND这个命令,但是用户并没有切换过去
选项:
      -l:“su -l UserName”相当于“su - UserName”

usermod命令详解:用户属性修改:
usermod [OPTION] login
-u UID: 新UID
-g GID: 新基本组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append;
-s SHELL:新的默认SHELL;
-c 'COMMENT':新的注释信息;
-d HOME: 新的家目录;原有家目录中的文件不会同时移动至新的家目录;若要移动,则同时使用-m选项;
-l login_name: 新的名字;
-L: lock指定用户
-U: unlock指定用户
-e YYYY-MM-DD: 指明用户账号过期日期;
-f INACTIVE: 设定非活动期限;

passwd命令详解:给用户添加密码
passwd [OPTIONS] UserName: 修改指定用户的密码,仅root用户权限
passwd: 修改自己的密码;
常用选项:
-l: 锁定指定用户
-u: 解锁指定用户
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限,密码过期之后多少天之内还能登录;
--stdin:从标准输入接收用户密码;
例子  echo "PASSWORD" | passwd --stdin USERNAME
Note: /dev/null  数据黑洞文件(bit buckets)
          /dev/zero  吐0的文件

userdel命令详解:删除用户
userdel [OPTION]... login
-r: 删除用户家目录;

groupmod命令详解:组属性修改
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID;

groupdel命令详解:组删除
groupdel GROUP_NAME

gpasswd命令详解:组密码
gpasswd [OPTION] GROUP
-a user: 将user添加至指定组中;
-d user: 删除用户user的以当前组为组名的附加组
-A user1,user2,...: 设置有管理权限的用户列表

newgrp命令详解:临时切换用户的基本组
如果用户本不属于此组,则需要组密码;

chage命令详解:修改用户密码过期信息
chage [OPTION]... LOGIN
-d LAST_DAY
-E, --expiredate EXPIRE_DATE
-I, --inactive INACTIVE
-m, --mindays MIN_DAYS
-M, --maxdays MAX_DAYS
-W, --warndays WARN_DAYS

其它命令:chfn, chsh, finger

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

8:权限管理
文件的权限主要针对三类对象进行定义:
owner: 属主, u
group: 属组, g
other: 其他, o

每个文件针对每类访问者都定义了三种权限:
r: Readable
w: Writable
x: eXcutable

文件的可读,可写,可执行如下:
r: 可使用文件查看类工具获取其内容;
w: 可修改其内容;
x: 可以把此文件提请内核启动为一个进程;

目录的可读,可写,可执行如下:
r: 可以使用ls查看此目录中文件列表;
w: 可在此目录中创建文件,也可删除此目录中的文件;
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录;

---  000 0
--x  001 1
-w- 010 2
-wx 011 3
r--  100 4
r-x  101 5
rw- 110 6
rwx 111 7

chmod命令详解:修改文件权限,有3种方式:
chmod [OPTION]... OCTAL-MODE FILE...
-R: 递归修改权限
例子  chmod 755  /tmp/log.out
chmod [OPTION]... MODE[,MODE]... FILE...
      MODE:
      修改一类用户的所有权限(u代表属主,g代表属组,o代表其他用户,a代表所有):
            u=rwx
            g=rw
            o=r
            ug=--x
            a=x
            u=rwx,g=w
      修改一类用户某位或某些位权限
            u+x
            u-rwx
例子  chmod  a+x  /tmp/a.out
chmod [OPTION]... --reference=RFILE FILE...
参考RFILE文件的权限,将FILE的修改为同RFILE;

chown命令详解:修改文件的属主,有如下2种方法
chown [OPTION]... [OWNER][:[GROUP]] FILE...
用法:
      OWNER
      OWNER:GROUP
      :GROUP
Note: 命令中的冒号可用.替换;
-R: 递归
chown [OPTION]... --reference=RFILE FILE...

chgrp命令详解:修改文件的属组
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R: 递归


9:文件或目录创建时的遮罩码:umask
每个文件创建出来的时候的权限默认为666减去umask的值
      Note: 如果某类的用户的权限减得的结果中存在x权限,则将其权限+1
每个目录创建出来的时候的权限默认为777减去umask的值
umask: 查看
umask #: 设定

命令总结:chmod, chown, chgrp, umask

评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用