Centos的linux基础理论、linux基础命令、linux-用户和组、关于添加或删除用户失败、批量创建用户并加入组、批量创建用户密码与用户名相同

linux基础理论

linux根文件简介:
bin:普通用户的可执行命令所在地。
boot:核心。开机启动程序。
dev:硬件驱动、详细信息等
etc:常用的系统编辑文件。如用户详情、密码等。
home:家。一般用户的家目录所在地。
lib:库,相当于头文件。
mnt:特殊目录,一般用于挂载文件。
proc:虚拟目录,不占空间。
sbin:与系统管理有关的程序,超户可使用的可执行命令文件所在地。
tmp:临时目录。具有<t>权限。
usr:非系统默认程序所在地。
var:……没记=。=
linux常用编辑文件:

/etc/passwd:用户详情文件。 
/etc/shadow :用户密码文件。
/etc/group:群组详情文件。
/etc/gshadow::群组密码文件。
/etc/login.defs:预设账号的基本属性。
/etc/default/useradd:同上。
/etc/skel:家目录中的预设文件。

indox编号:
记录文件数据所存储的位置,也就是<地址号>。

shell:
一层命令外壳,相当于“盒子”,进程/命令在该盒子内的空间运行。用bash命令在shell内多添加一个shell时<可想象一下盒子包盒子>,第二个shell会在第一个shell内划分一个空间,进程/命令在该新空间内运行<类似[礼物当然是在最里面的盒子里而不是在外面的盒子里]的意思= =>。退出该层shell,则该shell的空间也释放掉了。<里面的盒子被拿掉了,空间自然就释放给了上一层盒子>
比较特殊的几个shell:
/sbin/nologin:不允许用户登录
/bin/bash:一般linux系统使用的shell
/dev/null:这个就算使用chsh -l命令也无法看到。用途是使用户无法使用服务器的shell。

ln<link>链接:
相当于快捷方式。link分为hard link<硬链接>和symbdic link<软连接>。


硬链接:
每个文件默认至少一个硬链接。硬链接指向的是文件的数据,indox编号与源文件相同,相当于[给文件重起一个名字],所以硬链接不占空间。硬链接不能指向目录。
软链接:
软链接指向的是文件的indox号。也就是说,软链接存储的是文件地址而不是内容。只要还有一个硬链接存在,软链接都能找到文件并读取;但硬链接若全部删除,软链接依旧存在,但无法找到文件。


文件权限


代表符:
r:读取。代表数字为4.
w:写入。代表数字为2.
x:执行。对于目录来说,该权限有[是否能进入目录]的含义。代表数字为1.
s:别的用户执行该文件的时候,将以文件所有者或文件所属组的名义执行。<看s权限的所在位置>
t:任何用户都可以在此目录添加或删除文件,但只限属于自己的,不能删除他人的<root除外>。该权限只存在<其他人>中。
S:当s权限所在位置没有x权限的时候,会出现S权限,表示[虚伪的]。
T:当t权限所在位置没有x权限的时候,会出现T权限,表示[虚伪的]。


文件权限解析:
文件权限一共分为四部分,如下:
e.g. -               rwx            r-x               r--
     <文件类型>  <所有者>     <所属群组>    <其他人>
-代表文件;d代表文件夹。
该权限的意思是:<所有者>可读可写可执行该[文件];<所属群组>成员可读可执行该文件;<其他人>只可读该文件。


文件权限代表数字:
r:4
w:2
x:1


添加删除s/t权限:
添加s/t权限的前提是:<所有者><所属群组><其他人>都必须有x权限。
文件权限从左至右依次是<所有者><所属群组><其他人>。
所以<所有者>=4
       <所属群组>=2
       <其他人>=1
添加s权限时输入该命令:chmod   <要添加s权限部分的代表数字><文件权限>  文件名
e.g. chmod  6755  a
以上表示:a文件的所有者和所属群组都添加s权限。
如果要删除s权限:chmod  <文件权限>  文件名
t权限的添加和删除同上。
注意:s权限的添加仅限所有者和所属群组,其他人添加该权限没有意义;t权限仅限其他人添加。


S/T权限的出现:
参照前面的权限字符说明自行尝试吧=。=

hosts文件


该文件是用来存储主机名与IP的对应数据。实际上,DNS客户端在查找主机的IP地址时,会先检查自己计算机内的HOSTS文件,看该文件内是否有该主机的IP地址,若找不到才会向DNS服务器查询。

linux基础命令

ls:以列表显示当前目录下的文件


参数:
-l:详细格式列表  => ll 
-1:每列仅显示一个文档
-a/--all:显示所有文档 <包括隐藏文件>
-i/--indox:文档的indox编号
-R/--recursive:递归
-h:以字节为单位显示文件大小
-S/--size:显示大小,以区块为单位
-c:以更改时间排序
-C:由上至下,由左至右的直行方式显示
-d/--directory:显示目录名称而非内容
-L/--dereference:直接列出快捷方式的源文件
-r/--reverse:反向排序
--version:显示版本号

mv:移动或重命名

参数:
-b/--backup:备份再覆盖文件
-f/--force:强制覆盖
-i/--interactive覆盖前先询问

cp:复制文件


参数:
-a/--archive:尽可能的将档案状态、权限等资料都照原状予以复制
-f/--force:强制复制,不论目标是否已存在
-i/--interactive:覆盖前先询问
-r/-R/--reverse:递归,用于非空目录
-v/--verbose:显示指令执行过程
-p:保持原来的权限

rm<remove> 删除

参数:
-f:强制
-r:递归
-i:删除前询问
-v/--verbose:指令执行过程
--version:版本号

*:通配符


e.g.
rm -rf 文件名*
↑删除由这个文件名开头的所有文档

wc:统计并输出文中的字节数、字数、行数


参数:
-c:统计字节数
-l:行数
-w:字数<以空格间的字符串为一字>

comm [-123] 文件1 文件2 <类似的命令为diff,功能比comm更详细>
比较两个文件,结果成三列输出:第一列为文件1的内容,第二列为文件2的内容,第三列为两文件相同的内容。
diff和comm参数在此不予详解。【其实自己也没搞懂= =】
vi:编辑已存在的文件或新文件


具体使用步骤:
1.vi+文件/新文件
2.按'a'或'A'开始编辑
3.按'esc'退出编辑
4.按大写Z两下保存并退出 <可按:qw,也是保存退出> <:q! 为不保存强制退出>

touch:建立文档或改变文档时间【类似vi】,当文档已存在时,touch会将当前系统时间赋予该文件夹或文件。


参数:
-d/-t <时间日期>:将指定时间赋予文件
-r <参考文档>:指定文档的时间全部设为参考文档的时间
--version:版本号
echo:将变量显示在屏幕上


e.g.
echo '字符' >文件 => 将一串字符输入到文件中
echo '字符' => 将字符显示在屏幕上
echo $字符 => 把字符看做变量,将变量里的值提取出来显示在屏幕上

alias:别名。相当于一条命令的代号。
alias+命令:查询某命令的别名
alias:查询该用户下的所有别名
alias 别名=‘命令’:临时添加别名
unalias 别名:删除临时别名

在当前用户下永久添加别名:
1.编辑.bashrc文件
2.输入 alias 别名=‘原命令’
3.保存并退出
4.生效.bashrc文件 <相当于更新> :. .bashrc/sourc .bashrc
5.使用别名啦啦~当然如果无效可重登陆该用户试试。


e.g.
输入 alias rm='rm -i' 保存并退出
运行.bashrc文件后再使用rm就相当于使用了‘rm -i’命令

PATH:环境变量。相当于系统的目录词典。输入命令时,系统需从PATH中的已有目录查找相应的可执行文件,再执行该命令

编辑PATH:
方法与添加别名相似。编辑,bashrc文件,输入PATH="$PATH":/目录,保存退出,最后生效.bashrc文件。
查看PATH:
echo $PATH
cat:查看文件内容


参数:
-n/--number:对所有输出行编号。
-b/--number-nonblank:与-n相似,但对空白行不编号。
-s/--squeeze-blank:将两行以上的空白行代换为一行。
-v/--show-nonprinting:没讲=。=
less/more:查看文件内容


参数:
-p:显示下一屏之前先清屏。
-c:同-P.
-d:在每屏底部显示友好提示。


P.S. less基本同more。相比较more,less可逐行查看,可前后翻页,q退出,<?>/</>查找。
其他查看文本的命令:


head:显示文本开头内容。可加参数<-x>,x为行数,意为显示文件开头x行。不加参数默认显示前十行。
tail:与head相反,显示文本末尾内容。参数同head。不加参数默认显示最后十行。
tac:与cat相反,倒着显示文本内容。
nl:等同cat -b。
od:将文件以八进制显示。

文件权限、所有者、所属群组:


chown:更改文件所有者
用法:
chown  [-R]  所有者  文件名
chown  [-R]  所有者[.][:]所属群组  文件名
-R表示连该目录下的所有文件同时更改档案拥有者。


chgrp:更改文件所属群组
chgrp  群组名  文件名


chmod:更改文件权限
数字改变权限:
chmod  <文件权限的代表数字>  文件名
符号改变权限:


u<所有者> + <加上> r 文件名
chmod      g<群组> - <减去> w
o<其他人> = <重设> x
a<所有>

umask:掩码。用于控制文件或文件夹的默认权限。
直接输umask,屏幕显示现在的umask;在umask后面加权限数字,更改默认权限。

file+文件名:查看文件类型

which/whereis/locate/find:查找文件命令。


which:根据PATH来查找文件。
whereis:根据PATH,还配合数据库来查找。可加参数-b/-m/-s/-u。
locate:根据数据库</var/lib/slocate>来查找。数据库一天更新一次,所以该命令的缺点是刚刚建立的文件查找不到。
find:实际搜寻,根据硬盘查找,速度较慢,但是功能最强大。[这条命令太多用法了……具体去看《文件查找使用详解》这一章的视频截图吧=。=]另外搜索第一次后,再搜索速度会快很多。因为系统会建立一个索引文件,再次搜索时系统会从该索引文件搜索,速度会快很多。

有关用户/组的常用命令:


groupadd/groupdel:添加/删除组。
useradd/userdel:添加/删除用户。
usermod -u uid 用户名:更改用户Id。
chsh:用于改变用户的shell
  参数:-l:列出此机器能使用的shell。
           -s:改变用户的shell。
su/sudo:切换使用者。注意,使用该命令不管怎么切换用户,查看登陆用户时,都会发现登录用户是最开始的登录用户。
    su -:普通用户转超户。root使用该命令会加多一层shell外壳<相当于bash命令>。
    su:普通用户转超户,但转换不全。只是‘披’了一层超户的皮。root使用该命令效果同su -。
    sudo+命令:使某用户可以以另一用户的名义执行该命令。

tar:压缩、解压。


参数:
-c:打包成文档。
-x:解压。
-t:查看压缩包内容。
-f:命名压缩文件<该参数后需立即更名字,也就是说该参数需放在所有参数最后,否则出错><通常该参数必选>。
-z:带有gzip属性的压缩<用该参数压缩的文件需带上该参数解压>。
-v:查看执行过程。
-u:更新文件
-r:追加,往压缩包内添加文件。
-w:每一步都要求确认
-C:指定存放位置
-p  :使用原档案的原来属性(属性不会依据使用者而变)  
-P  :可以使用绝对路径  
-N  :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!  
--exclude FILE:在压缩的过程中,不要将 FILE 打包!  


grep:查找关键字


参数:
-a:将二进制文件以文本文件的方式查找。
-c:计算搜寻的次数。
-i:忽略大小写。
-n:顺便显示行号。
-v:反向,查找没有关键字的行。


sort:排序。不加参数默认以字符的ASCII码排序。


-n:以数字大小排序。
-r:倒序。


cut:显示一个文件中的哪一列
cut -d ":" -f 1,2 /etc/passwd
显示/etc/passwd文件中的1,2列,分隔符为:号

linux-用户和组

linux用户和组常用编辑文件:


/etc/passwd:用户详情文件。 
/etc/shadow :用户密码文件。
/etc/group:群组详情文件。
/etc/gshadow::群组密码文件。
/etc/login.defs:预设账号的基本属性。
/etc/default/useradd:同上。
/etc/skel:家目录中的预设文件。

有关用户和组的命令详解:


useradd:添加用户
-u:设定用户uid,在前面加o参数可以指定和已有账号相同的uid。
-g:指定用户gid,指定该用户的主要组。
-G:指定用户次要组。
-d:指定用户家目录。
-s:指定用户shell。
-c:用户注释。
-p:指定用户加密后的数据。
-m|-M:是否建立家目录。M是不建立。
-n:不建立私有组。
-r:建立一个系统账号。


userdel:删除用户
-r:彻底删除该用户的所有信息。如果不该加参数,则第二次创建该用户时会不成功。


usermod:修改用户相关信息
除了useradd能使用的参数外,还有以下参数:
-l:更改账号名
-L:锁定账号。
-U:解锁。


groupadd:添加组
-g:指定组的gid
-r:强行指定组为系统组
-f:强行使用已存在的gid


groupmod:修改组信息
-g:修改组的gid
-n:修改组的名字


gpasswd:设置组密码
没有参数则默认是修改组密码
-r:删除组密码
-R:锁定组密码


groupdel 组名:删除组。无参数。


newgrp 组名:暂时修改主要组身份。


chsh:用于改变用户的shell
  参数:-l:列出此机器能使用的shell。
           -s:改变用户的shell。


su/sudo:切换使用者。注意,使用该命令不管怎么切换用户,查看登陆用户时,都会发现登录用户是最开始的登录用户。
    su -:普通用户转超户。root使用该命令会加多一层shell外壳<相当于bash命令>。
    su:普通用户转超户,但转换不全。只是‘披’了一层超户的皮。root使用该命令效果同su -。
    sudo+命令:使某用户可以以另一用户的名义执行该命令。
    普通用户默认不允许使用sudo,具体怎么更改该设定,自己去找(linux系统管理)笔记。




chage -d 0 username      #意思是密码最近一次修改时间为 1970/1/1,会强制用户下次登陆时修改密码用法:chage [选项] 用户名


选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为"最近日期"
-E, --expiredate 过期日期 将帐户过期时间设为"过期日期"
-h, --help 显示此帮助信息并退出
-I, --inactive 失效密码 将因过期而失效的密码设为"失效密码"
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为"最小天数"
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为"最大天数"
-W, --warndays 警告天数 将过期警告天数设为"警告天数"




一些自己总结的理论:
1.
如果创建两个相同uid的用户,系统会把两个用户都认为是第一个创建的用户。
2.
就算创立第二个超级管理员,第二个管理员的家目录也是在/home下。

关于添加或删除用户失败

例子:
相同uid的用户普通删除后又创建的错误。


创建一个不存在的用户,然后普通删除。
[root@localhost ~]# useradd error
[root@localhost ~]# userdel error
查看/etc/passwd文件,发现error用户已不存在。


这时候又创建error用户,系统提示错误。
[root@localhost ~]# useradd error
Creating mailbox file: File exists
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
创建mailbox文件:文件已存在
命令useradd:跳过:家目录已存在
不能复制来自skel目录的任何文件进去


此时查看/etc/passwd文件,发现error用户又出现了。
此时强制删除……成功= =




例子:
不同uid的用户普通删除后又创建的错误。


创建一个不存在的用户,并指定它的uid,然后普通删除。
[root@localhost ~]# useradd -u 550 error
[root@localhost ~]# userdel error
查看/etc/passwd文件,发现error用户已不存在。


这时候又创建error用户,系统提示错误。
[root@localhost ~]# useradd error
Creating mailbox file: File exists
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.


此时查看/etc/passwd文件,发现error用户再次出现,但是uid与之前设定的550不同。
此时强制删除,错误提示。
[root@localhost ~]# userdel -r error
userdel: /var/spool/mail/error not owned by error, not removing
userdel: /home/error not owned by error, not removing
命令userdel: /var/spool/mail/error不属于error,不能移除。
命令userdel: /home/error不属于error,不能移除。


系统提示该两个文件不能移除,是因为之前删除error用户时没有强制导致残留的一些用户信息。再次建立后的error用户uid是系统自动给予的,与之前手动设定的550不同,所以该两个文件记录的所属用户uid与再次创立的error用户也不同,自然不能删除。
此时除非再次创立同名同uid的用户,然后强制删除,否则只能手动删除。

批量创建用户并加入组

#!/bin/bash


for username in abc1 abc2 abc3 abc4 abc5 abc6 abc7 abc8 abc9 abc10    <=变量

do      <=开始
groupadd Group     <=创建组
  useradd -g Group $username <=创建用户加入组 调用变量 
echo $useradd | passwd --stdin $username   <=写入密码调用变量username,通过passwd--stdin 输入到变量
done

#####
结果就是创建了abc1-abc10 这些用户 密码为用户名 并且加入了Group

批量创建用户密码与用户名相同

扫描二维码关注公众号,回复: 1109571 查看本文章

先创建一个执行文件 abc.sh
#/bin/bash


username=$ (cat abc.txt)


for username in $usernames
do

useradd $username        <==新增账号
echo $username | passwd --stdin $username   <==与账户相同的密码


done

再建立模板
一行一个用户
vim abc.txt
user1
user2
user3
user4
user5
user6
user7
user8
user9

执行abc.sh
sh abc.sh

最终结果就是每个账户具有与账户相同的密码

猜你喜欢

转载自blog.csdn.net/kamroselee/article/details/80407987