3.1 用户与组的概念
Linux是个多用户多任务的分时操作系统,所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也能帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的用户名和用户口令。用户在登录时键入正确的用户名和口令后,才能进入系统和自己的主目录。
用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。

3.2 用户的管理
在linux下,共有3种用户类型:
1)超级管理员账号(root),该用户装完系统后,默认就存在
2)系统账号,系统服务和内核进程所需要的用户
3)普通账号,也就是给用户使用的账号

3.2.1 创建用户
创建一个用户,使用useradd命令,关于此命令有一些选项是需要掌握的:
1)-c 添加描述信息
3)-g 指定主要组
4)-G 指定附属组
2)-s 指定shell
3)-u 指定UID,注意,只能使用1000以上,并且不能和其它UID冲突

例1
[root@server ~]# useradd user1

创建一个用户,叫user1

[root@server ~]# useradd -c "this is a test user" -s /usr/bin/bash -u 1002 user2

创建一个用户叫user2

给这个用户添加一个描述信息:this is a test user

指定该用户使用的shell是:/usr/bin/bash

指定该用户的UID为1002

当我们创建了一个用户之后,这些用户信息被存放到哪里去了呢?在/etc/passwd文件中,我们可以使用文件查看命令查看一下这个文件:
[root@server ~]# tail -n 2 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1002:1002:this is a test user:/home/user2:/usr/bin/bash

通过上面可以发现,用户信息在/etc/passwd文件中,都是以一行一个用户的形式进行保存,并且使用冒号(:)将该用户的信息分隔成7段,那这7段分别代表什么意思呢?下面按从左到右的顺序进行解释:
1)用户名
2)本来这是用户密码所在位置,但考虑到安全因素,将密码保存到其它位置了,这里就用x填充
3)用户的UID
4)GID,用户的主要组ID,一个用户只能属于一个主组,但可以属于多个附加组
5)此用户的描述信息
6)此用户的家目录
7)此用户的shell类型

3.2.2 更改用户
更改用户信息使用usermod命令,该命令也有一些选项需要掌握:
1)-g 更改主要组
2)-G 更改附属组,如果之前已经指定过附属组,会把该用户从之前附属组中删除
6)-s 更改用户的shell

例2
[root@server ~]# usermod -s /user/sbin/nologin user1

更改user1用户的shell类型为:/usr/sbin/nologin

3.2.3 删除用户
删除一个用户,使用userdel命令,这里,需要注意一个选项:-r,同时删除用户和家目录,如果不加这个选项,只删除用户,而家目录还在

例3
[root@server ~]# userdel -r user1

删除用户user1,并且将该用户的家目录一起删除

3.2.4 修改用户密码
修改用户密码,使用passwd命令。

例4
[root@server ~]# passwd user2

修改user2用户的密码

当我们为一个用户设置了密码,那它的密码又保存到哪里了呢?在/etc/shadow文件中,我们可以查看下该文件:
[root@server ~]# tail -n 1 /etc/shadow
user2:$6$WPZQOC0.$o62QaPlDaZYTOaQzam96qRkC/13xcZpt2Tbe.urwqipl930klSsti7sGN3fa/mmWIDiapx.IFBCUzfhzRHDbV/:17229:0:99999:7:::

通过上面可以发现,用户密码也是按一行一个用户的方式保存在/etc/shadow文件中,并且也是以冒号(:)为分隔符,将相关信息分隔成9段,下面我们还是从左到右的方式来解析各段所代表的意思:
1)用户名
2)密码,我们会发现,这里所显示的并不是我们输入的密码,这是因为考虑到安全因素,保存到文件中的密码都是经过hash加密过的。如果此处是两个叹号(!!),表示这个用户没有设置密码
3)上次更改密码的日期,这个时间是从1970年1月1日算起,到修改密码时,中间的总天数
4)最短密码期限,从最近一次更改密码的日期算起,再过多少天之后才能再次更改密码,0表示无最短期限,随时可以改
5)最长密码期限,必须在这个期限内更改密码,否则过了这个期限,密码将过期
6)密码警告期限,密码过期前多少天开始提醒用户更改密码,0表示不提醒
7)密码过期之后的宽限天数,也就是说,密码过期之后,在这个期限内,密码还是可以用的,但如果过了这个期限,还不更改密码,密码也就真的失效了,只能找管理员改密码了。
8)账号到期时间,也是从1970年1月1日算起,至到期时间,中间的总天数
9)保留

3.3 组的管理
3.3.1 创建组
创建组使用groupadd命令

例1
[root@server ~]# groupadd group1

创建一个组,叫group1

当我们创建了一个组,该组的信息会保存到/etc/group文件中,可以查看一下:
[root@server ~]# tail -n 1 /etc/group
group1:x:1003:

3.3.2 添加用户到组
添加用户到组,我们有两个命令可实现:gpasswd和usermod

例2
[root@server ~]# gpasswd -a user2 group1

添加用户user2到组group1

[root@server ~]# usermod -G group1 user1

修改用户user1的信息,将自己加入到group1组中

3.3.2 删除组
删除组,使用groupdel命令

例2
[root@server ~]# groupdel group1

删除组gropu1

3.4 练习
要求:
1)创建一个用户user1,并指定该用户的shell为/usr/sbin/nologin
2)创建一个组group1,并将用户user1加入到该组

第4章 文件和目录的管理
在linux下,一切皆文件,文件就要有一定的组织方式,linux是以树形结构组织文件,FHS标准规定了每个目录下面应该放哪些内容,这样做的好处是便于系统管理,因为linux系统有很多发布版本,比如:redhat、ubuntu、fedora、suse等等,如果每个发行版本都自己设计一套文件组织方式,这将造成用户切换发行版本带来不便。
4.1 目录结构
既然linux是以树形结构组织文件,树就有一个根,在linux系统中所有其它目录都属于根下的一个分支

[root@server ~]# ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr

1)/

根目录,所有的文件和目录,皆是由根目录延伸。

2)/boot

开机启动过程所需的文件,比如:内核文件,引导文件,驱动文件,boot目录一般在200M左右

3)/usr

编辑安装的第三方软件、共享的库,包括文件和静态只读程序数据,重要的子目录:/usr/bin,用户命令;/usr/sbin,系统管理命令;/usr/local,本地自定义软件。

4)/etc

主要是服务的配置文件

5)/var

动态变化的文件,如:数据库、缓存目录、日志文件、打印机后台处理文档和网站内容

6)/run

自本次系统启动以来启动的进程的运行时数据。包括进程ID文件和锁定文件等。此目录中的内容在重启时会重新创建。

7)/root

root用户的家目录

8)/home

普通用户的个人数据和配置文件的主目录,每切换用户时,首先就是切换到用户的家目录,每个用户的家目录里面有这个用户特有的环境变量,可以用ls -a查看有四个.bash开头的文件,就是这个用户的环境变量。比如:在root家目录下.bash_profile定义一个环境变量,export dd=test,在其它用户echo $dd,是不能输出的。工作中有可能需要为某些用户设置独有的环境变量。

9)/proc

放置的是内存数据,不会占用磁盘空间,内存里有什么:1.系统开机时的硬件信息,比如;CPU的信息:/proc/cpuinfo,内存信息:/pro/meminfo。2进程信息,数字命名的文件都是进程的信息,数字代表这个进程的PID。

10)/sys

对proc的归纳、结合、整理,。这是历史原因,为了兼容以前的版本。

11)/tmp

临时文件使用的全局可写目录。10天内未访问、未修改的文件将自动删除。还有一个临时目录,/var/tmp,该目录下的文件如果30天内未访问、修改,将自动删除

12)/dev

设备文件目录,供系统用于访问硬件

13)/mnt

一般会把外设设备挂载目录

14)/bin、/sbin

存放二进制可执行文件。比如系统命令

15)/lib、/lib64

系统或服务运行中,所需的库文件

4.2 目录的管理
对于目录而言,它所管理的仅仅是该目录下的文件或子目录的名字而已

4.2.1 查看目录
查看一个目录或该目录下的子目录和文件,我们使用ls命令

Ls命令选项
-l 查看目录下子目录和文件的权限、拥有者、拥有组、大小等详细信息
-d 查看指定目录本身的属性
-h 以人类可读的方式显示大小,按大小排序:-Sh
-a 包含隐藏文件在内的所有文件,以点(.)开头的都是隐藏文件。
-R 递归,包含子目录的内容
-t 按时间排序,时间越近的越靠前,如果想反过,时间越久的越靠前,-tr

例1
[root@server ~]# ls /root
anaconda-ks.cfg

查看/root目录下所有子目录和文件的名字

[root@server ~]# ls -l /root
total 4
-rw-------. 1 root root 1200 Mar 1 14:15 anaconda-ks.cfg

查看/root目录下所有子目录和文件的属性

[root@server ~]# ls -d /root
/root

查看/root目录本身的名字

[root@server ~]# ls -ld /root
dr-xr-x---. 2 root root 4096 Mar 1 17:12 /root

查看/root目录下的所有子目录和文件的属性

4.2.2 创建目录
创建目录,使用mkdir命令

mkdir命令选项
-p 同时创建多级目录
-m 创建目录同时,给予权限,比如:mkdir -m 777 /tmp/tt

例2
[root@server ~]# mkdir /root/doc1

在/root目录下创建一个子目录,叫doc1

[root@server ~]# mkdir -p /root/doc2/test

在/root目录下创建一个子目录,叫doc2,并且在doc2目录下再创建一个子目录,叫test

4.2.3 目录的复制
目录的复制,使用cp命令

例3
[root@server ~]# cp -r /root/doc2 /tmp/

复制/root/doc2目录到/tmp/目录下

-r,表示递归,将目录及目录下的文件和子目录一同复制,cp的本意是复制一个文件。

[root@server ~]# cp -r /root/doc1 /tmp/d1

复制/root/doc1目录到/tmp目录下,并且改个名字,叫d1

4.2.4 目录的移动
目录的移动,使用mv命令

例4
[root@server ~]# mv /root/doc1 /mnt/

将/root/doc1目录移动到/mnt目录下.

[root@server ~]# mv /root/doc2/ /mnt/d2

将/root/doc2目录,及子目录移动到/mnt/目录下,并且改名叫d2

4.2.5 删除目录
删除目录操作,使用rmdir和rm命令,不过要注意,执行删除操作之前,一定要先确认好想要删除的东西,否则没有后悔的机会

rmdir命令,只能删除空目录,如果要删除的目录下还存在子目录或文件,必须先把子目录和文件删除,才能删除该目录

rm命令,本意是删除一个文件,如果要删除一个目录,需要加上选项-r,表示递归删除,先删除该目录下的子文件和子目录,再删除指定目录。

例3
[root@server ~]# rm -r /root/doc1
rm: remove directory ‘/root/doc1’? y

删除/root/doc1目录,要求输入y确认

[root@server ~]# rm -rf /root/doc2

强制递归删除目录/root/doc2,并且不需要确认

4.3 文件的管理
4.3.1 创建文件
创建文件,使用touch命令

例1
[root@server ~]# touch /root/file1

在/root目录下创建一个空文件,叫file1

注意:如果文件已经存在,不会改变文件内容,只会改变文件的修改时间

4.3.2 复制文件
文件的复制使用cp命令

例2
[root@server ~]# cp /root/file1 /tmp/

复制文件/root/file1到/tmp目录下

4.3.3 移动文件
文件的移动使用mv命令

例3
[root@server ~]# mv /root/file1 /mnt/

移动/root/file1文件到/mnt目录

4.3.4 删除文件
文件的删除使用rm命令

例4
[root@server ~]# rm -f /mnt/file1

删除文件/mnt/file1

4.3.2 查看文件
在linux中,查看文件的命令有很多,如cat、more、less、head、tail等

例5
[root@server ~]# cat /etc/passwd

将/etc/passwd文件的内容全部输出到当前shell

[root@server ~]# more /etc/passwd

同样将/etc/passwd文件内容输出到当前shell,但是,它是分页显示

使用空格键往下翻页

使用enter键往下翻一行

使用q键退出

[root@server ~]# less /etc/passwd

同样以分页的形式将/etc/passwd文件内容输出到当前shell,但是

使用空格键往下翻页

使用enter键往下翻一行

使用PgUp键往上翻页

使用q键退出

注意:more命令和less命令的区别,more命令只能往下翻页,并且所有内容完成就结束了,而less命令是可以循环查看的

[root@server ~]# head /etc/passwd

只查看/etc/passwd文件的头10行内容

[root@server ~]# head -n 20 /etc/passwd

查看/etc/passwd文件的头20行

-n,指定想查看的行数

[root@server ~]# tail /etc/passwd

查看/etc/passwd文件的最后10行

[root@server ~]# tail -n 20 /etc/passwd

查看/etc/passwd文件的最后20行

-n,指定想查看的行数

4.4 VIM的使用
vim是linux系统下标准的文本编辑器,相当于windows系统中的记事本一样,但vim的功能却要强大的多。vim是我们使用linux系统不能缺少的工具。

例1
[root@server ~]# cp /etc/passwd /tmp/

拷贝/etc/passwd文件到到/tmp/目录下

[root@server ~]# vim /tmp/passwd

使用vim,打开/tmp/passwd文件

当我们使用vim打开一个文件后,默认处于命令行模式,此时,只能使用命令对文件内容进行简单的修改。也可以输入相应命令进入其它模式,对文件进行操作,下面我们就来讲讲vim的几种模式。
注意:在不同模式之间切换,必须先回到命令行模式,再输入相应的命令进入另一个模式。返回到命令行模式,使用esc键。

4.4.1命令行模式
yy 复制一行,复制10行:10yy
p 粘贴到光标所在的下一行,10p就是把复制的内容粘贴10次
P 粘贴到光标所在的上一行
dd 剪切光标所在行,100dd,剪切光标以下100行
d1G 从光标所在行,删除到第一行
dG 从光标所在行,删除到最后一行
D 从光标处剪切到行尾,这时,p,会在光标后面粘贴
gg 光标回到第一行行首
G 光标到最后一行行首
$ 移动光标到当前行尾
0 数字零,移动光标到当前行首
x 删除光标所在字符,2x,从光标往后删除2个字符
X 往前删
r 替换光标处单个字符,r2,把光标处字符替换成2
R 进入替换模式,一直替换,除非按esc,回到命令行模式
u 撤消上一次操作
ctrl+r 恢复上一次的撤消操作
. 重复上一次操作
h 向左移动
j 向下移动
k 向上移动
l 向右移动
ctrl+f 向下一页
ctrl+b 向上一页

4.4.2编辑模式
从命令行模式进入编辑模式的方式:
i 在光标当前位置的前面插入字符
I 光标移动当前行的行首
a 光标往后退一个字符
A 光标移动到行尾
o 光标所在行的下一行新起一行
O 光标所在行的上一行新起一行

4.4.3末行模式
:wq 保存并退出,或:x
:wq! 强制保存退出,对一个只读文件。不过到底能不能写入,还是跟权限有关
:w f1 另存到f1这个文件
:q 退出
:q! 强制不保存退出
:set nu 显示行号
:set nonu 取消行号
:9 光标移动到第9行行首
:1,$s/root/togogo/g 从第一行到最后一行,把root替换成togogo
:! ls /boot 叹号,表示会暂时离开vim,然后去执行叹号后面的命令
:r /etc/passwd 把r后面的文件,读取到当前vim编辑器
:r ! ls /boot 把ls /boot命令的输出,读取到当前vim编辑器
/ 往光标所在行之下搜索关键字
? 往光标所在行之上搜索关键字
n 下一个关键字
N 上一个关键字