目录
一、Linux简介
Linux介绍
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。
综上所述:Linux是一款操作系统,免费,开源, 安全,高效,稳定, 处理高并发非常强悍的操作系统,现在很多的企业级的项目都部署到Linux服务器运行。
Linux的分类
根据市场需求Linux大致分为两个版本,一个是主要服务于大众用户的图形化版本:
另一款是面向服务器端的服务器版本
根据发行版本分类
根本发行版本的分类大致有:ubuntu、redhat、centos、lubuntu、freebsd、deepin....
Red hat和Centos
红帽的全称是Red Hat Enterprise Linux,简称Red Hat或RHEL,红帽Linux(RHEL)是Red Hat专为企业设计的基于Linux的操作系统。RHEL可以在桌面,服务器,虚拟机管理程序或云中运行。Red Hat是世界上使用最广泛的Linux发行版之一。
RedHat 是用 LINUX 核心构架的一个操作系统。RedHat Linux 是目前世界上使用最多的 Linux 操作系统。因为它具备最好的图形界面,无论是安装、配置还是使用都十分方便,而且运行稳定,因此不论是新手还是老玩家都对它有很高的评价。
CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。
区别如下:
- 无偿和有偿的区别:redhat是收费版,centos是免费版;
- redhat一个提供商业的解决方案 ,centos一个不提供。
- CentOS是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。它与RedHat使用同样的源代码;它完全就是对Red Hat AS进行改进后发布的!各种操作、使用和RED HAT没有区别!
二、Linux的安装
虚拟机简介
虚拟机是一个软件,它可以使你在一台真实PC机器上同时运行二个或更多的不同的操作系统。它可以模拟 一个标准PC环境。这个环境和真实的计算机一样,都有芯片组、CPU、内存、显卡、声卡、网卡、软驱、硬盘、光驱、串口、并口、USB控制器。
简单的来说,虚拟机就是用来模拟一台真实的电脑,我们实际在学习过程中,有的时候需要多态电脑模拟真实的环境,那么不可能在硬件层面上真正的提供多态电脑,这个时候我们可以使用虚拟机来帮我们虚拟出一台电脑来;
目前市场上流行的虚拟机有两种:
1)VMware(威睿)公司的虚拟机软件,功能强大,收费产品,有30天试用期,分为64位和32位两种版本,专注企业级用户,性能稳定功能强大,操作简单,公司创建于1998年。
2)VitrualBox(Oracle)公司的虚拟机软件,免费开源软件,体积小巧,专注个人用户,对Linux系统支持好,硬件要求远不及VWware,系统资源占用率低
3)Microsoft Virtual PC:Windows Virtual PC是最新的Microsoft虚拟化技术。使用此技术可在一台计算机上同时运行多个操作系统。
tips:我们本次教程采用的是VMware
VMware安装Centos7
Centos7镜像地址:
新建虚拟机
1.新建虚拟机---选择iso镜像文件
2.选择存放路径
3.设置虚拟机磁盘大小
4.点击完成
安装Centos
1.开始安装
2.选择语言
3.选择磁盘
4.设置网络连接
4.设置root账号密码
5.等待安装
6.安装完毕
7.登录Linux
快照
我们以后要在虚拟机上做非常多的操作,其中很有可能会损坏某些文件,我们可以在给虚拟机拍摄快照,记录虚拟机这个时候的一个状态,以后误操作虚拟机后可以通过恢复快照的形式来恢复到以前的状态
恢复快照
安装图形化工具
我们在学习过程中,可以安装Linux提供的图形化桌面,让我们操作更加便捷
输入命令:
yum groupinstall -y "GNOME Desktop"
这个过程比较漫长,需要下载安装大量的文件
安装完成之后输入命令:
startx
启动图形化工具
VM的网络管理
我们知道VM中的操作系统是我们虚拟出来的,具体的硬件也是有VM虚拟的,关于硬件的配置如下:
关于其他硬件的参数都比较简单,如果想要虚拟机的性能比较好,可以酌情调高(占用的资源也会随之增加),VM安装完毕之后,会有两个网卡,分别是VMware Network Adapter VMnet1
和VMware Network Adapter VMnet8
其实除了VMnet1、VMnet8还有一个VMnet0网卡,只不过这个网卡默认是隐藏状态的;
在VM中,网络管理主要有三种模式,分别为bridged(桥接模式)、NAT模式(网络地址转换模式)、host-only(仅主机模式)
桥接模式
在桥接模式中,虚拟的操作系统就是一台独立于局域网中的一台主机,宿主机就相当于是一台网络交换机,虚拟机连上宿主机后,可以访问局域网内的任意一台机器,但是需要在虚拟机中手动配置IP地址、子网掩码、DNS服务器等,而且必须要和宿主机在同一网段;桥接模式一般用于需要在局域网内容真正独立出一台机器的情况;
tips:在桥接模式中,默认使用的是VMnet0网卡
选择好桥接模式后,重启虚拟机,输入命令:
ip addr # 查看虚拟机的ip地址
在查看宿主机的ip地址:
ipconfig
发现虚拟机的ip地址与宿主机的在同一个网段,此时虚拟机在局域网中是一个独立的主机,可以使用局域网内的任意一台主机与之通信
我们也可以查看VM的网络编辑器,点击VM工具栏上的编辑--虚拟网络编辑
点击更改设置:
NAT模式
NAT:全称Net Address Transform
,网络地址转换,NAT模式是通过宿主机的网络来访问公网,NAT模式下虚拟机中的IP配置信息是由VMnet8虚拟网络的DHCP服务器提供的;由于NAT模式下,虚拟机是借助于宿主机的网络来访问公网的,在局域网内并不是一台独立的主机,因此不能与局域网内其他主机进行通信;NAT的优势在于虚拟机接入互联网简单,不需要进行任何的配置,只要宿主机能够访问互联网即可;
tips:在NAT模式中,默认使用的是VMnet8网卡;
重启虚拟机:
reboot
查看ip:
ip addr
打开虚拟网络编辑器:
更改网段记得重启
需要注意的是,在NAT模式下,即使虚拟机的网段改为了12(和宿主机同一个网段),在12段的其它机器也还是不能与虚拟机进行通信,因为在NAT模式下,虚拟机在局域网并不是一台独立的主机;
仅主机模式
仅主机模式,也称host-only模式,在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模式。在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。
tips:在仅主机模式中,默认使用的是VMnet1网卡;主机和虚拟机是通的,但是虚拟机和主机不是通的
在host-only模式下,虚拟系统的TCP/IP配置信息(如IP地址、网关地址、DNS服务器等),都是由VMnet1(host-only)虚拟网络的DHCP服务器来动态分配的。 如果你想利用VMWare创建一个与网内其他机器相隔离的虚拟系统,进行某些特殊的网络调试工作,可以选择host-only模式。
三、客户端工具
在实际开发中,Linux服务器都在其他的地方,我们要通过windows客户端工具远程去连接Linux并操作它;市面上有许多的Linux客户端连接工具,让我们可以更便捷的操作Linux;连接 Linux的windows客户端工具有很多,企业中常用的有Xshell、Putty、secureCRT、SSH Secure等。
1.Xshell连接工具
2. XFTP文件上传工具
四、Linux的目录结构
我们启动Linux操作系统时,默认所在的目录是root目录,简称:~,如图所示:
cd命令为切换目录
但root目录并不是Linux的根目录,linux的目录结构如下:
系统目录的解释:
- /boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。
- /etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。
- /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
- /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中
指令集合:
- /bin:存放着最常用的程序和指令
- /sbin:只有系统管理员能使用的程序和指令。
外部文件管理:
- /dev :Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。
- /media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。
- /mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
临时文件:
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
- /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。
- /tmp:这个目录是用来存放一些临时文件的。
账户:
- /root:系统管理员的用户主目录。
- /home:用户的主目录,以用户的账号命名的。
- /usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
- /usr/bin:系统用户使用的应用程序与指令。
- /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src:内核源代码默认的放置目录。
运行过程中要用:
-
/var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
- /proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改
扩展用的:
- /opt:默认是空的,我们安装额外软件可以放在这个里面。
- /srv:存放服务启动后需要提取的数据(不用服务器就是空)
进入根目录:
五、Linux基本命令
目录操作
创建
语法:
mkdir 目录名
示例:
mkdir aaa # 在当前目录下创建aaa目录
mkdir ./bbb # 在当前目录下创建bbb目录
mkdir /ccc # 在根目录下创建ccc目录
mkdir /root/ddd # 在root目录下创建ddd目录
剪切
语法:
mv 原来的目录 新的目录
示例:
mv aaa /aaa # 将当前目录下的aaa文件夹移动到根命令下,文件夹名称还是叫aaa
修改
在Linux中,没有专门修改文件夹目录的命令,但是我们可以借助mv命令(剪切)来实现
语法:
mv 原来的目录 新的目录
示例:
mv bbb abc # 将aaa目录移动到当前目录,目录名还是叫abc
拷贝
语法:
cp [参数] 目录 目录的新位置
- 参数:
- -r:递归拷贝,拷贝目录下的文件及子目录、子目录下的文件、孙目录等...
示例:
cp -r bbb b1
删除
语法:
rm [参数] 目录
- 参数:
- -r:递归删除,将目录下的所有文件夹及子目录等全部删除(删除文件夹必须加-r参数,即使空目录)
- -f:强制删除目录,不会进行展示
示例:
rm -r b1
示例2:
rm -rf bbb
查看
语法:
ls [参数]
- 参数:
- -l:以详细形式查询当前目录下所有文件和目录,不包括隐藏文件和目录
- -a:以精简形式查询当前目录下所有文件和目录,包括隐藏文件和目录
示例1:
ls # 以精简形式查看当前目录下的文件和目录,不包括隐藏内容
示例2:
ls -l # 以详细形式查询当前目录下所有文件和目录,不包括隐藏文件和目录
示例3:
ls -a # 以精简形式查询当前目录下所有文件和目录,包括隐藏文件和目录
示例4:
ls -al # 以详细形式查询当前目录下所有文件和目录,包括隐藏文件和目录
搜索
语法:
find [目录] -name '条件'
示例:
find /root -name 'a' # 在root目录(包含子目录)下查询目录名为a的目录
find /root -name 'a*' # 在root目录(包含子目录)下查询目录名包含a的目录
如果目录太多,想要停止查看可以按住ctrl+c
强行终止程序执行
# 从当前目录查询查询目录名包含a的目录或文件
find -name 'a*'
文件操作
创建
语法:
touch 文件
示例:
touch a.java # 在当前目录创建.java文件
touch /root/b.html # 在/root目录下创建b.html文件
touch /c.xml # 根目录下创建c.xml文件
查看
rm [参数] 文件
语法:
cat /more/head/tail 文件名
准备一篇文章:article.txt;使用XFTP工具,上传article.txt
到linux系统中
示例:
cat article.txt # 查询的是最后一页的内容
more article.txt # 从第一页开始查看文件内容,按回车键一行一行的看,按空格健一页一页的看
head article.txt # 查看文件的前10行内容
tail article.txt # 查看文件的后10行内容
head -n 18 article.txt # 查看文件的前18行内容
head -n 18 article.txt # 查看文件的后18行内容
查看文本过程中,按q键退出查看
删除
语法:
rm [参数] 文件
参数:
-r
:递归删除,将目录下的所有文件夹及子目录等全部删除(删除文件夹必须加-r
参数,即使是空目录)f
:强制删除目录,不会进行提示
示例:
rm -f a.java # 删除a.java
rm -f a.* # 删除a开头的所有文件
mkdir abc
touch a.java
touch a2.java
touch a3.java
touch abc.java
touch bc.java
rm -f ./* # 删除当前目录下的所有文件
拷贝
语法:
cp 文件名 新文件名
示例:
cp aa.java aaa.java
vi编辑器
vi 编辑器是linux下的vi 是一种文字编辑器,后来的升级版本是vim。vi 分为三种模式:命令模式、编辑模式、末行模式。
所有的 Linux 系统都会内建 vi 文本编辑器。Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
- 命令模式:
当执行vi/vim指令后,将会进入命令模式;该模式是进入 vi 编辑器后的默认模式。任何时候,不管用户处于何种模式,按下Esc
键即可进入命令模式。在命令模式下,用户可以输入 vi 命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释。若输入的字符是合法的 vi 命令,则 vi 在接受用户命令之后完成相应的动作。
tips:命令模式下,所输入的命令并不回显在屏幕上。若输入的字符不是 vi 的合法命令,vi 会响铃报警。
- 编辑模式:
在命令模式下输入i
、a
、o
、r
、s
等命令都可以进入编辑模式。在该模式下,用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按下Esc
键即可。
- 末行模式:
在编辑模式下,用户按下ESC键退出编辑模式(进入了命令模式),按:
键即可进入末行模式,此时 vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个:
作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。
末行模式的指令执行完后,vi 自动回到命令模式。
语法:
vi/vim 文件名
命令模式
vi a.java # 回车进入命令模式
命令模式的指令如下:
i
:插入数据,进行数据的插入a
:数据的追加o
:打开文件,插入空白行s
:删除当前光标指向的数据,功能和i
一致r
:替换文件,进行数据的替换
通过上面的参数我们可以知道,大部分指令和i
功能一致,都是插入,一般来说,我们使用i
的频率较多
编辑模式
输入完命令模式的命令之后,vi编辑器进入编辑模式
末行模式
在编辑模式下,输入esc键退出编辑模式,输入:进入末行模式
末行模式的命令如下:
- wq:保存并且退出
在末行模式下,输入命令如下:
:wq
vi将先保存文件,然后退出vi返回到shell命令行。
- q:代表退出
在末行模式下,输入命令如下:
:q
如果退出时当前编辑文件尚未保存,则vi并不退出,而是继续等待用户的命令,并且会在显示窗口的最末行说明如下信息:
输入回车键,在输入i,继续编辑
- q!:代表强制退出
在末行模式下,输入命令如下:
:q!
该命令不论文件是否改变都会强行退出vi编辑器,刚刚编辑的内容将丢失,文件也不会被保存下来,对于此命令用户应当慎用
- w!:将此文件的内容另存为一份新的内容
在末行模式下,输入命令如下:
:w! 新文件名
该命令与:w命令相同,所不同的是,即使指定的新文件存在,vi编辑器也会用当前编辑文件对其进行替换,而不再询问用户。因此,此命令同样要慎用
- x:
在末行模式下,输入命令如下:
:X
若当前编辑文件曾被修改过,则vi会保存该文件。否则vi直接退出,不保存该文件。
压缩与解压
我们都知道在windows操作系统下,压缩文件的扩展名为.zip、.rar等,在Linux操作系统下,为.tar、.gz、.tar.gz等
压缩
语法:
tar [参数] 打包压缩后的文件名 要打包压缩的文件
- 参数:
- -c:创建新的文件(必选项)
- -v:输出文件清单(可选项)
- -f:设置压缩包的文件名(必选项)
示例:
tar -cvf test.tar a.java abc.java
解压
语法:
tar [参数] 压缩文件
- 参数:
- -x:取出压缩包中文件中的内容(必选项)
- -v:输出文件清单(可选项)
- -f:设置要操作的文件名(必选项)
- -C:设置解压的路径(可选项),默认解压到压缩包所在的目录
mkdir hello
tar -xvf test.tar -C ./hello # 解压test.tar压缩包,压缩包中的文件存放到hello文件夹中
其他命令
关机与重启
shutdown # 1分钟后关机
shutdown -h 10 # 10分钟后关机
shutdown -h now # 立即关机
shutdown now # 立即关机
shutdown -r now # 立即重启
reboot # 立即重启
halt # 立即关机
sync # 把内存中的数据同步到磁盘
日期相关命令
1.日期命令
命令:data
- 参数:
- %F:年月日
- %T:时分秒
- %Y:获取年
- %m:获取月
- %d:获取日
- %H:获取小时
- %M:获取分钟
- %S:获取秒
- %s:1970年01月01日到现在的秒数
2.日历命令
语法:
cal [参数] [[月份]年份]
- 参数:
- -1 输出显示当前月(默认)
- -3 输出显示前一个/当前/下一个月
- -s 输出显示星期天作为一周的第一天(默认)
- -m 输出显示星期一作为一周的第一天
- -j 输出显示Julian日历(从一月1号计数为1起,每一天计数加1)
- -y 显示当前日历
查询2021年3月份的日历,并且以周一作为一周的第一天:
cal 3 2021 -m
查看帮助文档
当我们对某个指令不熟悉时,我们可以使用 Linux 提供的帮助指令来了解这个指令的使用方法
man [命令]
man shutdown # 查看shutdown命令的用法
man tar # 查看tar命令的用法
man ls # 查看ls命令的用法
同时也可以使用help进行帮助文档的查询:
cal --help # 查看cal命令的帮助文档
less命令
less命令与more命令类似,都是用于浏览文件的,不同的是使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动;而且 less 在查看之前不会加载整个文件。在浏览超大型文本文件时具有较高的效率;
语法:
less [参数] 文件
- 参数:
- -m:显示查看的进度百分比
- -N:显示每行的行号
- +/pattern:在文档中搜索字符串(pattern),并从这一行开始显示
- -i:忽略搜索时的大小写
示例:
less -article.txt
[输入参数]
- 输入参数:
- Q:退出less 命令
- w:向上滚动半页
- d:向下滚动半页
- 上光标:向上滚动一行
- 下光标:向下滚动一行
- 空格键:向下滚动一页
- 回车键:向下滚动一行
- [pagedown]: 向下翻动一页
- [pageup]: 向上翻动一页
- G:跳到文件尾部
- g:跳到文件头部
示例2:
less -mNi +/user UserServlet.java
>指令和>>指令
>和>>指令功能一致,不同的是>>的可以追加内容;>只是将命令的结果集写入到文件,并不会产生追加效果;
语法:
ll > info.txt # 将ll命令的结果写入info.txt文件中
cat abc/a.java > test.java
cal -y > cal.txt
六、用户管理
Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
在Linux中,用户是属于某个组的,创建用户首先得让用户属于某个组
关于用户和组的相关命令
- cat /etc/shadow:密码和登录信息(加密的)
- cat /etc/group:查看组信息
解释:
root:x:0:
组名:x:组ID:
tips:x并无其他特殊含义
- cat /etc/passwd:用户账户信息
解释:
root:x:0:0:root:/root:/bin/bash
用户名:x:用户ID:组ID:该用户的组目录:命令解释程序
添加用户
useradd 参数 用户名
- 参数:
- -g:用户组,指定用户所属的用户组,如省略该参数,则会建立和新用户名同名的组。
示例1:创建zhangsan用户:
useradd zhangsan # 创建zhangsan用户,默认创建同名组
示例2:创建lisi用户,属于zhangsan组
useradd lisi -g zhangsan
查看组:
cat /etc/group
查看用户:
cat /etc/passwd
tips: 发现和zhangsan用户同属于1000组
分配密码
语法:
passwd 用户名
切换zhangsan用户登录:
logout/exit:退出当前用户
Tips:如果使用xshell连接工具会直接退出
修改xshell连接工具参数:
使用whoami可以查看当前登录的用户:
切换登录用户
语法:
su 要切换的用户名
示例:
su lisi
修改用户
usermod -l 新登录名 原登录名
示例:
usermod -l zs zhangsan
修改用户名时,必须当前用户处于退出登录状态,如果正在登录的用户则会出现如下信息:
注意:修改了用户名之后,用户所属的组名以及家目录不变:
组名:
删除用户
语法:
userdel 用户名
示例1:删除用户wangwu,保留家目录
useradd wangwu # 创建wangwu账号,wangwu组,wangwu家目录
userdel wangwu # 删除wangwu账号,wangwu组(家目录还在)
默认情况下,删除用户时,用户所在的同名的组也会被删除;所以查看/etc/group时,发现wagnwu组不见了,但wangwu的家目录还在,可以删除家目录:
rm -rf wangwu
Tips:一般来说,我们判断当前linux有多少用户直接查看home下的家目录,因此一般删除用户时,会顺带删除家目录;
示例2:删除用户lisi,以及家目录
Tisp:lisi是属于zhangsan组的,用户和组不同名,不会删除组
userdel -r lisi
查看用户信息:
cat /etc/passwd
发现lisi用户不见了
查看组信息:
cat /etc/group
发现zhangsan组还在
示例3:删除zs用户,以及家目录
userdel -r zs
Tips:即使家目录的名称不是叫zs也会被删除
查看组信息:
cat /etc/group
发现zhangsan组依旧存在;删除用户时(不管是否加上-r参数),只会删除同名的组,不同名的组不会被删除;
用户组操作
用户组简介:类似于角色,系统可以对有共性的多个用户进行统一的管理;
添加组
语法:
groupadd 组名
示例;
groupadd g1
查看组信息:
cat /etc/group
修改组
修改组名称
语法:
groupmod -n 新组名 组名
示例:
groupmod -n g2 g1
再次查看组信息:
cat /etc/group
移动用户到新租
useradd lisi # 创建lisi用户,lisi组,lisi家目录
usermod lisi -g g2 # 将lisi移动到g1组
删除组
语法:
groupdel 组名
删除组的时候必须保证组中没有用户
示例:
groupdel zhangsan # 删除zhangsan组(此时zhangsan组没有用户)
groupdel g2 # 删除g2组(删除失败)
groupadd g1
usermod lisi -g g1 # 将lisi用户移动到g1组
groupdel g2 # 再次删除g2组
总结:
- 1)创建用户的时候,如果没有指定该用户的所属的组,那么会创建一个同名组
- 2)删除用户的时候,同名组也会被删除(前提是组里面没有其他用户了),并且删除组的时候要求组中不能有用户存在
- 3)删除用户的时候加-r代表删除家目录(即使家目录和用户名不一样)
权限管理
Linux中对每个目录和文件都做了规定,只能由满足条件的用户才能操作;
查看文件的操作权限:
每个文件和文件夹的最前面都有类似于drwxr-xr-x这样的字母,这些字母的含有就代表具体的操作权限;
具体含义如下:
- r:只读,权限等级为4
- w:只写,权限等级为2
- x:只执行,权限等级为1,对于文件夹来说就是能否进入该文件夹
- -:不具备权限
- 主权限(u):当前用户的权限
- 组权限(g):整个组的权限
- 其他权限(o):其他用户的权限(除当前登录用户外)
分配权限
语法:
chmod [权限] [操作] [文件/目录]
- 权限:
- 文字设定法:
- u:主权限
- g:组权限
- o:其他用户权限
- a:同时设置u、g、o三者的权限
- 文字设定法:
- 数字设定法:
- 1:执行权限(x)
- 7:读权限+写权限+执行权限(r+w+x)
- 6:读权限+写权限(r+w)
- 5:读权限+执行权限(r+x)
- 4:读权限(r)
- 3:写权限+执行权限(w+x)
- 2:写权限(w)
- 操作
- +:赋予某个权限
- -:剔除某个权限
- =:替换权限
示例:
cd / # 切换到根目录
vi aaa.txt # 创建并编辑aaa.txt文件
权限为-rw-r--r--
文字设定法
chmod u+x aaa.txt # 增加主的执行权限(-rwxr--r--)
chmod g-r aaa.txt # 剔除组的读权限(-rwx---r--)
chmod o-r aaa.txt # 剔除其他用户的读权限(-rwx------)
chmod u-x,g+r,o+r aaa.txt # 剔除主的执行权限,增加组合其他用户的读权限(-rw-r--r--)
chmod u=rwx,g=rw,o=rw aaa.txt # 主具有可读可写可执行权限,组和其他用户具有读写权限(-rwxrw-rw-)
chmod a-r aaa.txt # 剔除u、g、o的读权限
chmod a+r,a-w aaa.txt # 增加u、g、o的读权限,剔除u、g、o的写权限
数字设定法
chmod [参数1|参数2|参数3] 文件/目录
参数1:代表u(主用户)
参数2:代表g(组用户)
参数3:代表o(其他用户)
如果只设置参数1,那么代表的是o
如果只设置参数1和参数2,那么代表的是g、o
# 只设置o
chmod 0 aaa.txt # ----------
chmod 1 aaa.txt # ---------x
chmod 2 aaa.txt # --------w-
chmod 3 aaa.txt # --------wx
chmod 4 aaa.txt # -------r--
# 设置g、o
chmod 42 aaa.txt # ----r---w-
# 设置u、g、o
chmod 660 aaa.txt # -rw-rw----
chmod 744 aaa.txt # -rwxr--r--
chmod 777 aaa.txt # -rwxrwxrwx
修改文件的属主和组
语法:
chown [-R] 用户名 文件 # 修改文件所属的用户
chown [-R] .组名 文件 # 修改文件所属的组
chown [-R] 用户名:组名 文件 # 同时修改文件所属的用户和组
示例1:修改文件的所属主
# 创建一个用户(会创建同名组)
useradd zhangsan
# 创建一个文件
vi aaa.txt
# 修改文件所属主
chown -R zhangsan aaa.txt # 修改aaa.txt文件为zhangsan用户
示例2:修改文件的所属组:
chown -R .zhangsan aaa.txt
示例3:修改文件的所属主和所属组:
chown -R root:zhangsan aaa.txt
关于修改文件的所属组还有一个命令:
chgrp 组名 文件/目录
示例:将aaa.txt修改为root组:
chgrp root aaa.txt
权限操作
当权限分配好了之后,其他用户在操作文件/目录时就得具备对应的权限,否则不可操作;
查看aaa.txt文件的权限:
chmod 777 aaa.txt # -rwxrwxrwx
创建zhangsan用户,并分配密码admin:
useradd zhangsan
passwd zhangsan
Tips:创建了一个zhangsan用户和一个zhangsan组
使用xshell新建zhangsan用户连接,进入/目录,查看aaa.txt
使用root账号修改权限:
chmod o-r aaa.txt
再次使用zhangsan用户查看aaa.txt,发现权限不足:
虽然读不了,但是还是可以编辑(写)的:
vi aaa.txt
编辑结束后输入:
:wq! #保存并强制退出
权限优先级
如果u没有r权限,但是g有r权限,那么该文件到底可不可以读取呢?
答:u > g > o
测试g>o
准备环境:
删除其他所有的用户
useradd zhangsan # 创建zhangsan用户,zhangsan组,zhangsan用户所属组是zhangsan组
useradd lisi -g zhangsan # 创建lisi用户,lisi用户所属组是zhangsan组
passwd zhangsan # 分配密码
passwd lisi # 分配密码
chmod 004 aa.txt # 只给o赋予r权限(-------r--)
chown -R lisi:zhangsan aa.txt # 切换aa.txt所有者为lisi,并且所有组为zhangsan
测试1:登录zhangsan用户
cat aa.txt # 权限不足
zhangsan对于aa.txt来说是其他用户,我们看到o是具有r的权限的,按道理来说zhangsan应该是可以读取aa.txt文件的,那为什么读取不了呢?
答:虽然o是具备r权限的,但是由于zhangsan和lisi是一个组的,aa.txt的组权限没有r,因此读取不了aa.txt
建立新组g1,将zhangsan移动到g1组(此时才能体现o的权限),再次查看aa.txt文件,发现可以查看
groupadd g1 # 添加g1组
usermod zhangsan -g g1 # 将zhangsan用户移动到g1组
重新登录,刷新权限
cat aa.txt # 发现可以查询
Tips:记得重新登录;
测试u>g
aa.txt的权限如下:
注意:lisi用户是在zhangsan组的
chmod g+r aa.txt # 给g赋予r权限
登录lisi用户,查看aa.txt,发现权限不足
很奇怪,lisi不是属于zhangsan组的吗?zhangsan组不是对aa.txt有r权限吗?为什么lisi不能读取aa.txt文件呢?
答:虽然整个zhangsan组具有r权限,但是lisi用户并不具备r权限,换句话说lisi的-(什么都没有)权限比zhangsan组的r权限要大;
我们把u的权限设为r:
chmod u+r aa.txt
再次查看aa.txt,发现可以查看