文章目录
- 详解Linux---基础篇
- 1. Linux入门
- 1.1 Linux介绍
- 1.2 VM和CentOS的安装
- 1.3 虚拟机克隆
- 1.4 虚拟机快照
- 1.5 Linux目录结构
- 2. Linux基本操作
- 2.1 远程登录操作
- 2.2 Vi和Vim编辑器
- 2.3 开关机,用户注销
- 3. 用户管理
- 3.1 基本指令
- 3.2 用户组
- 4. 实用指令
- 4.1 运行级别
- 4.2 找回root密码
- 4.3 帮助指令
- 4.4 文件目录类指令
- 4.5 时间日期类指令
- 4.6 搜索查找类指令
- 4.7 压缩和解压指令
- 5. 组和权限
- 5.1 组的管理
- 5.2 权限的管理
- 5.3 练习巩固
详解Linux—基础篇
本篇博客详细介绍了Linux的基础知识,从CentOS 7.6 的手把手安装,到用户组和权限的管理,每一步都有非常详细的截图和理论解释。适合新手快速入门Linux,也适合老手用来复习巩固。整理不易,望您支持。🤞🤞
本文是基于CentOS 7.6 版本讲解的,至于文中代码截图中出现的 CentOS68,只是我将这台Linux命名为 CentOS 68,并不是6.8版本,至于为什么这么命名,各位脑补吧🤦♂️。害~
不出意外,这篇博客就是2020年的最后一篇了。心疼这一年中那些离我而去的秀发。😢关注✨✨博主
详解Linux(进阶篇)
配套学习资料的获取方法在文末
1. Linux入门
(1)学习 linux 流程为:
- 第 1 阶段:linux 环境下的基本操作命令,包括 文件操作命令(rm mkdir chmod, chown) 编辑工具
使用(vi vim)linux 用户管理(useradd userdel usermod)等 - 第 2 阶段:linux 的各种配置(环境变量配置,网络配置,服务配置)
- 第 3 阶段:linux 下如何搭建对应语言的开发环境(大数据,JavaEE, Python 等)
- 第 4 阶段:能编写 shell 脚本,对 Linux 服务器进行维护。
- 第 5 阶段:能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优。
- 第 6 阶段:深入理解 Linux 系统(对内核有研究),熟练掌握大型网站应用架构组成、并熟悉各 个环节的部署和维护方法。
(2)Linux学习方法:
- 高效而愉快的学习
- 先建立一个整体框架,然后细节
- 不需要掌握所有的 Linux 指令,要学会查询手册和百度
- 先 know how ,再 know why
- 计算机是一门”做中学” 的学科 ,不是会了再做,而是做了才会。
- 适当的囫囵吞枣
- Linux 不是编程,重点是实际操作,各种常用指令要玩的溜
1.1 Linux介绍
1、Linux是一款操作系统,免费、开源、安全、高效、稳定、稳定、处理高并发强悍。
2、Linux是基于Unix开发的,Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。
3、Linux的历史:
- Linux最初是由芬兰赫尔辛基大学学生Linus Torvalds由于自己不满意教学中使用的MINIX操作系统,所以在1990年底由于个人爱好设计出了Linux系统核心。
- 后来发布于芬兰最大的ftp服务器上,用户可以免费下载,所以它的周边的程序越来越多,Linux本身也逐渐发展壮大起来,之后Linux在不到三年的时间里成为了一个功能完善,稳定可靠的操作系统。
4、Linux创始人:Linus Torvalds
5、Linux吉祥物:
6、Linux主要发行版:
7、Linux和Unix的关系:
1)两个创始人:
- 肯尼斯·蓝·汤普森(英语:Kenneth Lane Thompson,1943年2月4日-),小名为肯·汤普森(英语:Ken Thompson),生于美国新奥尔良。为美国计算机科学学者与软件工程师,任职于贝尔实验室Entrisphere, IncGoogle Inc。与丹尼斯·里奇同为1983年图灵奖得主。他与丹尼斯·里奇设计了B语言、C语言,创建了Unix和Plan 9操作系统,编程语言Go的共同作者。
- 丹尼斯·麦卡利斯泰尔·里奇(英语:Dennis MacAlistair Ritchie,1941年9月9日- 2011年10月12日),美国计算机科学家。骇客圈子通常称他为“ dmr”。 C语言的创造者,Unix作业系统的关键开发者,对计算机领域产生了深远影响,并与肯·汤普逊同为1983年图灵奖得主。
2)Linux发展历程
比较 | Window | Linux |
---|---|---|
收费与否 | 收费且很贵 | 免费开源 |
软件与支持 | 大部分为收费软件 | 软件开源免费 |
安全性 | 不安全 | 安全 |
使用习惯 | 图形化界面 | 图像化和命令行 |
可定制性 | 封闭,不可定制 | 开源,可定制 |
应用场景 | 桌面操作系统 | 服务器 |
1.2 VM和CentOS的安装
学习 Linux 需要一个环境,我们需要创建一个虚拟机,然后在虚拟机上安装一个 Centos 系统来学习。
第一步:先安装虚拟机软件,VM
第二步:通过VM软件创建一个虚拟机空间。
第三步:在创建好的虚拟机空间上安装CentOS系统。
第四步:学习使用CentOS。
CentOS下载地址:https://www.centos/download/
下载DVD版本即可。
(1)安装VM。
默认安装即可。
虚拟机的网络连接有三种模式:桥接、NAT、主机模式。
- 桥接:和母机在同一个网段下,可能会造成IP冲突。
- NAT:网络地址转化,Linux可以访问外网,但外网不可访问Linux主机,不会造成IP冲突。
- 主机模式:Linux是一个独立的主机,不可访问外网。
(2)安装Linux系统
在安装之前呢,建议先拜一拜Linus Torvalds,祈祷安装顺利……😁😁
1、创建虚拟机空间。
2、使用向导,创建典型即可。
3、选择稍后安装操作系统。现在只是创建一个虚拟机空间。
4、选择对应版本。
5、给虚拟机起个好听的名字,这个并不是主机名,只是在VMware中标识这个虚拟机的名字。并选择安装位置,建议安装在非系统盘。(家里有矿的随意……)
6、指定磁盘容量。
7、编辑硬件,网卡,内存,处理器等
- 这里需要根据自己电脑的配置,自定义内存大小,处理器处理。
- 查看本机处理器数量。
- 打开电脑的 “任务管理器”
- 点击 “性能”
- 选择最下面的 “打开资源监视器”
- 再点击 “CPU”,查看右侧CPU数量。
- 查看本机处理器数量。
- 网络适配器建议选择 NAT。上面已经说了理由。
8、编辑虚拟机,挂载镜像文件。
9、选择下载的镜像文件
10、开启虚拟机,正式安装CentOS 7.6
11、鼠标在这个界面点一下,并使用上下键选择。
正在安装,稍等片片刻。
12、选择语言
13、自定义安装,选择我们需要的软件。
- 这里默认是最小安装,即:没有图形化界面的Linux系统,因为我们是刚开始学习Linux,建议还是装一个图形界面。
14、选择以下内容,点击完成,退出这个界面之后,系统会检查软件依赖关系,需要等一会。建议不要乱点,防止机器卡死。
15、编辑磁盘分区。
Linux创建分区,最少需要创建三个分区:
- boot分区:Linux开机时需要加载的文件存放位置。一般200Mb就够用。
- swap分区:当我们的内存不够用时,临时替代内存存放数据,通常设置为物理内存的1~1.5倍。
- 根分区:将剩下的硬盘都分给根分区。
16、创建分区。
- 划分引导分区,/boot
- 确定分区类型为“标准分区”,文件系统为“ext4”。
- 划分swap分区。
- 确定分区类型为“标准分区”,文件系统为“ext4”。
- 将剩下的17G,都划分为根分区。/
- 接受更改。
17、配置网络连接
18、开始安装
19、设置root用户密码,创建普通用户。
然后就是漫长的等待过程了……。🤦♂️🤦♂️🤦♂️🤦♂️🤦♂️
20、安装完成之后,重启,完成最后的配置即可。
21、接受许可
22、完成最后的配置
- 会创建一个普通用户
- 设置密码(这里的密码只能设置复杂一点,不然无法继续)
至此,大功告成。
欣赏一下吧,美丽的Linux。
23、在桌面右键,打开终端,查看IP地址。
(3)安装vmtools工具
-
介绍:
- 可以直接粘贴命令在 windows 和 centos 系统之间
- 可以设置 windows 和 centos 的共享文件夹
-
安装vmtools
- .进入 centos
- 点击 vm 菜单的->install vmware tools
- centos 会出现一个 vm 的安装包
- 点击右键解压, 得到一个安装文件
- 进入该 vm 解压的目录 ,该文件在 /root/桌面/vmware-tools-distrib/下
- 安装 ./vmware-install.pl
- 全部使用默认设置即可
- 需要 reboot 重新启动即可生效
-
在Windows母机和Linux之间设置共享文件夹
共享文件夹会默认放在Linux的 /mnt/hgfs/下。
问题:CentOS的hgfs中没有出现共享文件夹。
解决:
- 在终端中输入:
mount -t vmhgfs .host:/ /mnt/hgfs
,显示如下内容:
提示错误:无法挂载文件系统,没有这样的设备。那现在就不可以用mount工具进行挂载,那我们用vmhgfs-fuse,但是需要安装工具包,下面的命令为下载安装包。
- 输入:
yum install open-vm-tools-devel -y
- 输入:
vmhgfs-fuse .host:/ /mnt/hgfs
- 重新查看 hgfs 目录,就会出现Windows中共享的文件。
注意:如果使用的CentOS 6 ,在上面安装过程中会报错:
YumRepo Error: All mirror URLs are not using ftp, http[s] or file. Eg. Invalid release/repo/arch combination/removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt Error: Cannot find a valid baseurl for repo: base
原因:CentOS 6 yum源停止更新。
解决:换源。
在终端中输入:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://file.kangle.odata/repo/Centos-6.repo wget -O /etc/yum.repos.d/epel.repo http://file.kangle.odata/repo/epel-6.repo yum makecache
1.3 虚拟机克隆
如果你已经安装了一台 linux 操作系统,你还想再更多的,比如想做一个集群,则必要再重新安装,你只需要克隆就可。
- 方式一:直接复制拷贝虚拟机文件
- 方式二:使用VMware的克隆操作,前提是关闭Linux系统。
1.4 虚拟机快照
如果在使用虚拟机系统的时候(比如 linux),想回到原先的某一个状态,也就是说你担心可能有些误操作造成系统异常,需要回到原先某个正常运行的状态,vmware 也提供了这样的功能,就叫快照管理。
在VMware左侧的虚拟机处右键,拍摄快照。
选择一个快照,转到。切换快照时,虚拟机会重启。
1.5 Linux目录结构
linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此 目录下再创建其他的目录。
在Linux中,一切皆是文件。
Linux文件目录结构图 具体的目录结构:
- /bin:存放二进制可执行文件,即存放最经常使用的命令
- /sbin:s就是 Super User 的意思,这里存放的是系统管理员使用的系统管理程序。即:管理员使用的指令。
- /home:存放普通用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录是以用户的账号命名的。执行完
useradd tom
指令之后,该目录下就会多一个 tom 文件。 - /root:该目录为系统管理员的主目录。
- /boot:存放的是启动Linux时使用的一些核心文件,包括一些链接文件以及镜像文件。
- /proc:该目录是一个虚拟的目录,它是系统内存的一个映射
- /srv:serveice的缩写,该目录存放一些服务启动之后需要提取的数据。
- /sys:这是Linus2.6 内核的一个很大的变换。该目录下安装了2.6 内核中出现的一个文件系统。(以上这三个目录 proc、srv,sys,都跟Linux内核相关)
- /tmp:这个目录是存来存放一些临时文件的。
- /dev:存放设备文件。类似于Windows的设备管理器,把所有的硬件用文件的形式存储。
- /media:Linux系统会自动识别一些设备,例如:U盘、光驱等,当识别后,Linux会把识别的设备挂载到这个目录下。
- /mnt:系统提供给用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容。例如:我们刚才设置的共享文件。
- /opt:这是给主机额外安装软件所摆放的目录,例如:可以将MySQL数据库放在该目录下。不是安装过后的软件。
- /usr/local:这是另外一个给主机额外安装软件的目录。一般是通过编译源码方式安装的程序。安装过后的软件
- /var:这个目录下存放这不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
- /selinux[security-enhanced linux] :是一种安全子系统,它能控制程序只访问特定文件。类似于360。
- /usr:user shared resources,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files 目录。即:装软件的目录。
- /etc:存放系统配置文件和子目录。
- /lib:存放系统开机所需要的最基本的动态链接共享库,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
总结:
-
Linux中的目录只有一个根目录,
/
-
Linux的各个目录存放的内容是规定好的,我们不能随意放置。
-
Linux系统中,一切皆是文件。
2. Linux基本操作
2.1 远程登录操作
(1)Xshell
-
Xshell 是目前最好的远程登录到 Linux 操作的软件,流畅的速度并且完美解决了中文乱码的问题, 是目前程序员首选的软件。
-
Xshell 是一个强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的TELNET 协议。
-
Xshell 可以在 Windows 界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
特别说明:如果希望安装好 XShell 就可以远程访问 Linux 系统的话,需要有一个前提,就是Linux 启用了 SSHD 服务,该服务会监听 22 号端口。
在Linux终端中输入:setup
选择“系统服务”
查看已经启动的服务,标星号的表示已经启动。
XShell官网
(2)XFtp
XFtp是一个基于 windows 平台的功能强大的 SFTP、FTP 文件传输软件。使用了 Xftp 以后,windows 用户能安全地在 UNIX/Linux 和 Windows PC 之间传输文件。
这里使用 SFTP 协议。
登录成功之后显示如图:
2.2 Vi和Vim编辑器
(1)介绍
-
所有的 Linux 系统都会内建 vi 文本编辑器。
-
Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用
(2)vi 和 vim 的三种常见模式
-
正常模式
- 在正常模式下,我们可以使用快捷键。
- 以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。
- 在这个模式中,你可以使用『上 下 左 右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制,粘贴』来处理你的文件数据。
-
编辑模式
- 在正常模式下,按 i 就会进行编辑模式。
- 在编辑模式下,可以完成编辑文件等操作。
-
命令行模式
- 在正常模式或编辑模式下,按 ESC 键,再按英文冒号进入命令行模式。
- 在该模式下,可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作。
三种模式的相互转换:
(3)Vi和Vim的快捷键
-
拷贝当前行 yy , 拷贝当前行向下的 5 行 5yy,并粘贴(p)。在正常模式下。
-
删除当前行 dd , 删除当前行向下的 5 行 5dd
-
在文件中查找某个单词,在命令行下输入 /关键字 , 回车 查找 , 输入 n 就是查找下一个。
-
设置文件的行号,取消文件的行号.[命令行下 : set nu 和 :set nonu
-
编辑 /etc/profile 文件,使用快捷键到底文档的最末行[G]和最首行[gg],注意这些都是在正常模式下执行的。
-
在一个文件中输入 “hello” ,然后又撤销这个动作,再正常模式下输入 u
-
将光标移动到 第 20 行 shift+g
第一步:设置行号,set nu
第二步:在正常模式下输入:20
再按 Shift+g
2.3 开关机,用户注销
# 表示立即关机
shutdown -h now
# 表示 1 分钟后关机
shutdown -h 1
# 立即重启
shutdown -r now
# 就是直接使用,效果等价于关机
halt
# 直接重启系统
reboot
# 把内存的数据同步到磁盘,即:将没有保存的东西保存一下,以防关机丢失。(目前的 shutdown/reboot/halt 等命令均已经在关机前进行了 sync)
sync
注意:当我们关机或者重启时,都应该先执行以下 sync 指令,把内存的数据写入磁盘,防止数据丢失。
可以利用普通用户登录,登录后再用 su 用户名
命令来切换成系统管理员身份。
在提示符下输入 logout 即可注销用户
使用细节: logout 注销指令在图形运行级别无效,在 运行级别 3 下有效。
3. 用户管理
Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个 账号,然后以这个账号的身份进入系统
3.1 基本指令
1、添加一个用户
useradd 用户名
创建用户之后,默认会在 /home/
下创建一个和用户同名的目录。例:/home/Tom
。
使用该用户登录的话,会默认进入该目录。
2、给用户指定密码
passwd 用户名
3、指定用户目录
useradd -d 指定目录 用户名
会在 /home/
下创建一个指定的目录。
4、删除用户
# 不删除用户目录
userdel 用户名
# 删除用户的同时删除用户目录
userdel -r 用户名
5、切换用户
# 使用 - 会显示上次登录的时间,如果不写 - 就不显示上次登录时间。
su - 用户名
注意:低权限用户切换到高权限用户时,要输入密码,反之,则不需要。
当需要返回到原来用户时,使用 exit/logout
指令。
6、查询用户信息
id 用户名
7、查询当前登录用户
who am i
这条指令显示第一次登陆到这个系统的用户,例如:使用root登陆到系统,然后又使用 su - 用户名
,这时使用 who am i
显示的仍然是root的信息。
3.2 用户组
定义:类似于角色,系统可以对有共性/权限的多个用户进行统一的管理。可以将多个用户划分到一个组,然后给这个组授予某权限,那么这一组中的所有用户都将拥有该权限。
初始组合附加组:
-
初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。
-
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。
如果在创建用户的时候,没有创建组,则默认会创建一个和用户同名的组,并把该用户归于该组下。
1、新增一个组
groupadd 组名
2、删除一个组
groupdel 组名
3、创建用户时将其归于某个组
useradd -g 组名 用户名
4、修改用户的组
usermod -g 组名 用户名
用户和组相关的文件
(1)/etc/passwd
文件
- 用户的配置文件,记录用户的各种信息。
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell
-
第1字段:用户名称
-
第2字段:密码标志
-
第3字段:UID(用户ID)
- 0: 超级用户(root不一定是管理员,但UID为0的一定是管理员)
- 1-499: 系统用户(伪用户),系统命令会调用这些用户。
- 500-65535: 普通用户(centos7 从1000开始计算)
-
第4字段:GID(用户初始组ID)[不推荐修改初始组]
-
第5字段:用户说明
-
第6字段:家目录
- 普通用户:/home/用户名/
- 超级用户:/root/
-
第7字段:登录之后的Shell
用户在XShell中发起指令:cd /home
,Linux内核是无法识别的,需要一个翻译官,这个翻译官就是Shell,常用的Shell是Bash。
(2)/etc/shadow 文件
口令的配置文件 ,九个字段
-
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
-
第1字段:用户名
-
第2字段:加密密码
- 加密算法升级为SHA512散列加密算法
- 如果密码位是“!!”或“*”代表没有密码,不能登录
-
第3字段:密码最后一次修改日期。时间戳
- 使用1970年1月1日作为标准时间,每过一天时间戳加1
-
第4字段:两次密码的修改间隔时间(和第3字段相比)
-
第5字段:密码有效期(和第3字段相比)
-
第6字段:密码修改到期前的警告天数(和第5字段相比)。(密码到期之后会禁止登陆)
-
第7字段:密码过期后的宽限天数(和第5 字段相比)
- 0:代表密码过期后立即失效
- -1:则代表密码永远不会失效。
-
第8字段:账号失效时间
- 要用时间戳表示
-
第9字段:保留
-
时间戳换算:
- 把时间戳换算为日期
date -d "1970-01-01 时间戳 days"
- 把日期换算为时间戳
echo $(($(date --date="2014/01/06" +%s)/86400+1))
(3)/etc/group 文件
- 组(group)的配置文件,记录 Linux 包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表
- 第一字段:组名
- 第二字段:组密码标志
- 第三字段:GID
- 第四字段:组中附加用户
(4)用户相关的文件
-
用户的家目录
- 普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
- 超级用户:/root/,所有者和所属组都是root用户,权限是550 。
- 注意:我们可以通过修改 /etc/passwd 文件中用户的 UID为0,将普通用户修改为超级用户。但是他的家目录是不会变话的。
-
用户的邮箱,用户之间传递邮件。
- 用户的邮箱:/var/spool/mail/用户名/
-
用户模板目录
- 作用:一添加用户,就在 /home/用户名/ 目录下默认出现的文件。
- 路径:/etc/skel/
# 案例:我们在创建用户时,想给每个用户一个警告信息,这个警告信息的文件就可以在 /etc/skel/ 目录下创建。之后在创建用户时,他的家目录里就会默认出现这个文件
cd /etc/skel/
vim warning.txt
useradd tom
passwd tom
cd /home/tom
ll
# 就会显示 warning.txt 文件
4. 实用指令
4.1 运行级别
(1)运行级别说明:
- 0 :关机
- 1 :单用户【找回丢失密码】
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务
- 4:系统未使用保留给用户
- 5:图形界面
- 6:系统重启
常用运行级别是 3 和 5 ,也可以指定默认运行级别。
在 centos7 以前,运行级别是在/etc/inittab
文件中设置的。
使用init
指令切换运行级别。
init 0 :表示关机
(2)指定运行级别:
1、运行级别
# 运行级别3
multi-user.target
# 运行级别5
graphical.target
2、查看当前默认的运行级别:
systemctl get-default
3、设置默认的运行级别(重启后生效)
systemctl set-default xxx.target
4.2 找回root密码
每个版本的指令有所差异,这里以CentOS 7.6为例。
具体步骤如下:
1、先重启系统,进入开机界面后(这里一定要快,在这个界面只有5秒的时间就会切换到用户登录界面),在开机界面中按 e
进入编辑模式。
2、 进入编辑界面,使用键盘上的上下键把光标往下移动,找到以 Linux16
开头内容所在的行数,在行的最后面输入:init=/bin/sh
。
3、输入完成后,直接按快捷键:Ctrl+x 启动系统,进入单用户模式
4、接着,在光标闪烁的位置中输入:mount -o remount,rw /(注意:各个单词间有空格),完成后按键盘的回车键(Enter)。如图
5、然后输入 passwd
,完成后按键盘的回车键(Enter)。输入密码,然后再次确认密码即可( 密码长度最好8位以上,但不是必须的),密码修改成功后,会显示passwd…的样式,说明密码修改成功。(注意:这里不能使用小键盘的数字键!!!)
6、接着,在鼠标闪烁的位置中(最后一行中)输入:touch /.autorelabel
(注意:touch与 /后面有一个空格),完成后按键盘的回车键(Enter)
7、 继续在光标闪烁的位置中,输入:exec /sbin/init
(注意:exec与 /后面有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码(这个过程时间可能有点长,耐心等待),完成后,系统会自动重启, 新的密码生效了。
8、然后使用修改后的密码登录到系统,可以选择使用指令 passwd root
修改刚才改好的密码,改为好记的。
4.3 帮助指令
在Linux中,隐藏文件是以 .
开头的。
# 列出所有文件,包括隐藏文件
ls -a
指令可以组合使用:
# 单列显示所有文件,等同于 ll
ls -l
# 单列显示所有文件,包括隐藏文件。
ls -al 或 ls -la
# 查看指定目录下的内容
ls /root -al
# 加个选项 h 表示显示的时候按人类便于阅读的方式展示
ls -lh
man 指令获得帮助信息
# 查看 ls 指令的帮助信息
man ls
help 指令,获得 shell 内置命令的帮助信息(英文显示)
help cd
4.4 文件目录类指令
1、显示当前工作目录的绝对路径
pwd
- 绝对路径:总是从跟路径
/
出发。 - 相对路径:从当前目录出发。
2、切换目录指令,cd
# 切换到自己的家目录
cd ~
# 回到当前目录的上一层
cd ..
# 使用绝对路径切换到 root 目录
cd /root 案例
# 使用相对路径到/root 目录, 比如在 /home/tom
cd ../../root
3、创建目录指令,mkdir
# mkdir 不加参数,默认只能创建一个mul。
mkdir 目录
例:mkdir /home/dog :在home目录下创建dog目录
# 创建多级目录
mkdir -p 目录
例:mkdir -p /home/animal/dog :在home下创建animal,再再animal下创建dog目录。
4、删除空目录
# 删除空目录,如果不是空目录,则不能使用该指令
rmdir [选项] 目录
# 删除非空目录,rf 表示递归强制删除
rm -rf 目录
5、创建空文件,touch
touch 文件名称
例:touch A.txt
6、拷贝指令,cp
# source代表拷贝的是哪个文件。 dest代表把文件拷贝到哪个地方。
# -r 选项表示递归复制整个文件夹
cp [选项] source dest
例:cp A.txt test/ : 表示将A.txt 文件复制到test目录下
例:cp -r test test01 :表示将当前目录下的test目录和test目录中的所有内容拷贝到 当前目录下的test01目录下。
# 强制覆盖不提示的方法:\cp
\cp -r test test01
7、删除文件或目录指令,rm
# -r 递归删除整个文件夹
# -f 强制删除不提示
rm [选项] 目录或文件
8、移动或重命名文件或目录,mv
# 重命名。(同一目录下)
mv oldFileName newFileName
例:mv A.txt AA.txt
# 移动文件(剪切)
mv 源路径 目的路径
例: mv AA.txt ../test : 将当前目录下AA.txt文件移动到和当前目录同级的test目录下。
例:mv B.txt ../test01/BB.txt : 移动并且重命名
9、查看文件内容,cat
# -n 显示行号
cat [选项] 文件
管道命令,将前一个指令的结果,再交给下一个指令去处理。格式 前一个指令 | 指令
。
# 将 cat -n /etc/profile 指令的处理结果,再交给 more去处理
cat -n /etc/profile | more
more 指令:
- 是一个基于VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
- more 指令中内置了若干快捷键(交互的指令)。如下:
操作 | 功能描述 |
---|---|
space | 向下翻页 |
q | 立刻离开more,不再显示文件内容 |
Ctrl+F | 向下滚动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前行的行号 |
Enter | 向下翻一行 |
:f | 输出文件名和当前行的行号 |
10、查看大文件内容,less。
less 文件
-
less 指令用来分屏查看文件内容,它的功能与more 指令类似,但是比more 指令更加强大,支持各种显示终端。
-
less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
-
基本语法如下:
操作 | 功能描述 |
---|---|
space | 向下翻页 |
pagedown | 向下翻页 |
pageup | 向上翻页 |
/字串 | 向下搜索 字串 的功能;n:向下查找。N:向上查找 |
?字串 | 向下搜索 字串 的功能;n:向上查找。N:向下查找 |
q | 离开当前程序 |
11、输出指令,echo。
echo [选项] [输出内容]
# 输出 Hello,Linux 到控制台
echo "Hello,Linux"
# 输出内容到文件
echo "Hello,Linux" > test.txt
# 输出环境变量
echo $PATH
# 输出主机名
echo $HOSTNAME
12、查看文件开头,head指令
head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容。
# 语法
head [选项] 文件
# 查看指定行数的文件,比如:查看前5行
head -n 5 /etc/profile
# 查看 /etc/profile 文件的前10行
head /etc/profile
13、tail 指令
tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。
# 语法,默认查看文件尾 10 行内容
tail 文件
# 查看文件尾5行
tail -n 5 文件
实时监控该文档的所有更新
tail -f 文件
14、输出重定向>
和 追加 >>
指令
# echo 指令本来是将内容输出到终端,使用重定向指令 > ,之后,就可以将内容重定向输出到文件 MyFile.txt 中。 如果指定文件不存在就会先创建该文件。
echo "Hello,World" > MyFile.txt
指令 >
是覆盖写,指令 >>
是追加写。
# 将列表的内容重定向写入文件中
ls -l > 文件
例:ls -l > a.txt
# 列表的内容追加到文件的末尾
ls -l >> 文件
例:ls -l >> a.txt
# 将文件 1 的内容覆盖到文件 2,可以实现文件的复制粘贴
cat 文件1 > 文件2
# 显示当前日历显示到终端
cal
15、软链接指令,ln。
ln,软链接也称为符号链接,类似于windows 里的快捷方式,主要存放了链接其他文件的路径。
创建软链接:
# 给原文件创建一个软链接
ln -s [原文件或目录] [软链接名]
例:ln -s /root myRoot
删除软链接:(后面不要写 / ,否则会认为它是一个目录)
rm /home/myRoot
16、查看历史执行指令,history
# 查看历史执行的所有文件(默认显示所有)
history
# 只查看最近的 10 条记录
history 10
# 执行曾经执行过的指令
!指令序号
4.5 时间日期类指令
1、显示或设置日期
# 显示当前时间
date
# 显示当前年份
date +%Y
# 显示当前月份
date +%m
# 显示当前是一月中的哪一天
date +%d
# 显示年月日时分秒
date "+%Y-%m-%d %H:%M:%S"
# 设置时间
date -s 字符串时间
例:date -s “2020-11-03 20:02:10”
# 显示日历,不加选项,显示本月日历
cal [选项]
# 显示 2020 年日历
cal 2020
4.6 搜索查找类指令
1、find指令
find 指令将从指定目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示在终端。
可以使用通配符。
#
find [搜索范围] [选项]
选项:
选项 | 功能 |
---|---|
-name | 按照指定的文件名查找模式查找文件 |
-user | 按照属于指定用户查找模式查找文件 |
-size | 按照指定文件大小查找模式查找文件 |
# 查找 /home 目录下名字为 A.txt 的文件
find /home -name A.txt
# 查找 /home 目录下以 txt 结尾的文件
find /home -name *.txt
# 查找 /opt 目录下,属于用户root的文件,这里可以使用管道命令来显示。
find /opt -user root | more
# 查找整个 linux 系统下大于 200M的文件(+n大于n, -n小于n ,n等于n, 单位有 k,M,G)
find / -size +200M
2、locate 指令
locate 指令可以快速定位文件路径。locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。
Locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更 新 locate 时刻。
由于 locate
指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb
指令创建 locate
数据库。
locate 要查询的文件
# 查看某个指令在哪个目录下,比如 ls 指令在哪个目录
which 指令
例:which reboot
3、grep指令和管道符号 |
grep 过滤查找。
管道符 |
,表示将前一个命令的处理结果输出传递给后面的命令处理。
# 语法
grep [选项] 查找内容 源文件
选项:
选项 | 功能 |
---|---|
-n | 显示匹配行及行号 |
-i | 忽略字母大小写进行匹配 |
# 查看 MyFile.txt 中关键字 Hello。
# 就是将 cat MyFile.txt 指令的结果,交给 grep "Hello" 指令再处理。
cat MyFile.txt | grep "Hello"
grep -n "Hello" MyFile.txt
4.7 压缩和解压指令
1、gzip/gunzip
指令
gzip
:压缩gunzip
:解压
# 压缩文件,只能将文件压缩为 *.gz 文件。会替换原有文件
gizp 文件
# 解压文件,只能解压 *.gz 文件
2、zip/unzip
指令
zip
:用于压缩文件或目录。unzip
: 用于解压的。
#
zip [选项] xxx.zip 要压缩的文件
#
unzip [选项] xxx.zip
# 将 /home 目录压缩为 myhome.zip ,并放在当前目录下
zip -r myhome.zip /home
# 将当前目录下的 myhome.zip 解压到 /opt/temp 目录下
unzip -d /opt/temp myhome.zip
3、tar
指令
# 打包文件或目录,压缩后的文件格式是 xxx.tar.gz,
tar [选项] xxx.tar.gz 要打包的文件或目录(多个文件用空格隔开)
选项:
选项 | 功能 |
---|---|
-c | 产生 .tar 打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解压 .tar 文件 |
# 压缩当前目录下的 dog.txt 和 cat.txt 为 dc.tar.gz
tar -czvf dc.tar.gz dog.txt cat.txt
# 解压当前目录下的 dc.tar.gz
tar -zxvf dc.tar.gz
# 将当前目录下的 dc.tar.gz 解压到指定目录 /opt/temp下。(大写C)
tar -zxvf dc.tar.gz -C /opt/temp
5. 组和权限
5.1 组的管理
在 linux 中的每个用户必须属于一个组,不能独立于组外。
在 linux 中每个文件有所有者、所在组、其它组的概念。
- 所在组:文件所在的组就是所在组
- 其他组:非所在组对于该文件来说就是其他组。
- 所有者:一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。
1、查看文件所有者:
2、修改文件或目录所有者,chown
chown 用户名 文件名
# 修改所有者和所属组
chown 用户:组名 文件或目录
# 递归修改目录下的所有文件的所有者
chown -R 用户 目录
3、创建组
groupadd 组名
useradd -g 组名 用户
用户创建文件之后,这个文件的所在组就是该用户的所在组。
4、修改组
# 改变文件或目录的所在组
chgrp 组名 文件/目录
# 递归修改目录的所有文件的所属组
chgrp -R 组名 目录
5、改变用户所在组。
注意:使用root用户改变用户的组之后,用户再已登录的情况下,并不能立即拥有改变后组的权限。该用户退出重新登录,即可拥有修改后组的权限。
# 改变用户所在组
usermod -g 新组名 用户
# 改变用户登录的是初始目录(默认用户登录时会进入自己的组目录),前提是用户需要有进入到新目录的权限
usermod -d 目录名 用户
# 查看某个组是否存在
cat /etc/group | grep 组名
5.2 权限的管理
1、权限介绍
ll
显示信息如下:
这一列共有10位,每一位都有其含义:
- 0位:确定文件类型
- i:表示链接,相当于Windows中的快捷方式。
- d:表示目录,相当于Windows中的文件夹。
- c:表示字符设备,比如:鼠标,键盘。
- b:表示块设备,比如:硬盘。
- -:表示是普通文件。比如:txt 文件。
- 1-3位:确定文件的所有者对该文件的权限。—User
- 4-6位:确定所在组的其他用户对该文件的权限。—Group
- 7-8位:确定其他用户拥有对该文件的权限。—Other
2、rwx
权限详解
-
作用到文件
r
:read,可读。w
:write,可修改,但不代表可以删除。删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件x
:execute,可执行。
-
作用到目录:
r
:read,可读。ls 查看目录内容。w
:write,可修改,可以在目录内创建、删除文件和重命名目录。x
:execute,可进入该目录。
-
rwx
也可以用数字来表示:r=4,w=2,x=1- 这三个数字刚好可以组合出唯一的权限,比如:6只能是r+w,3只能是w+x,等。
-
文件的读写权限和目录的读写权限独立。
- 即:如果一个目录只有 x 权限,而目录下文件有 rw 权限,则用户可以进入该目录,但不能使用 ls 之类的指令列出文件列表,但是可以读和写目录下的文件。
3、其他说明
- 红色:
- 如果是普通文件,这个数字就是1
- 如果是目录,这个数字就是该目录下的文件和子目录的总数。
- 黄色:文件大小,单位是字节。如果是目录,则显示 4096。
- 粉色:修改日期。
4、修改权限
- 第一种方式:使用 +、- 修改权限
- u:user,属主。
- g:group,属组。
- o:other,其他用户。
- a:all,所有人。相当于 u+g+o
# 该文件或目录赋予权限
chmod u=rwx,g=rx,o=x 文件或目录
# 给文件添加权限
chmoe [u|g|o][+|-] 文件或目录
# 例:给 abc.txt 文件的所有者读写执行权限,给所在组读执行权限,给其他用户读权限。
chmod u=rwx,g=rx,o=x abc.txt
# 例:给 abc.txt 文件的所有者去掉执行权限,增加组的写权限
chmod u-x,g+w abx.txt
# 例:给 abc.txt 文件的所有用户添加读闲暇
chmod a+r abc.txt
- 第二种方式:使用数字修改权限。
- r=4
- w=2
- x=1
chmod u=rwx,g=rx,o=x 文件或目录
# 相当于
chmod 751 文件或目录
5.3 练习巩固
(1)练习权限相关指令
- 创建两个组,animal 和 fruit
groupadd fruit
groupadd animal
- 创建四个用户
- `cat,dog:创建时就指定为animal组
- orange,apple:创建完成后再修改组到fruit组。
useradd -g animal cat
useradd -g animal dog
useradd orange
useradd apple
usermod -g fruit orange
usermod -g fruit apple
- 分别设置密码。
pwsswd xxx
1、使用 cat 登录,创建一个文件,file.txt,并写入:”I am cat"
2、查看 fruitFile.txt 的权限。
可以看到权限为:
- User:读写
- Group:读
- Other:读
3、现在将该文件的写权限给 dog 。即:给同组用户赋予 w 权限。
4、dog登录,尝试写file.txt 文件。
- 先要进入到 /home/cat 目录,因为file文件是cat创建的,自然就在 cat 的家目录下,也就是 /home/cat 目录下。
- 但是现在dog是无法进入 /home/cat 目录的,我们看一下 /home/cat 目录的权限:
- 可以看到,同组用户是没有任何权限的。
- 我们将 /home/cat 目录的 x 权限赋予同组用户。
- 可以看到,这时 dog 可以进入 /home/cat 目录,但是无法使用
ls
之类的指令列出目录下的内容,这是因为我们并没有给 同组用户 r 的权限。
6、现在再次使用 cat 或root 用户,赋予 /home/cat 目录同组用户的 r 权限。
7、dog用户可以使用 ll 指令展示目录下的内容。并且可以修改 /home/cat 目录下的 file.txt 文件。
8、dog 用户尝试在 /home/cat 目录下创建文件 dogFile.txt。
- 无法创建,原因是 dog 用户只拥有对该目录的
rx
,权限,并没有w
权限。 - 只有
w
权限才可以在目录中创建、删除文件。
9、再次赋予 dog 用户 w
的权限。
10、dog 用户现在可以创建 dogFile.txt 文件。
11、apple用户尝试进入 /home/cat 目录,发现并不能进入。
- 因为 /home/cat 目录对其他组用户没有赋予任何权限。
12、现在将 apple 用户修改组到 animal组中,尝试进入 /home/cat 目录,修改 file.txt 文件。
- 发现修改用户组之后, apple还是无法进入 /home/cat 目录。
- 原因:我们修改组的时候,apple用户处于登录状态,他的组信息已经是确定了的。
- 解决:暂时的解决方案apple用户是重新登录。
- apple用户重新登录,可以进入 /home/cat 目录。
(2)验证文件和目录的权限的独立性
1、查看 /home/cat 目录和该目录下 file.txt 文件的权限。
2、修改 /home/cat 目录对同组用户的权限仅为 x。file.txt文件的权限不变。
3、dog 用户登录,并进入到 /home/cat 目录。
- dog用户虽然没有对 /home/cat 目录的
rw
权限,但是却不影响它查看和修改 file.txt 文件。
这便是文件和目录的权限的独立性
✨✨学习资料获取✨✨ 关注公众号 “程序小哥”,回复关键字“Linux”获取。
【系列文章】
1. 详解Linux(进阶篇)
2. Git&GitHub(基础)
3. Git&GitHub(进阶)
4. java多线程
5. JavaScript 总结
6. SpringMVC(一)
7. SpringMVC(二)
……
关注博主🤞🤞
更多推荐
详解Linux(基础篇)
发布评论