在安装时,我门选择了rhel7 ,且有安装GUI,所以使用时会有图形界面的产生,不过也有纯文本的环境可以切换~
登陆,打开终端:
最左边的 feng显示的是『目前用户的账号』,而@之后接的 server则是『主机名』,至于最右边的~
则指的是 『目前所在的目录』,那个$
则是我们常常讲的『提示字符』
提示:
那个~
符号代表的是『用户的家目录』的意思,他是个『变量!』
举例来说,root 的家目录在/root, 所以 ~
就代表/root 的意思
在 Linux 当中,默认 root 的提示字符为 # ,而一般身份用户的提示字符为 $
我们都是透过『程序』在跟系统作沟通的,上面提到的窗口管理员或文本模式都是一组或一 只程序在负责我们所想要完成的任务。
文本模式登入后所取得的程序被称为壳(Shell),这是因为这支程序负责最外面跟使用者(我们)沟通,所以才被戏称为壳程序!
指令详细说明:
所有以 mk为开头的指令都被显示出来~
记住:
[Tab] 接在一串指令的第一个字的后面,则为『命令补全』!
[Tab] 接在一串指令的第二个字以后时,则为『文件补齐』!
在 Linux 或 Unix 操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。
执行命令后可看到这些目录
文件系统的最顶层是由根目录开始的,系统使用 / 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此反复就可以构成一个庞大的文件系统。
在Linux文件系统中有两个特殊的目录,一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表示;另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 … 来表示。
如果一个目录或文件名以一个点 . 开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以默认方式查找时,不显示该目录或文件。
/bin 、 /sbin——存放基本命令
/boot——存放启动文件
/dev ——存放各种设备文件
/etc——存放各种配置文件
/usr——存放共用的、只读的用户数据
/root ——管理员root的家目录
/home——各种普通用户的家目录
/tmp——存放各种临时文件
/var——存放经常变化的数据或文件,日志也在
/proc ——存放内存中的映射数据,不占用内存
将登录用户的身份切换成root之后,执行ls -al
命令:
ls 是『list』的意思,重点在显示文件的文件名与相关属性。而选项『-al』则表示列出所有的文件详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为『 . 』的文件)
上图说明下文件属性:
第一栏代表这个文件的类型与权限(permission):
-
就行)第二栏表示有多少档名连结到此节点(i-node):
第三栏表示这个文件(或目录)的『拥有者账号』
第四栏表示这个文件的所属群组
第五栏为这个文件的容量大小,默认单位为 bytes
第六栏为这个文件的建档日期或者是最近的修改日期
第七栏为这个文件的档名
与Windows 系统不一样的是,在 Linux 系统当中,每一个文件都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢? 其实,最大的用途是在『数据安全性』!
因此,在你修改你的 linux 文件与目录的属性之前,一定要先搞清楚, 什么数据是可变的,什么是不可变的!
几个常用的群组,拥有者和各种身份的权限修改的命令
chgrp
:改变文件所属群组chown
:改变文件拥有者chmod
:改变文件权限,SUID,SGID,SBIT…的特性实验一:那么在你的家目录内有一个名为 initial-setup-ks.cfg 的文件, 如何将 该文件的群组改变一下呢?假设你已经知道在/etc/group 里面已经存在一个名为 users 的群组, 但是 testing 这个群组名字就不存在/etc/group 当中了,此时改变群组成为 users 与 testing会发生什么?
先试试将Group名改成users:
改了以后显示一下改成功与否~
再试试改为testing,发现,,无效组:testing
所以!请记得,要被改变的组名必须要在/etc/group 文件内存在才行,否则就会显示错误!
实验二:改变一个文件的拥有者呢?
一样要注意的是, 用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变。
chown 还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上 -R 的选项即可~
将 initial-setup-ks.cfg 的拥有者改为 feng这个账号:
在此之前,initial-setup-ks.cfg文件的拥有者与群组被我设置为feng,将 initial-setup-ks.cfg 的拥有者与群组改回为 root:
更改:
实验三:改变权限
chmod 这个指令,权限的设定方法有两种,分别可以使用数字或者 是符号来进行权限的变更。
可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4 w:2 x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,
例如当权限为: [-rwxrwx—] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= — = 0+0+0 = 0
该文件的权限数字就是 770 ,
变更权限的指令 chmod 的语法:chmod [-R] xyz 文件或目录
对.bashrc文件进行实验:
可以由 u, g, o 来代表三种身份的权限!此外, a 则代表 all 亦即全部 的身份!那么读写的权限就可以写成 r, w, x ~
实验一下:
要设定一个文件的权限成为『-rwxr-xr-x』时
要是想给所有使用这个文件的人都能够写入的权限:
如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则
特殊目录:
.
:代表此层目录
..
:代表上一层目录
-
:代表前一个工作目录
~
:代表(目前用户身份)所在的家目录
常见处理目录的命令:
实验一下:
目录的进入:
[root@server1 ~]# cd ~feng
[root@server1 feng]# cd ~
[root@server1 ~]# cd
[root@server1 ~]# cd ..
[root@server1 /]# cd -
/root
绝对路径与相对路径:
[root@server1 ~]# cd /var/spool/mail
[root@server1 mail]# cd ../postfix
我们由/var/spool/mail 去到/var/spool/postfix 就这样写,前提:必须要确认你是在/var/spool/mail 当中,并且知道在/var/spool 当中有个 postfix 的目录才行啊~ 这样才能使用
实验二:pwd (显示目前所在的目录)
[root@server1 ~]# pwd [-P]
选项与参数: -P :显示出确实的路径,而非使用链接 (link) 路径
单纯显示出目前的工作目录:
显示出实际的工作目录,而非链接文件本身的目录名而已:
[root@server1 ~]# cd /var/mail
[root@server1 mail]# pwd
/var/mail 列出目前的工作目录
[root@server1 mail]# pwd -P
/var/spool/mail
[root@server1 mail]# ls -ld /var/mail
lrwxrwxrwx. 1 root root 10 Mar 19 20:03 /var/mail -> spool/mail
因为 /var/mail 是连结档,连结到 /var/spool/mail
所以,加上 pwd -P 的选项后,会不以连结文件的数据显示,而是显示正确的完整路径啊!
-P 的选项:他可以让我们取得正确的目录名称,而不是以链接文件的路径来显示的
实验三:mkdir (建立新目录)
[root@study ~]# mkdir [-mp] 目录名称
选项与参数:
-m :配置文件案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上层目录)递归建立起来!
请到/tmp 底下尝试建立数个新目录看看:
[root@server1 mail]# cd /tmp
[root@server1 tmp]# mkdir test
[root@server1 tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory ‘test1/test2/test3/test4’: No such file or directory
[root@server1 tmp]# mkdir -p test1/test2/test3/test4
加了这个 -p 的选项,可以自行帮你建立多层目录
建立权限为 rwx–x--x 的目录:
[root@server1 tmp]# mkdir -m 711 test2
[root@server1 tmp]# ls -ld test*
drwxr-xr-x. 2 root root 6 Mar 21 16:58 test
drwxr-xr-x. 3 root root 19 Mar 21 16:59 test1
drwx--x--x. 2 root root 6 Mar 21 17:00 test2
如果没有加上 -m 来强制设定属性,系统会使用默认属性
实验四:rmdir (删除『空』的目录)
[root@study ~]# rmdir [-p] 目录名称
选项与参数:
-p :连同『上层』『空的』目录也一起删除
将于 mkdir 范例中建立的目录(/tmp 底下)删除掉!:
[root@server1 tmp]# rmdir test
[root@server1 tmp]# rmdir test1
rmdir: failed to remove ‘test1’: Directory not empty
[root@server1 tmp]# rmdir -p test1/test2/test3/test4
[root@server1 tmp]# ls -ld test*
drwx--x--x. 2 root root 6 Mar 21 17:00 test2
利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除
rmdir 仅能『删除空的目录』
关于文件的一些基本管理
[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称.. [root@study ~]# ls [--color={never,auto,always}] 文件名或目录名称..
[root@study ~]# ls [--full-time] 文件名或目录名称..
选项与参数:
-a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-l :长数据串行出,包含文件的属性与权限等等数据;(常用)
-S :以文件容量大小排序,而不是用档名排序;
--color=auto :让系统自行依据设定来判断是否给予颜色
--full-time :以完整时间模式 (包含年、月、日、时、分) 输出
实验一:
将家目录下的所有文件列出来(含属性与隐藏文件)
[root@server1 ~]# ls -al ~
total 48
dr-xr-x---. 5 root root 273 Mar 21 16:43 .
dr-xr-xr-x. 17 root root 224 Mar 19 20:10 ..
-rw-------. 1 root root 1866 Mar 19 20:11 anaconda-ks.cfg
-rw-------. 1 root root 1158 Mar 21 16:37 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwx------. 4 root root 31 Mar 19 20:13 .cache
drwx------. 4 root root 30 Mar 19 20:13 .config
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwx------. 3 root root 25 Mar 19 20:12 .dbus
-rw-r--r--. 1 root root 1942 Mar 19 20:12 initial-setup-ks.cfg
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
-rw-r--r--. 1 root root 17 Mar 21 11:03 test
-rw-------. 1 root root 1045 Mar 21 11:03 .viminfo
-rw-------. 1 root root 104 Mar 21 09:30 .xauthrR8nM2
-rw-------. 1 root root 104 Mar 21 16:37 .xauthTN9rsS
目录文件文件名都是以深蓝色显示
承上题,不显示颜色,但在文件名末显示出该文件名代表的类型(type)
[root@server1 ~]# ls -alF --color=never ~
total 48
dr-xr-x---. 5 root root 273 Mar 21 16:43 ./
dr-xr-xr-x. 17 root root 224 Mar 19 20:10 ../
-rw-------. 1 root root 1866 Mar 19 20:11 anaconda-ks.cfg
-rw-------. 1 root root 1158 Mar 21 16:37 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwx------. 4 root root 31 Mar 19 20:13 .cache/
drwx------. 4 root root 30 Mar 19 20:13 .config/
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwx------. 3 root root 25 Mar 19 20:12 .dbus/
-rw-r--r--. 1 root root 1942 Mar 19 20:12 initial-setup-ks.cfg
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
-rw-r--r--. 1 root root 17 Mar 21 11:03 test
-rw-------. 1 root root 1045 Mar 21 11:03 .viminfo
-rw-------. 1 root root 104 Mar 21 09:30 .xauthrR8nM2
-rw-------. 1 root root 104 Mar 21 16:37 .xauthTN9rsS
目录的都带/
完整的呈现文件的修改时间 (modification time)
[root@server1 ~]# ls -al --full-time ~
total 48
dr-xr-x---. 5 root root 273 2020-03-21 16:43:45.703317664 +0800 .
dr-xr-xr-x. 17 root root 224 2020-03-19 20:10:53.560036193 +0800 ..
-rw-------. 1 root root 1866 2020-03-19 20:11:42.494039079 +0800 anaconda-ks.cfg
-rw-------. 1 root root 1158 2020-03-21 16:37:51.943301671 +0800 .bash_history
-rw-r--r--. 1 root root 18 2013-12-29 10:26:31.000000000 +0800 .bash_logout
-rw-r--r--. 1 root root 176 2013-12-29 10:26:31.000000000 +0800 .bash_profile
-rw-r--r--. 1 root root 176 2013-12-29 10:26:31.000000000 +0800 .bashrc
drwx------. 4 root root 31 2020-03-19 20:13:36.122005699 +0800 .cache
drwx------. 4 root root 30 2020-03-19 20:13:36.133005700 +0800 .config
-rw-r--r--. 1 root root 100 2013-12-29 10:26:31.000000000 +0800 .cshrc
drwx------. 3 root root 25 2020-03-19 20:12:11.506000708 +0800 .dbus
-rw-r--r--. 1 root root 1942 2020-03-19 20:12:36.727002195 +0800 initial-setup-ks.cfg
-rw-r--r--. 1 root root 129 2013-12-29 10:26:31.000000000 +0800 .tcshrc
-rw-r--r--. 1 root root 17 2020-03-21 11:03:33.956235801 +0800 test
-rw-------. 1 root root 1045 2020-03-21 11:03:33.957235801 +0800 .viminfo
-rw-------. 1 root root 104 2020-03-21 09:30:16.780017445 +0800 .xauthrR8nM2
-rw-------. 1 root root 104 2020-03-21 16:37:57.923301941 +0800 .xauthTN9rsS
上面的『时间』字段变了!变成较为完整的格式
[root@study ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
[root@study ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
-a :相当于 -dr --preserve=all 的意思;(常用)
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递归持续复制,用于目录的复制行为;(常用)
复制(cp)这个指令是非常重要的,不同身份者执行这个指令会有不同的结果产生,尤其是那个-a, -p 的 选项, 对于不同身份来说,差异则非常的大
实验一:
用 root 身份,将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc
[root@server1 ~]# cp ~/.bashrc /tmp/bashrc
[root@server1 ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite ‘/tmp/bashrc’? n
重复作两次动作,由于 /tmp 底下已经存在 bashrc 了,加上 -i 选项后,
则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 来二次确认呢
变换目录到/tmp,并将/var/log/wtmp 复制到/tmp 且观察属性:
[root@server1 ~]# cd /tmp
[root@server1 tmp]# cp /var/log/wtmp .
[root@server1 tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 23808 Mar 21 15:17 /var/log/wtmp
-rw-r--r--. 1 root root 23808 Mar 21 17:25 wtmp
想要复制到当前目录,最后的 . 不要忘!
发现复制过来的文件权限会改变~
那如果你想要将文件的所有特性都一起复制过来该怎办?可以加上 -a
oot@server1 tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r--. 1 root utmp 23808 Mar 21 15:17 /var/log/wtmp
-rw-rw-r--. 1 root utmp 23808 Mar 21 15:17 wtmp_2
这样,特性一样
在预设的条件中, cp 的来源文件与目的文件的权限是不同的,目的文件的拥有者通常会是指令操作者本身。如,上面的二步骤中,由于我是 root 的身份,因此复制过来的文件拥有者与群组就改变成为 root 所有了!
由于具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件, 例如密码文件 (/etc/shadow) 以及一些配置文件,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等 可以完整复制文件权限的选项才行!
继续,复制 /etc/ 这个目录下的所有内容到 /tmp 底下:
cp: omitting directory ‘/etc/’
[root@server1 tmp]# cp -r /etc/ /tmp
也可以利用 cp -a /etc /tmp 来下达指令喔!尤其是在备份的情况下
[root@study ~]# rm [-fir] 文件或目录
选项与参数:
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
实验一:
将刚刚在 cp 的范例中建立的 bashrc 删除掉!
[root@server1 ~]# cd /tmp
[root@server1 tmp]# rm -i bashrc
rm: remove regular file ‘bashrc’? y
如果加上 -i 的选项就会主动询问
将 cp 例中所建立的 /tmp/etc/ 这个目录删除掉
[root@server1 tmp]# rmdir /tmp/etc
rmdir: failed to remove ‘/tmp/etc’: Directory not empty
[root@server1 tmp]# rm -r /tmp/etc
rm: descend into directory ‘/tmp/etc’? y
rm: remove regular file ‘/tmp/etc/fstab’? ^C 按下 [crtl]+c 中断
因为身份是 root ,预设已经加入了 -i 的选项,所以你要一直按 y 才会删除
如果确定要删除掉此目录而不要询问,可以这样做
[root@server1 tmp]# \rm -r /tmp/etc
删除一个带有 - 开头的文件
[root@server1 tmp]# touch ./-aaa-
[root@server1 tmp]# ls -l
-rw-r--r--. 1 root root 0 Mar 21 17:47 -aaa-
[root@server1 tmp]# rm -aaa- 因为 "-" 是选项!所以系统误判了
rm: invalid option -- 'a'
Try 'rm ./-aaa-' to remove the file ‘-aaa-’.
Try 'rm --help' for more information.
[root@server1 tmp]# rm ./-aaa-
rm: remove regular empty file ‘./-aaa-’? y
[root@study ~]# mv [-fiu] source destination
[root@study ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新 (update)
实验:
复制一文件,建立一目录,将文件移动到目录中
[root@server1 ~]# cd /tmp
[root@server1 tmp]# cp ~/.bashrc bashrc
[root@server1 tmp]# mkdir mvtest
[root@server1 tmp]# mv bashrc mvtest
将刚刚的目录名称更名为 mvtest2
[root@server1 tmp]# mv mvtest mvtest2
再建立两个文件,再全部移动到 /tmp/mvtest2 当中
[root@server1 tmp]# cp ~/.bashrc bashrc1
[root@server1 tmp]# cp ~/.bashrc bashrc2
[root@server1 tmp]# mv bashrc1 bashrc2 mvtest2
如果有多个来源文件或目录,则最后一个目标文件一定是『目录!』
每一个文件都具有『拥有人与拥有群组』 的属性,每个登入的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、一个是群组 ID (Group ID ,简称 GID)。
那么文件如何判别他的拥有者与群组呢?其实就是利用 UID 与 GID !每一个文件都会有所谓的拥有者 ID 与拥有群组 ID ,当我们有要显示文件属性的需求时,系统会依据 /etc/passwd 与 /etc/group 的内容, 找到 UID / GID 对应的账号与组名再显示出来
例子:
[root@server1 ~]# id feng
uid=1000(feng) gid=1000(feng) groups=1000(feng)
[root@server1 ~]#
[root@server1 ~]# ll -d /home/feng
drwx------. 15 feng feng 4096 Mar 22 02:15 /home/feng
[root@server1 ~]# vim /etc/passwd
..........
feng:x:2000:1000:feng:/home/feng:/bin/bash
[root@server1 ~]# ll -d /home/feng
drwx------. 15 1000 feng 4096 Mar 22 02:15 /home/feng
因为我们乱改,所以导致 1000 找不到对应的账号,因此显示数字
上面的例子仅是在说明 UID 与账号的对应性,在一部正常运作的 Linux 主机 环境下,上面的动作不可随便进行, 这是因为系统上已经有很多的数据被建立存在了,随意修改系统上某些账号的 UID 很可能会导致某些程序无法进行。
跟使用者账号有关的有两个非常重要的文件,一个是管理使用者 UID/GID 重要参数的 /etc/passwd ,一个则是专门管理密码相关数据的 /etc/shadow
这个文件的构造是这样的:每一行都代表一个账号,有几行就代表有几个账号在你的系统中! 不过需要特别留意的是,里头很多账号本来就是系统正常运作所必须要的,我们可以简称他为系统账号,不要随意删掉!
[root@server1 ~]# head -n 4 /etc/passwd 展示这个文件内前4行内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
每一行使用:
分隔开,依次说明
查看一下:
[root@server1 ~]# head -n 4 /etc/shadow
root:$6$qtpZGaPdXiH7S08F$LejOX3qsbImJgUi7XvRUc4GMm5S7EVvATJHwwBlLHOPMvkErQvq9xgvBa1kw0rGS0gCzMJASXfAxt1NuwnAkI0::0:99999:7:::
bin:*:17703:0:99999:7:::
daemon:*:17703:0:99999:7:::
adm:*:17703:0:99999:7:::
每一行同样使用:
分隔开,依次说明
[root@study ~]# useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
实验:
完全参考默认值建立一个用户,名称为 hop1
[root@server1 ~]# useradd hop1
[root@server1 ~]# ll -d /home/hop1
drwx------. 3 hop1 hop1 78 Mar 22 03:57 /home/hop1
默认会建立用户家目录,且权限为 700 !这是重点!
[root@server1 ~]# grep hop1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:hop1:x:1001:1001::/home/hop1:/bin/bash
/etc/shadow:hop1:!!:18342:0:99999:7:::
/etc/group:hop1:x:1001: 预设会建立一个与账号一模一样的群组名
其实系统已经帮我们规定好非常多的默认值了,所以我们可以简单的使用 useradd 账号
来建立使用者即可
这些默认值主要会帮我们处理几个项目:
在建立使用者账号时, 还需要使用passwd 账号
来给予密码才算是完成了用户建立的流程
实验:
假设已知道我的系统当中有个组名为 users ,且 UID 1500 并不存在, 请用 users 为初始群组,以及 uid 为 1500 来建立一个名为 hop2 的账号
[root@server1 ~]# useradd -u 1500 -g users hop2
[root@server1 ~]# ll -d /home/hop2
drwx------. 3 hop2 users 78 Mar 22 04:03 /home/hop2
[root@server1 ~]# grep hop2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:hop2:x:1500:100::/home/hop2:/bin/bash
/etc/shadow:hop2:!!:18342:0:99999:7:::
在这个实验中,我们建立的是指定一个已经存在的群组作为使用者的初始群组,因为群组已经存在, 所以在 /etc/group 里面就不会主动的建立与账号同名的群组了~
实验:
建立一个系统账号,名称为 hop3
[root@server1 ~]# useradd -r hop3
[root@server1 ~]# ll -d /home/hop3
ls: cannot access /home/hop3: No such file or directory
不会主动建立家目录
[root@server1 ~]# grep hop3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:hop3:x:988:982::/home/hop3:/bin/bash
/etc/shadow:hop3:!!:18342::::::
/etc/group:hop3:x:982:
在这里加上 -r 这个选项以后,系统就会主动将账号与账号同名群组的UID/GID 都指定小于 1000 以下。
使用 useradd 建立了账号之后,在预设的情况下,该账号是暂时被封锁的,该账号是无法登入的,/etc/shadow内的第二个字段是!!
开始设置密码:
[root@study ~]# passwd [--stdin] [账号名称] --所有人均可使用来改自己的密码 [root@study ~]# passwd [-l] [-u] [--stdin] [-S] \
> [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 --root 功能
选项与参数:
--stdin :可以透过来自前一个管线的数据,作为密码输入,对 shell script 有帮助!
-l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效;
-u :与 -l 相对,是 Unlock 的意思!
实验:
请 root 给予 hop2 密码:
[root@server1 ~]# passwd hop2
Changing password for user hop2.
New password: 输入密码,屏幕什么不显示
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password: 再来一次
passwd: all authentication tokens updated successfully.
尽管我输入的密码过于简单,但是还是修改了
!!用 hop2 登入后,修改 hop2 自己的密码
[hop2@server1 ~]$ passwd 后面没有加账号,就是改自己的密码!
Changing password for user hop2.
Changing password for hop2.
(current) UNIX password:
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
这里第一次输入了简单的密码,不可以,还是需要输入难一些的
切换至root,想要帮 hop2变更密码成为 abc543CC ,使用 standard input 建立用户的密码:
[root@server1 ~]# echo "abc543CC" | passwd --stdin hop2
Changing password for user hop2.
passwd: all authentication tokens updated successfully.
这个动作会直接更新用户的密码而不用再次的手动输入,好处是方便处理,缺点是这个密码会保留在 指令中, 未来若系统被攻破,人家可以在 /root/.bash_history 找到这个密码!
接着实验:
要让 hop2每 60 天需要变更密码, 密码过期后 10 天未使用就宣告账号失效:
[root@server1 ~]# passwd -S hop2
hop2 PS 2020-03-21 0 99999 7 -1 (Password set, SHA512 crypt.)
上面说密码建立时间2020-3-21,0 最小天数、99999 变更天数、7 警告日数与密码不会失效 (-1)
[root@server1 ~]# passwd -x 60 -i 10 hop2
Adjusting aging data for user hop2.
passwd: Success
[root@server1 ~]# passwd -S hop2
hop2 PS 2020-03-21 0 60 7 10 (Password set, SHA512 crypt.)
每 60 天需要变更密码,密码过期后 10 天未使用就宣告账号失效
想要暂停hop2使用密码登入主机?
[root@server1 ~]# passwd -l hop2
Locking password for user hop2.
passwd: Success
[root@server1 ~]# passwd -S hop2
hop2 LK 2020-03-21 0 60 7 10 (Password locked.)
使用passwd -u hop2
恢复
在使用 useradd 后,发现某些地方还可以进行细部修改,usermod
来进行账号相关数据的微调
[root@study ~]# usermod [-cdegGlsuLU] username
选项与参数:
-c :后面接账号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些账号的说明
-g :后面接初始群组,修改 /etc/passwd 的第四个字段
-l :后面接账号名称。亦即是修改账号名称, /etc/passwd 的第一栏
-u :后面接 UID 数字啦!即 /etc/passwd 第三栏的资料
-L :暂时将用户的密码冻结,让他无法登入
-U :将 /etc/shadow 密码栏的!拿掉
实验:
修改使用者 hop2的说明栏,加上Linux study
的说明
[root@server1 ~]# usermod -c "Linux study" hop2
[root@server1 ~]# grep hop2 /etc/passwd
hop2:x:1500:100:Linux study:/home/hop2:/bin/bash
使用者 hop2这个账号在 2020/12/31 失效
[root@server1 ~]# usermod -e "2020-12-31" hop2
[root@server1 ~]# chage -l hop2 | grep 'Account expires'
Account expires : Dec 31, 2020
我们建立 hop3这个系统账号时并没有给予家目录,请建立他的家目录
[root@server1 ~]# ll -d ~hop3
ls: cannot access /home/hop3: No such file or directory
确实没有家目录
[root@server1 ~]# cp -a /etc/skel /home/hop3
[root@server1 ~]# chown -R hop3:hop3 /home/hop3
[root@server1 ~]# chmod 700 /home/hop3
[root@server1 ~]# ll -a ~hop3
total 12
drwx------. 3 hop3 hop3 78 Mar 19 20:03 . 用户家目录的权限
drwxr-xr-x. 6 root root 54 Mar 22 04:38 ..
-rw-r--r--. 1 hop3 hop3 18 May 22 2018 .bash_logout
-rw-r--r--. 1 hop3 hop3 193 May 22 2018 .bash_profile
-rw-r--r--. 1 hop3 hop3 231 May 22 2018 .bashrc
drwxr-xr-x. 4 hop3 hop3 39 Mar 19 20:03 .mozilla
使用 chown -R 是为了连同家目录底下的用户/群组属性都一起变更的意思
使用 chmod 没有 -R ,是因为我们仅要修改目录的权限而非内部文件的权限
userdel
[root@study ~]# userdel [-r] username
选项与参数:
-r :连同用户的家目录也一起删除
实验:删除 hop2 ,连同家目录一起删除
[root@server1 ~]# userdel -r hop2
userdel: user hop2 is currently used by process 62004
[root@server1 ~]# cd /home
[root@server1 home]# ll -al
total 4
drwxr-xr-x. 5 root root 42 Mar 22 04:46 .
dr-xr-xr-x. 17 root root 224 Mar 19 20:10 ..
drwx------. 15 feng feng 4096 Mar 22 04:45 feng
drwx------. 3 hop1 hop1 78 Mar 22 03:57 hop1
drwx------. 3 hop3 hop3 78 Mar 19 20:03 hop3
total 12
drwx------. 3 hop3 hop3 78 Mar 19 20:03 . 用户家目录的权限
drwxr-xr-x. 6 root root 54 Mar 22 04:38 …
-rw-r–r--. 1 hop3 hop3 18 May 22 2018 .bash_logout
-rw-r–r--. 1 hop3 hop3 193 May 22 2018 .bash_profile
-rw-r–r--. 1 hop3 hop3 231 May 22 2018 .bashrc
drwxr-xr-x. 4 hop3 hop3 39 Mar 19 20:03 .mozilla
使用 chown -R 是为了连同家目录底下的用户/群组属性都一起变更的意思
使用 chmod 没有 -R ,是因为我们仅要修改目录的权限而非内部文件的权限
##### 删除用户
userdel
```xml
[root@study ~]# userdel [-r] username
选项与参数:
-r :连同用户的家目录也一起删除
实验:删除 hop2 ,连同家目录一起删除
[root@server1 ~]# userdel -r hop2
userdel: user hop2 is currently used by process 62004
[root@server1 ~]# cd /home
[root@server1 home]# ll -al
total 4
drwxr-xr-x. 5 root root 42 Mar 22 04:46 .
dr-xr-xr-x. 17 root root 224 Mar 19 20:10 ..
drwx------. 15 feng feng 4096 Mar 22 04:45 feng
drwx------. 3 hop1 hop1 78 Mar 22 03:57 hop1
drwx------. 3 hop3 hop3 78 Mar 19 20:03 hop3
使用 userdel 的时机通常是——真的确定不要让该用户在主机上面使用任 何数据了!