admin管理员组

文章数量:1794759

详解Linux(基础篇)

详解Linux(基础篇)

文章目录
  • 详解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发展历程

    比较WindowLinux
    收费与否收费且很贵免费开源
    软件与支持大部分为收费软件软件开源免费
    安全性不安全安全
    使用习惯图形化界面图像化和命令行
    可定制性封闭,不可定制开源,可定制
    应用场景桌面操作系统服务器
    1.2 VM和CentOS的安装

    学习 Linux 需要一个环境,我们需要创建一个虚拟机,然后在虚拟机上安装一个 Centos 系统来学习。

    第一步:先安装虚拟机软件,VM

    第二步:通过VM软件创建一个虚拟机空间。

    第三步:在创建好的虚拟机空间上安装CentOS系统。

    第四步:学习使用CentOS。

    CentOS下载地址: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 file.kangle.odata/repo/Centos-6.repo wget -O /etc/yum.repos.d/epel.repo 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 权限赋予同组用户。
    5、这时,再使用 dog 进入该目录。
    • 可以看到,这时 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