精华内容
下载资源
问答
  • MySQL索引的创建使用

    万次阅读 多人点赞 2018-08-06 18:49:59
    声明:本人主要简单示例MySQL中的单列索引、组合索引的创建使用。 索引的创建: 建表时创建: CREATE TABLE 表名( 字段名 数据类型 [完整性约束条件], ……, [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY ...

    索引有很多,且按不同的分类方式,又有很多种分类。不同的数据库,对索引的支持情况也不尽相同。

    声明:本人主要简单示例MySQL中的单列索引组合索引的创建与使用。


    索引的创建

    建表时创建

    CREATE TABLE 表名(

    字段名 数据类型 [完整性约束条件],

           ……,

    [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY

    [索引名](字段名1 [(长度)] [ASC | DESC]) [USING 索引方法]

    );

    说明:

    • UNIQUE:可选。表示索引为唯一性索引。
    • FULLTEXT:可选。表示索引为全文索引。
    • SPATIAL:可选。表示索引为空间索引。
    • INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是    一样的。
    • 索引名:可选。给创建的索引取一个新名称。
    • 字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。
    • 长度:可选。指索引的长度,必须是字符串类型才可以使用。
    • ASC:可选。表示升序排列。
    • DESC:可选。表示降序排列。

    注:索引方法默认使用B+TREE。

    单列索引(示例):

    CREATE TABLE projectfile (
    	id INT AUTO_INCREMENT COMMENT '附件id',
    	fileuploadercode VARCHAR(128) COMMENT '附件上传者code',
    	projectid INT COMMENT '项目id;此列受project表中的id列约束',
    	filename VARCHAR (512) COMMENT '附件名',
    	fileurl VARCHAR (512) COMMENT '附件下载地址',
    	filesize BIGINT COMMENT '附件大小,单位Byte',
    	-- 主键本身也是一种索引(注:也可以在上面的创建字段时使该字段主键自增)
            PRIMARY KEY (id),
    	-- 主外键约束(注:project表中的id字段约束了此表中的projectid字段)
    	FOREIGN KEY (projectid) REFERENCES project (id),
    	-- 给projectid字段创建了唯一索引(注:也可以在上面的创建字段时使用unique来创建唯一索引)
    	UNIQUE INDEX (projectid),
    	-- 给fileuploadercode字段创建普通索引
    	INDEX (fileuploadercode)
    	-- 指定使用INNODB存储引擎(该引擎支持事务)、utf8字符编码
    ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT '项目附件表';

    注:这里只为示例如何创建索引,其他的合理性之类的先放一边。

    组合索引(示例):

    CREATE TABLE projectfile (
    	id INT AUTO_INCREMENT COMMENT '附件id',
    	fileuploadercode VARCHAR(128) COMMENT '附件上传者code',
    	projectid INT COMMENT '项目id;此列受project表中的id列约束',
    	filename VARCHAR (512) COMMENT '附件名',
    	fileurl VARCHAR (512) COMMENT '附件下载地址',
    	filesize BIGINT COMMENT '附件大小,单位Byte',
    	-- 主键本身也是一种索引(注:也可以在上面的创建字段时使该字段主键自增)
            PRIMARY KEY (id),
            -- 创建组合索引
    	INDEX (fileuploadercode,projectid)
    	-- 指定使用INNODB存储引擎(该引擎支持事务)、utf8字符编码
    ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT '项目附件表';

    建表后创建

    ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL]  INDEX | KEY  [索引名] (字段名1 [(长度)] [ASC | DESC]) [USING 索引方法]

    CREATE  [UNIQUE | FULLTEXT | SPATIAL]  INDEX  索引名 ON  表名(字段名) [USING 索引方法]

    示例一:

    -- 假设建表时fileuploadercode字段没创建索引(注:同一个字段可以创建多个索引,但一般情况下意义不大)
    -- 给projectfile表中的fileuploadercode创建索引
    ALTER TABLE projectfile ADD UNIQUE INDEX (fileuploadercode);

    示例二:

    ALTER TABLE projectfile ADD INDEX (fileuploadercode, projectid);

    示例三:

    -- 将id列设置为主键
    ALTER TABLE index_demo ADD PRIMARY KEY(id) ;
    -- 将id列设置为自增
    ALTER TABLE index_demo MODIFY id INT auto_increment;  

    查看已创建的索引

    show index from 表名;

    提示:我们也可以直接使用工具查看

    示例:


    索引的删除

    DROP INDEX 索引名 ON 表名

    ALTER TABLE 表名 DROP INDEX 索引名

    示例一:

    drop index fileuploadercode1 on projectfile;

    示例二:

    alter table projectfile drop index s2123;

    查看SQL语句对索引的使用情况(即:查询SQL的查询执行计划QEP)

    在select语句前加上EXPLAIN即可。

    示例:

    EXPLAIN SELECT * FROM `index_demo` ii WHERE ii.e_name = 'Jane';

    分析该SQL的性能为:

    提示:我们也可以使用SQL工具查看,如:navicat中的“解释”选项即可查看。

    说明:

    id:SELECT识别符。这是SELECT的查询序列号。

    select_type:SELECT类型。

    1. SIMPLE: 简单SELECT(不使用UNION或子查询)
    2. PRIMARY: 最外面的SELECT
    3. UNION:UNION中的第二个或后面的SELECT语句
    4. DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询
    5. UNION RESULT:UNION的结果
    6. SUBQUERY:子查询中的第一个SELECT
    7. DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询
    8. DERIVED:导出表的SELECT(FROM子句的子查询)

    table:表名

    type:联接类型。是SQL性能的非常重要的一个指标,结果值从好到坏依次是:system > const > eq_ref > ref
                > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。
                一般来说,得保证查询至少达到range级别。

    1. system:表仅有一行(=系统表)。这是const联接类型的一个特例。
    2. const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const用于用常数值比较PRIMARY KEY或UNIQUE索引的所有部分时。
    3. eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY。eq_ref可以用于使用= 操作符比较的带索引的列。比较值可以为常量或一个使用在该表前面所读取的表的列的表达式。
    4. ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。ref可以用于使用=或<=>操作符的带索引的列。
    5. ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。
    6. index_merge:该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。
    7. unique_subquery:该类型替换了下面形式的IN子查询的ref:value IN (SELECT primary_key FROMsingle_table WHERE some_expr);unique_subquery是一个索引查找函数,可以完全替换子查询,效率更高。
    8. index_subquery:该联接类型类似于unique_subquery。可以替换IN子查询,但只适合下列形式的子查询中的非唯一索引:value IN (SELECT key_column FROM single_table WHERE some_expr)
    9. range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。key_len包含所使用索引的最长关键元素。在该类型中ref列为NULL。当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range
    10. index:该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。
    11. all:对于每个来自于先前的表的行组合,进行完整的表扫描。如果表是第一个没标记const的表,这通常不好,并且通常在它情况下很差。通常可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常数值或列值被检索出。

    possible_keys:possible_keys列指出MySQL能使用哪个索引在该表中找到行。注意,该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。

    key:key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

    key_len:key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。注意通过key_len值我们可以确定MySQL将实际使用一个多部关键字的几个部分。

    ref:ref列显示使用哪个列或常数与key一起从表中选择行。

    rows:rows列显示MySQL认为它执行查询时必须检查的行数。

    Extra:该列包含MySQL解决查询的详细信息。

    1. Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。
    2. Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。
    3. range checked for each record (index map: #):MySQL没有发现好的可以使用的索引,但发现如果来自前面的表的列值已知,可能部分索引可以使用。对前面的表的每个行组合,MySQL检查是否可以使用range或index_merge访问方法来索取行。
    4. Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行。
    5. Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。当查询只使用作为单一索引一部分的列时,可以使用该策略。
    6. Using temporary:为了解决查询,MySQL需要创建一个临时表来容纳结果。典型情况如查询包含可以按不同情况列出列的GROUP BY和ORDER BY子句时。
    7. Using where:WHERE子句用于限制哪一个行匹配下一个表或发送到客户。除非你专门从表中索取或检查所有行,如果Extra值不为Using where并且表联接类型为ALL或index,查询可能会有一些错误。
    8. Using sort_union(...), Using union(...), Using intersect(...):这些函数说明如何为index_merge联接类型合并索引扫描。
    9. Using index for group-by:类似于访问表的Using index方式,Using index for group-by表示MySQL发现了一个索引,可以用来查询GROUP BY或DISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。并且,按最有效的方式使用索引,以便对于每个组,只读取少量索引条目。

    单列索引的使用

    准备工作

    给id加主键索引:

    再分别给name、city、country、address加上普通索引:

    注:以上五个索引都是单列索引。

    使用情况

    只涉及到其中的一个字段时,都能使用到索引(以e_name为例):

     

    注:模糊查询时,%如果在前面,那么不会使用索引。

    涉及到多个索引字段时,如果这些索引字段中,存在主键索引,那么只会使用该索引(即:MYSQL优化器会选出并先执行最“严”的索引):

    提示:possible_key中,只是SQL语句里涉及到的索引;key中才是实际上执行查询操作时使用到了的索引。

    涉及到多个索引字段时,如果这些索引字段中,不存在主键索引的话,那么就会使用该使用的索引(注:如果通过其中的部分索引就能准确定位的话,那么其余的索引就不再被使用):

     

    注:多个索引时,先使用哪个索引后使用哪个索引,是由MySQL的优化器经过一些列计算后作出的抉择

    当对索引字段进行 >, <>= <=not inbetween …… and ……函数(索引字段)like模糊查询%在字段前时不会使用该索引

    注:这里对e_age字段进行了 “<” ,所以实际查询时,并没有使用e_age的索引。

    提示:在实际使用时,如果涉及到多列,我们一般都不会将这些列一 一创建为单列索引,而是将这些列创建为组合索引


    组合索引的使用

    最左原则

           假设组合索引为:a,b,c的话;那么当SQL中对应有:aa,ba,b,c的时候,可称为完全满足最左原则;当SQL中查询条件对应只有a,c的时候,可称为部分满足最左原则;当SQL中没有a的时候,可称为不满足最左原则

    注:MySQL5.7开始,会自动优化,如:会把c,b,a优化为a,b,c使之完全遵循最左原则;会把c,a优化为a,c使之部
           分遵循最左原则
    。即:SQL语句中的对应条件的先后顺序无关。

    准备工作

    创建了组合索引:e_name,e_age,e_country,e_city

    使用情况

    完全满足最左原则

    注:与条件的先后无关(这是因为MYSQL5.7开始,对索引全排列有优化,会自动优化为按组合索引的顺序进行查询)
           即:下面这样的话,也是会完整的走组合索引的:

    部分满足最左原则

    注:此SQL中,只有e_name和e_country满足部分最左原则(e_name满足),所以到e_name字段时会走组合所以,但是
           只会走到e_name那里,到e_country时就不会使用组合索引了。

    不满足最左原则

    满足(部分满足)最左原则的字段里,有字段不满足“索引”自身的使用规范

    说明:如果SQL语句里的字段里,满足了最左原则,但是不满足“索引”自身的使用规范,那么组合索引走到这里之后,
               不会再往下走了。

    如图所示:由于e_age字段使用了“>”符号,不符合“索引”自身的使用规范,那么当“e_name”走完组合索引后,
                      走到“e_age”时,该字段及其后面的字段不会再走组合索引了。


    【补充】使用组合索引时,不遵循最左原则仍然会走索引的特殊种情况

    相关概念

    聚集索引与非聚集索引

           每个InnoDB表具有一个特殊的索引称为聚簇索引(也叫聚集索引,聚类索引,簇集索引)。如果表上定义有主键,该主键索引就是聚簇索引。如果未定义主键,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚簇索引。如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚簇索引。

           表中的聚簇索引(clustered index )就是一级索引,除此之外,表上的其他非聚簇索引都是二级索引,又叫辅助索引(secondary indexes)。

    回表

            当二级索引无法直接查询到(SQL中select需要的所有)列的数据时,会通过二级索引查询到聚簇索引(即:一级索引)后,再根据(聚集索引)查询到(二级索引中无法提供)的数据,这种通过二级索引查询出一级索引,再通过一级索引查询(二级索引中无法提供的)数据的过程,就叫做回表。

    当无需回表时,不遵循最左原则也是会走组合索引

    如,现有表:

    id是主键,其余三个字段组成联合索引:

    当不需要进行回表时,即便我们的SQL不满足组合索引最左原则,也会走组合索引的,如:

            这里where后直接是gender时, 是不遵循组合索引的最左原则的,但是查询计划显示使用了索引的。这是因为: 对这张表进行select *,相当于进行select id,name,age,gender,其中,id是主键(一级索引),name、age、gender是组合索引(二级索引),这里查询时,能直接从索引中拿到想要查询的所有列的数据,是不需要回表查询的,所以这里哪怕sql写法上不遵循最左原则,但是仍然是会走索引的。

    如果这个时候,我们加一个普通的motto字段:

     

    使用相同的SQL进行查询,可看到:

     

            此时进行select *,相当于进行select id,name,age,gender,motto,其中motto字段是从索引(一级索引、二级索引)里面获取不到数据的,是肯定需要回表的。而查询条件又不遵循最左原则,所以不会走组合索引。

    注:其它情况下,只有(完全或部分)遵循了最左原则,才会走组合索引


    ^_^ 如有不当之处,欢迎指正

    ^_^ 参考链接
                  https://www.cnblogs.com/DreamDrive/p/7752960.html
                  https://www.cnblogs.com/tommy-huang/p/4317305.html
                  https://blog.csdn.net/linjpg/article/details/56054994
                  https://www.jb51.net/article/118371.html

                  https://www.csdn.net/gather_2a/MtTaMgwsNzY0OS1ibG9n.html

    ^_^ 如涉及侵权问题,请及时联系我

    ^_^ 本文已经被收录进《程序员成长笔记(二)》,笔者JustryDeng

    展开全文
  • Linux中如何使用附属属组创建文件

    千次阅读 2015-10-26 10:49:07
    [oracle@lmsingle liming3]$ id uid=500(oracle) gid=500(oinstall) groups=...oracle用户,属是oinstall,附属属是dba,随便创建文件,文件属是oinstall [oracle@lmsingle liming3]$ ll total 0 -rw-r--r-- 1 o
    [oracle@lmsingle liming3]$ id
    uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)
    

    oracle用户,属组是oinstall,附属属组是dba,随便创建文件,文件属组是oinstall

    [oracle@lmsingle liming3]$ ll
    total 0
    -rw-r--r-- 1 oracle oinstall 0 Oct 26 10:41 test3.txt
    

    使某一个文件夹下的文件创建属组默认为dba的方法:

    [oracle@lmsingle liming]$ mkdir MingLee
    [oracle@lmsingle liming]$ chgrp dba MingLee/
    [oracle@lmsingle liming]$ chmod g+s MingLee/
    [oracle@lmsingle liming]$ cd MingLee/
    [oracle@lmsingle MingLee]$ touch test4.txt
    [oracle@lmsingle MingLee]$ ll
    total 0
    -rw-r--r-- 1 oracle dba 0 Oct 26 10:47 test4.txt
    


    展开全文
  • 创建组groupaddIn this tutorial, we will learn how to create a Group in Linux using groupadd command. 在本教程中,我们将学习如何使用groupadd命令在Linux中创建一个组。 什么是Linux组? (What is a Linux ...

    创建组groupadd

    In this tutorial, we will learn how to create a Group in Linux using groupadd command.

    在本教程中,我们将学习如何使用groupadd命令在Linux中创建一个组。

    什么是Linux组? (What is a Linux Group?)

    A Linux group is used to manage the privileges of a user. We can define a set of privileges to a group such as read, write access to a specific resource. Then all the users in the group automatically gets the access to that resource.

    Linux组用于管理用户的特权。 我们可以为组定义一组特权,例如对特定资源的读,写访问。 然后,该组中的所有用户将自动获得对该资源的访问权限。

    In simple terms, a group is a collection of users. It helps us in granting privileges to a group of users quickly. For example, “sudo” is a group and any user in that group automatically gets the superuser privileges.

    简而言之,组是用户的集合。 它有助于我们快速向一组用户授予特权。 例如,“ sudo ”是一个组,该组中的任何用户都会自动获得超级用户特权。

    如何在Linux中创建组? (How to Create a Group in Linux?)

    Linux groupadd command is used to create a group in Linux. It’s a linux specific command and it can be used across all the distributions such as Ubuntu, CentOS, and Debian.

    Linux groupadd命令用于在Linux中创建一个组。 这是特定于Linux的命令,可以在所有发行版(例如Ubuntu,CentOS和Debian)中使用。

    Linux groupadd命令语法 (Linux groupadd Command Syntax)

    The groupadd command syntax is:

    groupadd命令的语法为:

    
    groupadd [options] GROUP
    

    Let’s look at some examples to understand the usage of groupadd command and its various options.

    让我们看一些示例,以了解groupadd命令及其各种选项的用法。

    Linux创建组 (Linux Create Group)

    The groupadd command can be run by root user or as a superuser using sudo privileges.

    groupadd命令可以由root用户或使用sudo特权的超级用户运行。

    
    root@localhost:~# groupadd test_users
    

    If the group is created, there won’t be any error or success message.

    如果创建了该组,则不会有任何错误或成功消息。

    The groups information is stored in /etc/group file. We can check this file for the newly created group information.

    组信息存储在/etc/group文件中。 我们可以在此文件中查看新创建的组信息。

    
    root@localhost:~# cat /etc/group | grep test_users
    test_users:x:1004:
    root@localhost:~#
    
    Linux Create Group
    Linux Create Group
    Linux创建组

    The number above denoted the group id, which is an integer value. We can also use the getent command to get the group details.

    上面的数字表示组ID,它是一个整数值。 我们还可以使用getent命令获取组的详细信息。

    
    root@localhost:~# getent group test_users
    test_users:x:1004:journaldev
    root@localhost:~#
    

    如果该组已经存在,则错误 (Error if the group already exists)

    If the group already exists, then the error message is displayed. Let’s run the above command again.

    如果该组已经存在,则会显示错误消息。 让我们再次运行上面的命令。

    
    root@localhost:~# groupadd test_users
    groupadd: group 'test_users' already exists
    root@localhost:~# 
    
    Linux Group Already Exists Error
    Linux Group Already Exists Error
    Linux组已存在错误

    创建具有组ID的组 (Creating a Group with Group ID)

    We can specify the group id also while creating the group using -g option.

    在使用-g选项创建组时,我们也可以指定组ID。

    
    root@localhost:~# groupadd -g 1005 test_users1
    root@localhost:~# cat /etc/group | grep 1005
    test_users1:x:1005:
    root@localhost:~# 
    

    If the group id is already in use, you will get an error message.

    如果组ID已在使用中,您将收到一条错误消息。

    
    root@localhost:~# groupadd -g 1005 test_users2
    groupadd: GID '1005' already exists
    root@localhost:~# 
    

    Linux groupadd强制成功选项 (Linux groupadd Force Success Option)

    We can specify -f or –force option to exit successfully if the group already exists.

    如果该组已经存在,我们可以指定-f或–force选项以成功退出。

    
    root@localhost:~# groupadd -f test_users
    root@localhost:~#
    

    If we are creating a group with force success option and the group id already exists, then group id is ignored and the group is created.

    如果我们要使用强制成功选项创建一个组并且该组ID已经存在,则将忽略组ID并创建该组。

    
    root@localhost:~# groupadd -f -g 1005 test_users2
    root@localhost:~# cat /etc/group | grep test_users2
    test_users2:x:1006:
    root@localhost:~# 
    

    Notice that the Linux group is created with a different group id because we used the -f option.

    请注意,由于我们使用了-f选项,因此使用不同的组ID创建了Linux组。

    Linux groupadd帮助 (Linux groupadd help)

    If you want some help with the groupadd command usage, use the -h option.

    如果需要有关groupadd命令用法的帮助,请使用-h选项。

    
    root@localhost:~# groupadd -h
    Usage: groupadd [options] GROUP
    
    Options:
      -f, --force                   exit successfully if the group already exists,
                                    and cancel -g if the GID is already used
      -g, --gid GID                 use GID for the new group
      -h, --help                    display this help message and exit
      -K, --key KEY=VALUE           override /etc/login.defs defaults
      -o, --non-unique              allow to create groups with duplicate
                                    (non-unique) GID
      -p, --password PASSWORD       use this encrypted password for the new group
      -r, --system                  create a system account
      -R, --root CHROOT_DIR         directory to chroot into
          --extrausers              Use the extra users database
    
    root@localhost:~# 
    

    Linux groupadd -K选项 (Linux groupadd -K Option)

    We can use -K option to override the GID_MIN and GID_MAX values present in the /etc/login.defs file.

    我们可以使用-K选项覆盖/etc/login.defs文件中存在的GID_MIN和GID_MAX值。

    It means that the new group id will be taken from the range provided using the -K option. Let’s look at an example to clearly understand this feature.

    这意味着新的组ID将取自使用-K选项提供的范围。 让我们看一个示例以清楚地了解此功能。

    
    root@localhost:~# cat /etc/login.defs | grep GID
    GID_MIN			 1000
    GID_MAX			60000
    root@localhost:~# 
    root@localhost:~# groupadd -K GID_MIN=20000 -K GID_MAX=21000 test_users6
    root@localhost:~# cat /etc/group | grep test_users6
    test_users6:x:20000:
    root@localhost:~# 
    

    If you look at the earlier commands, the group ids assigned were close to 1000. But in the above groupadd command, group id used is 20000.

    如果查看早期的命令,则分配的组ID接近1000。但是在上面的groupadd命令中,使用的组ID为20000。

    用密码创建组 (Creating a Group with Password)

    We can use the -p option to create a group with password.

    我们可以使用-p选项创建一个带有密码的组。

    
    root@localhost:~# groupadd -p abc123 test_users_pwd
    root@localhost:~# 
    

    But, I have never used it myself or not seen anyone using it. In fact, the man page of gpasswd states this as a security issue.

    但是,我从未亲自使用过它,也从未见过有人在使用它。 实际上,gpasswd的手册页指出这是一个安全问题。

    
    root@localhost:~# man gpasswd
    
       Notes about group passwords
           Group passwords are an inherent security problem since more than one person is permitted to
           know the password. However, groups are a useful tool for permitting co-operation between
           different users.'
    

    创建系统组 (Creating a System Group)

    We can use -r option to create a system group.

    我们可以使用-r选项来创建系统组。

    There is no difference between a normal group and a system group. The only difference is the group id assignment.

    普通组和系统组之间没有区别。 唯一的区别是组ID分配。

    For normal groups, the group ids are assigned from 1000 to 60000 (default value). For a system group, the group id is less than 1000.

    对于普通组,组ID的分配范围是1000到60000(默认值)。 对于系统组,组ID小于1000。

    Again, the group id has no significance or doesn’t provide any additional privileges.

    同样,组ID不重要,也不提供任何其他特权。

    
    root@localhost:~# groupadd -r system_group
    root@localhost:~# cat /etc/group | grep system_group
    system_group:x:999:
    root@localhost:~#
    

    Notice that the group id assigned is 999.

    请注意,分配的组ID为999。

    结论 (Conclusion)

    We can use groupadd command to add groups in Linux. It’s a very simple and common command that can be used with any Linux distributions to create a group.

    我们可以使用groupadd命令在Linux中添加组。 这是一个非常简单且通用的命令,可以与任何Linux发行版一起使用来创建组。

    参考文献: (References:)

    翻译自: https://www.journaldev.com/39629/create-group-linux-groupadd-command

    创建组groupadd

    展开全文
  • Linux创建组

    千次阅读 2018-05-27 13:29:40
     VG(Volumne Group)- 卷建立在物理卷之上,一个卷中至少要包括一个物理卷,在卷建立之后可动态添加物理卷到卷中。一个逻辑卷管理系统工程中可以只有一个卷,也可以拥有多个卷。 LV(Logical...
    基本的逻辑卷管理概念: 
    • PV(Physical Volume)- 物理卷
    物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。
     
    • VG(Volumne Group)- 卷组
    卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
     
    • LV(Logical Volume)- 逻辑卷
    逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。


    • PE(Physical Extent)- 物理块
     
    LVM 默认使用4MB的PE区块,而LVM的LV最多仅能含有65534个PE (lvm1 的格式),因此默认的LVM的LV最大容量为4M*65534/(1024M/G)=256G。PE是整个LVM 最小的储存区块,也就是说,其实我们的资料都是由写入PE 来处理的。简单的说,这个PE 就有点像文件系统里面的block 大小。所以调整PE 会影响到LVM 的最大容量!不过,在 CentOS 6.x 以后,由于直接使用 lvm2 的各项格式功能,因此这个限制已经不存在了。


        创建LVM系统分区方式的主要步骤如下:

    1、挂载磁盘这里用的是Centos7.0系统,如下所示:

        

    2、开机之后在终端下输入:fdisk -l,运行结果如下

    [root@localhost ~]# fdisk -l
    
    磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x000f3f57
    
       设备 Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048     2099199     1048576   83  Linux
    /dev/sda2         2099200    41943039    19921920   8e  Linux LVM
    
    磁盘 /dev/sdb:3221 MB, 3221225472 字节,6291456 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x40c32012
    
       设备 Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048     6291455     3144704   8e  Linux LVM
    
    磁盘 /dev/sdc:5368 MB, 5368709120 字节,10485760 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    
    
    磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    
    
    磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    
    
    磁盘 /dev/mapper/test-test1:1073 MB, 1073741824 字节,2097152 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节

    这里许注意下,你的第一块磁盘为:/dev/sda,第二块为:/dev/sdb,第三块为:/dev/sdc

    3、因为我之前做过了所以就用dev/sdc这块硬盘

         首先运行创建分区:fdisk /dev/sdc

            参数 p:查看分区 

                   n:新建分区

                   t:更改系统(Linux Lvm为8e)

                   w:保存

    [root@localhost ~]# fdisk /dev/sdc 
    欢迎使用 fdisk (util-linux 2.23.2)。
    
    更改将停留在内存中,直到您决定将更改写入磁盘。
    使用写入命令前请三思。
    
    Device does not contain a recognized partition table
    使用磁盘标识符 0x99c27e8d 创建新的 DOS 磁盘标签。
    
    命令(输入 m 获取帮助):n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    分区号 (1-4,默认 1):1
    起始 扇区 (2048-10485759,默认为 2048):
    将使用默认值 2048
    Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):
    将使用默认值 10485759
    分区 1 已设置为 Linux 类型,大小设为 5 GiB
    
    命令(输入 m 获取帮助):p
    
    磁盘 /dev/sdc:5368 MB, 5368709120 字节,10485760 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x99c27e8d
    
       设备 Boot      Start         End      Blocks   Id  System
    /dev/sdc1            2048    10485759     5241856   83  Linux
    
    命令(输入 m 获取帮助):t
    已选择分区 1
    Hex 代码(输入 L 列出所有代码):8e
    已将分区“Linux”的类型更改为“Linux LVM”
    
    命令(输入 m 获取帮助):p
    
    磁盘 /dev/sdc:5368 MB, 5368709120 字节,10485760 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x99c27e8d
    
       设备 Boot      Start         End      Blocks   Id  System
    /dev/sdc1            2048    10485759     5241856   8e  Linux LVM
    
    命令(输入 m 获取帮助):
    

    4、创建pv

    首先说明一些简单指令,常见的查看指令包括如下三种:
    1. pv相关:pvdisplay、pvs、pvscan,pvcreate
    2. vg相关:vgdisplay、vgs、vgscan,vgcreate
    3. lv相关:lvdisplay、lvs、lvscan,lvcreate
      
    [root@localhost ~]# pvcreate /dev/sdc1(创建pv)
      Physical volume "/dev/sdc1" successfully created.
    
    [root@localhost ~]# pvdisplay (查看详情信息)
      --- Physical volume ---
      PV Name               /dev/sda2 
      VG Name               centos
      PV Size               <19.00 GiB / not usable 3.00 MiB
      Allocatable           yes (but full)
      PE Size               4.00 MiB
      Total PE              4863
      Free PE               0
      Allocated PE          4863
      PV UUID               SIz1YH-VIQJ-TMtc-uvON-1qE5-ilhD-CUu6S1
       
      --- Physical volume ---
      PV Name               /dev/sdb1
      VG Name               test
      PV Size               <3.00 GiB / not usable 15.00 MiB
      Allocatable           yes 
      PE Size               16.00 MiB
      Total PE              191
      Free PE               127
      Allocated PE          64
      PV UUID               o3xlCg-67VF-qCOW-wUwt-yrda-1QgO-1heVJW
       
      "/dev/sdc1" is a new physical volume of "<5.00 GiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdc1
      VG Name               
      PV Size               <5.00 GiB
      Allocatable           NO
      PE Size               0   
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               Sc32nQ-sQId-MDjp-v4KE-dsgU-tqfn-FIeeAG
       
    
    5、创建Vg
    [root@localhost ~]# vgcreate test2 /dev/sdc1 -s 16M //用/dev/sdc1分区创建一个名为test2,pe大小为16M的vg组 
      Volume group "test2" successfully created
    [root@localhost ~]# vgdisplay     //查看vg
      --- Volume group ---
      VG Name               centos
      System ID             
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  3
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                2
      Open LV               2
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               <19.00 GiB
      PE Size               4.00 MiB
      Total PE              4863
      Alloc PE / Size       4863 / <19.00 GiB
      Free  PE / Size       0 / 0   
      VG UUID               AQa4PW-Yeuw-Pv1M-QRfY-bHef-bN11-6d0VPx
       
      --- Volume group ---
      VG Name               test
      System ID             
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  2
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               1
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               2.98 GiB
      PE Size               16.00 MiB
      Total PE              191
      Alloc PE / Size       64 / 1.00 GiB
      Free  PE / Size       127 / 1.98 GiB
      VG UUID               ipoa8D-CPNZ-IRDt-jb4T-5v6I-s3qY-RCfpUf
       
      --- Volume group ---
      VG Name               test2
      System ID             
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  1
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                0
      Open LV               0
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               4.98 GiB
      PE Size               16.00 MiB
      Total PE              319
      Alloc PE / Size       0 / 0   
      Free  PE / Size       319 / 4.98 GiB
      VG UUID               wX3cXl-HeGP-OVs3-7QDc-0c3N-scM3-Gv1CXW
       
    6、创建LV-->格式化LV-->挂载LV
        关于LV的操作主要有3个步骤,分别为:
    1. 创建LV;
    2. 格式化LV,如:ext3,ext4等;
    3. 挂载LV到指定目录下;
    [root@localhost ~]# lvcreate -L 3G -n test2 test2 //用test2的卷组创建大小为3G名为test2的lv
      Logical volume "test2" created.
    [root@localhost ~]# 
    
    [root@localhost ~]# mkfs.xfs /dev/test2/test2  //将lv格式化为xfs格式
    meta-data=/dev/test2/test2       isize=512    agcount=4, agsize=196608 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=786432, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
    [root@localhost ~]# mkdir /mnt/test2 //创建挂载点,将lv挂载到此文件夹
    [root@localhost ~]# mount /dev/mapper/test2-test2 /mnt/test2 //挂载
    
    7、用UUID的方式实现开机挂载
        blkid 查看硬盘的UUID
        编辑 /etc/fstab将硬盘的uuid添加到fstab文件中
    [root@localhost ~]# blkid /dev/mapper/test2-test2 >> /etc/fstab //将硬盘的uuid追加

    vi /etc/fstab

    #
    # /etc/fstab
    # Created by anaconda on Fri Apr 27 10:01:58 2018
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/centos-root /                       xfs     defaults        0 0
    UUID=52868b96-2510-4357-8cb2-f38f784c097f /boot                   xfs     defaults        0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0
    /dev/mapper/test-test1  /mnt/test               xfs     defaults        0 0
    UUID="e0376575-06d4-40a1-9d56-4f0a899db145" TYPE="xfs"
    /dev/mapper/test2-test2 /mnt/test2              xfs     default         0 0  
    UUID="0ebe9305-5811-495a-a6f1-90a57a4e0517" TYPE="xfs"
    ~                                                            























    展开全文
  • 使用SM30创建权限

    千次阅读 2011-08-11 14:20:16
    se54 创建权限  添加新增加的权限赋值给所需表 使用se16->TDDAt 查看权限所属表 在SAP中,经常需要自定义数据库表。而且可能需要维护该数据库的内容。定义了维护表视图后,可以通过SM30,对表内容进行维护...
  • 使用Nexus创建自己的私仓

    千次阅读 2018-06-22 15:24:23
    1.打开浏览器输入,输入nexus的地址:...创建本地存储库点击设置按钮,选中Blob Stores,并且点击Create blob store,如下图所示: 输入本地库的名称,如下所示: 4.创建仓库创建仓库需要注意的说明:R...
  • 创建函数

    千次阅读 2011-06-23 11:59:00
    函数由一系列逻辑上...在使用表格维护生成器时,会让你选择函数这个东西,可能不知道应该先那一个,今天我们就来一起创建一个函数.在此介绍两种方法.方法一:从SE37中创建函数 方法二:从对象浏览器SE80创建函数
  • 选择屏幕中,创建radiobutton直接使用代码实现,如下所示 SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001. PARAMETERS R1 RADIOBUTTON GROUP GR1. PARAMETERS R2 RADIOBUTTON GROUP GR1. ...
  • 不同Linux 系统对用户的规定有所不同,如Linux下的用户属于与它同名的用户,这个用户创建用户时同时创建。用户的管理涉及用户的添加、删除和修改。的增加、删除和修改实际上就是对/etc/group文件的...
  • GitLab之创建项目及项目

    万次阅读 2017-08-15 15:36:45
    项目组管理创建组:1、点击“New group“创建项目组2、填写基本信息,点击”Create group“完成创建组。给组添加人员:1、点击”Members”2、添加人员删除组:1、点击“Settings”2、点击”Remove group“3、输入组...
  • 阿里云服务器如何创建安全

    千次阅读 2019-12-12 09:49:11
    安全是ECS实例的虚拟防火墙。本文分享如何在ECS控制台...在您创建ECS实例时,如果您还未创建过安全,阿里云会为您创建一个默认安全。默认安全中的默认规则仅设置针对ICMP协议、SSH 22端口、RDP 3389端口、H...
  • Linux下用户创建组创建相关的命令

    千次阅读 2019-01-12 15:03:06
    Linux下用户创建组创建相关的命令
  • Linux下创建用户和用户

    万次阅读 多人点赞 2019-04-10 09:44:45
    日常运维我们使用useradd命令来创建用户,常用的命令如下: 不加任何参数,仅创建用户 示例:useradd myuser 此时用户的家目录是/home/myuser -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,...
  • vgcreate指令:创建

    万次阅读 2014-03-10 16:48:42
    【功能介绍】vgcreate指令用于创建LVM卷。 【选项说明】 选 项 功 能 -l 卷上允许创建的最大逻辑卷数 -p 卷中允许添加的最大物理卷数 -s 卷...
  • 来源:https://segmentfault.com/q/1010000008666596 https://zhidao.baidu.com/question/361146175916081012.html
  • 主要目的:创建新用户,并在创建用户,但是使用这些账户登录时候遇到了,无法使用 sudo命令,无法使用 shell相关,类似。补全,高亮等问题。 首先创建命令: groupadd 2001 useradd -g 2001 zwb 修改zwb...
  • 首先我对全局与通用进行一个详细说明:   域全局 域全局具有下列属性: 在本机模式域中的全局可以包含来自相同域的用户帐户和来自相同域的全局。 在混合模式域中的全局可以包含来自相同域的...
  • 1. 创建docker用户 sudo groupadd docker 2. 将用户添加到docker用户 sudo usermod -aG docker ${USER_NAME} 3. 重启docker服务 sudo systemctl restart docker 好了该用户可以使用docke功能了!!! ...
  • 线程组使用

    万次阅读 2017-11-02 17:51:11
    示例(通过线程的方式组织多个线程并且批量停止所有线程):1、创建线程A和Bpublic class ThreadA extends Thread { // 设置新的构造函数,传入线程对象 public ThreadA(ThreadGroup group, String
  • 创建一个用户,在使用的过程中提示该用户“jenkins 不在 sudoers 文件中。此事将被报告。”解决这个问题的方案如下: 修改/etc/sudoers这个文件的内容,将创建的用户添加进去就可以了。   ## Allows people in ...
  • linux——创建用户及所属总结

    千次阅读 2015-10-08 14:03:06
    创建用户 创建用户时可以使用adduser或者useradd都可以,创建后可以使用passwd设置登录密码。 需要注意的是: 在ubuntu下发现设置了-d...创建组 可以使用groupadd命令来增加一个新的组。 一个用户可以属于多个组。 把一
  • MATLAB怎么创建矩阵和数

    千次阅读 2020-06-27 16:26:30
    即可创建数组,数据之间使用空格或者逗号隔开,x=[2,4,6,8,10]可创建同样的数组,在MATLAB命令行窗口输入并运行代码创建数组如下图所示。 第二步:如果我们想进一步确认或者直观看到是否成功创建数组的话,我们...
  • 通常作为一个应用程序的部署脚本,开始的第一项工作是为当前应用创建一个专用(dedicated)的用户和用户。这个脚本很简单,这里贴一个参考样本:#!/bin/sh user=test_user group=test_group #create group if not...
  • win2012创建域用户,

    千次阅读 2019-09-15 16:53:44
    承接上文,部署好域控制器后...将adm1,adm2加入到adm中 (adm1,adm2是刚创建的用户) 重启看看 手动重启的方法 win +R 打开命令提示符 在策略中,添加gpo,比如说创建一个名称为sss,然后编辑 ...
  • MySQL索引创建使用

    万次阅读 多人点赞 2019-03-12 17:56:59
    背景 最近在深化学习数据库相关知识,借此机会总结记录一番,本来想自己总结概括一下,但是看到一...关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL...
  • Linux创建用户、用户及删除

    万次阅读 2016-11-21 10:37:43
    Linux创建用户、用户及删除 一、用户操作 1.创建用户 groupadd -g 888 users --创建一个users,其GID为888 2.修改用户 groupmod -n user users --修改名users为user 3.删除用户 ...
  • 创建家庭 首先需要家中电脑都是win 7/8系统。 在其中一台电脑上打开“网络和共享中心”-“家庭”-“创建家庭”,勾选要共享的项目,“下一步”,Win7会返回一串无规律的字符,这就是家庭的密码,可以把这串...
  • Linux创建及删除用户、

    万次阅读 2018-05-22 23:30:57
    创建用户注意:只有root用户才能创建新用户useradd 用户名 或 adduser 用户名例如,创建一个名为zhangsan的用户新建用户后,将会在/home目录下生成一个与用户名相同的用户主目录,同时会创建一个新,该与该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,090,897
精华内容 836,358
关键字:

创建组怎么使用