详解Linux(基础篇)

详解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学习方法:

  1. 高效而愉快的学习
  2. 先建立一个整体框架,然后细节
  3. 不需要掌握所有的 Linux 指令,要学会查询手册和百度
  4. 先 know how ,再 know why
  5. 计算机是一门”做中学” 的学科 ,不是会了再做,而是做了才会。
  6. 适当的囫囵吞枣
  7. 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。

image-20210202104759616

CentOS下载地址:https://www.centos.org/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创建分区,最少需要创建三个分区:

  1. boot分区:Linux开机时需要加载的文件存放位置。一般200Mb就够用。
  2. swap分区:当我们的内存不够用时,临时替代内存存放数据,通常设置为物理内存的1~1.5倍。
  3. 根分区:将剩下的硬盘都分给根分区。

16、创建分区。

  • 划分引导分区,/boot
  • 确定分区类型为“标准分区”,文件系统为“ext4”。
  • 划分swap分区。
  • 确定分区类型为“标准分区”,文件系统为“ext4”。
  • 将剩下的17G,都划分为根分区。/
  • 接受更改。

17、配置网络连接

18、开始安装

19、设置root用户密码,创建普通用户。

然后就是漫长的等待过程了……。🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️

20、安装完成之后,重启,完成最后的配置即可。

21、接受许可

22、完成最后的配置

  • 会创建一个普通用户
  • 设置密码(这里的密码只能设置复杂一点,不然无法继续)

至此,大功告成。

欣赏一下吧,美丽的Linux。

23、在桌面右键,打开终端,查看IP地址。

(3)安装vmtools工具

  • 介绍:

    • 可以直接粘贴命令在 windows 和 centos 系统之间
    • 可以设置 windows 和 centos 的共享文件夹
  • 安装vmtools

    1. .进入 centos
    2. 点击 vm 菜单的->install vmware tools
    3. centos 会出现一个 vm 的安装包
    4. 点击右键解压, 得到一个安装文件
    5. 进入该 vm 解压的目录 ,该文件在 /root/桌面/vmware-tools-distrib/下
    6. 安装 ./vmware-install.pl
    7. 全部使用默认设置即可
    8. 需要 reboot 重新启动即可生效
  • 在Windows母机和Linux之间设置共享文件夹

共享文件夹会默认放在Linux的 /mnt/hgfs/下。

问题:CentOS的hgfs中没有出现共享文件夹。

解决:

  1. 在终端中输入:mount -t vmhgfs .host:/ /mnt/hgfs,显示如下内容:

提示错误:无法挂载文件系统,没有这样的设备。那现在就不可以用mount工具进行挂载,那我们用vmhgfs-fuse,但是需要安装工具包,下面的命令为下载安装包。

  1. 输入:yum install open-vm-tools-devel -y
  1. 输入:vmhgfs-fuse .host:/ /mnt/hgfs
  2. 重新查看 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.cc/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel.repo http://file.kangle.odata.cc/repo/epel-6.repo
yum makecache

1.3 虚拟机克隆

如果你已经安装了一台 linux 操作系统,你还想再更多的,比如想做一个集群,则必要再重新安装,你只需要克隆就可。

  1. 方式一:直接复制拷贝虚拟机文件
  2. 方式二:使用VMware的克隆操作,前提是关闭Linux系统。

1.4 虚拟机快照

如果在使用虚拟机系统的时候(比如 linux),想回到原先的某一个状态,也就是说你担心可能有些误操作造成系统异常,需要回到原先某个正常运行的状态,vmware 也提供了这样的功能,就叫快照管理。

在VMware左侧的虚拟机处右键,拍摄快照。

选择一个快照,转到。切换快照时,虚拟机会重启。

1.5 Linux目录结构

linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此 目录下再创建其他的目录。

在Linux中,一切皆是文件。

Linux文件目录结构图

image-20210202215743182

具体的目录结构:

  • /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:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

总结:

  1. Linux中的目录只有一个根目录,/

  2. Linux的各个目录存放的内容是规定好的,我们不能随意放置。

  3. 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 的三种常见模式

  1. 正常模式

    1. 在正常模式下,我们可以使用快捷键。
    2. 以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。
    3. 在这个模式中,你可以使用『上 下 左 右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制,粘贴』来处理你的文件数据。
  2. 编辑模式

    1. 在正常模式下,按 i 就会进行编辑模式。
    2. 在编辑模式下,可以完成编辑文件等操作。
  3. 命令行模式

    1. 在正常模式或编辑模式下,按 ESC 键,再按英文冒号进入命令行模式。
    2. 在该模式下,可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作。

三种模式的相互转换:

(3)Vi和Vim的快捷键

  1. 拷贝当前行 yy , 拷贝当前行向下的 5 行 5yy,并粘贴(p)。在正常模式下。

  2. 删除当前行 dd , 删除当前行向下的 5 行 5dd

  3. 在文件中查找某个单词,在命令行下输入 /关键字 , 回车 查找 , 输入 n 就是查找下一个。

  4. 设置文件的行号,取消文件的行号.[命令行下 : set nu 和 :set nonu

  5. 编辑 /etc/profile 文件,使用快捷键到底文档的最末行[G]和最首行[gg],注意这些都是在正常模式下执行的。

  6. 在一个文件中输入 “hello” ,然后又撤销这个动作,再正常模式下输入 u

  7. 将光标移动到 第 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 用户名

image-20210204155539440

7、查询当前登录用户

who am i

这条指令显示第一次登陆到这个系统的用户,例如:使用root登陆到系统,然后又使用 su - 用户名 ,这时使用 who am i 显示的仍然是root的信息。

3.2 用户组

定义:类似于角色,系统可以对有共性/权限的多个用户进行统一的管理。可以将多个用户划分到一个组,然后给这个组授予某权限,那么这一组中的所有用户都将拥有该权限。

初始组合附加组

  • 初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。

  • 附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。

如果在创建用户的时候,没有创建组,则默认会创建一个和用户同名的组,并把该用户归于该组下。

image-20210204164305050

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字段:保留

时间戳换算

  1. 把时间戳换算为日期
    1. date -d "1970-01-01 时间戳 days"
  2. 把日期换算为时间戳
    1. echo $(($(date --date="2014/01/06" +%s)/86400+1))

(3)/etc/group 文件

  • 组(group)的配置文件,记录 Linux 包含的组的信息

每行含义:组名:口令:组标识号:组内用户列表

  • 第一字段:组名
  • 第二字段:组密码标志
  • 第三字段:GID
  • 第四字段:组中附加用户

(4)用户相关的文件

  1. 用户的家目录

    1. 普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
    2. 超级用户:/root/,所有者和所属组都是root用户,权限是550 。
    3. 注意:我们可以通过修改 /etc/passwd 文件中用户的 UID为0,将普通用户修改为超级用户。但是他的家目录是不会变话的。
  2. 用户的邮箱,用户之间传递邮件。

    1. 用户的邮箱:/var/spool/mail/用户名/
  3. 用户模板目录

    1. 作用:一添加用户,就在 /home/用户名/ 目录下默认出现的文件。
    2. 路径:/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)练习权限相关指令

  1. 创建两个组,animal 和 fruit
groupadd fruit
groupadd animal
  1. 创建四个用户
    1. `cat,dog:创建时就指定为animal组
    2. orange,apple:创建完成后再修改组到fruit组。
useradd -g animal cat
useradd -g animal dog
useradd orange
useradd apple
usermod -g fruit orange 
usermod -g fruit apple 
  1. 分别设置密码。
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(二)
……

关注博主🤞🤞

  • 26
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值