13-Linux笔记

13-Liunx笔记-ydl-heima-笔记

笔记内容来自黑马程序员&元动力视频教程

文章目录


第一章 Linux操作系统

1、简介

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个多用户、多任务、支持多线程和多 CPU 的操作系统。

既然Linux也是一个操作系统,那大家肯定会下意识将它和Windows系统做比较,两者当然也是有优有劣。相对于Windows来说,Linux是完全免费的,开放源码,为用户提供了最大限度的自由度。且Linux更加稳定更加安全,所以通常作为服务器的操作系统使用。

Linux是一个诞生于网络、成长于网络且成熟于网络的奇特的操作系统。1991年10月,由芬兰大学生Linus Torvalds带头编写而成,其后一大批知名的、不知名的电脑黑客、编程人员加入到开发过程中来,Linux逐渐成长起来。

a. Linux的主要特点

  • 完全免费: Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。
  • 安全性: Linux采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。
  • 多用户: 操作系统资源可以被不同用户使用,每个用户对自己的资源有特定的权限,互不影响。
  • 多任务: 计算机同时执行多个程序,而同时各个程序的运行互相独立。
  • 独立性: Linux是具有设备独立性的操作系统,内核具有高度适应能力。
  • 可移植性: Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。

内核: kernel

b. 常见的操作系统

  • Windows: 由微软公司成功开发,是一个多任务的操作系统,它采用图形窗口界面,用户对计算机的各种复杂操作只需要通过点击鼠标就可以实现。
  • UNIX: 是一个强大的多用户、多任务的操作系统,支持多种处理器架构,按照操作系统的分类,属于分时系统。Linux的思想源于Unix。
  • Mac OS: 是一套运行于苹果Macintosh系列电脑上的操作系统。从本质上讲,Mac OS 也是UNIX的一个变体。
  • Android: 是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
  • iOS: 是苹果公司开发的移动端的操作系统。iOS与苹果的MacOS操作系统一样,属于类Unix的商业操作系统。

2、安装vmware

直接腾讯软件中心下载 https://pc.qq.com/search.html#!keyword=vmware

网盘链接:
链接: https://pan.baidu.com/s/1RQqBn3u_1ZzPm2KEK0mCyA
提取码: Coke

一直下一步,选一个目录安装即可

VMware Workstation Pro 15 许可证密钥
官网下载后用这个秘钥
YG5H2-ANZ0H-M8ERY-TXZZZ-YKRV8
UG5J2-0ME12-M89WY-NPWXX-WQH88
UA5DR-2ZD4H-089FY-6YQ5T-YPRX6
GA590-86Y05-4806Y-X4PEE-ZV8E0
ZF582-0NW5N-H8D2P-0XZEE-Z22VA
YA18K-0WY8P-H85DY-L4NZG-X7RAD

VMware Workstation Pro 16 许可证密钥,批量永久激活!

ZF3R0-FHED2-M80TY-8QYGC-NPKYF

YF390-0HF8P-M81RQ-2DXQE-M2UT6

ZF71R-DMX85-08DQY-8YMNC-PPHV8 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、安装Linux

Linux镜像

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

有人有这个问题

在这里插入图片描述解决方法:

https://jingyan.baidu.com/article/fc07f98976710e12ffe519de.html

找到此选项,改成enable
在这里插入图片描述

4、安装finalshell

安装finalShell并连接Linux笔记:http://t.csdn.cn/uj8FP

5、Linux目录结构

a. 基本介绍

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

b. 目录结构具体介绍

  • /
  • root,存放root用户的相关文件
  • home,存放普通用户的相关文件
  • bin,存放常用命令的目录,如vi,su
  • sbin,要具有一定权限才可以使用命令
  • mnt,默认挂载光驱和软驱的目录
  • etc,存放配置的相关文件
  • var,存放经常变化的文件,如网络连接的sock文件 、日志
  • boot,存放引导系统启动的相关文件
  • usr,安装一个软件的默认目录,相当于windows下的program files
  • proc,这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
  • srv ,service缩写。该目录存放一些服务启动之后需要提取的数据
  • sys,这是linux2.6内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个文件系统
  • tmp,这个目录是用来存放一些临时文件的
  • del,类似于windows的设备管理器,把所有的硬件用文件的形式存储
  • media,系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。
  • opt,这是给主机额外安装软件所摆放,如安装oracle数据库就可放到该目录下默认为空。
  • selinux,selinux是一种安全子系统,它能控制程序只能访问特定文件

c. Linux目录总结

  1. linux的目录中有且只有一个根目录/,
  2. linux的各个目录存放的内容是规划好的,不用乱放文件
  3. linux是以文件的形式管理我们的设备,因此linux系统。一切皆文件。
  4. linux的各个文件目录下存放什么内容,大家必须有一个认识
  5. 你的脑海里应该有一颗linux的目录树。

相对路径 : 相对当前的路径 我家隔壁是老王 相对于的是我家

绝对路径 :一个绝对的路径 中国太原市恒大华府1-1-2304家是老王

第二章 Linux命令

我们操作通常有2种方式:第一种就是通过桌面图形化操作;另外一种则是通过终端输入命令。

针对服务器而言我们通常是采用远程连接工具连接到服务器,然后以命令的方式进行管理。我们输入命令后计算机怎么就知道该做什么呢?那就得靠命令行工具(也称终端)进行翻译解释,然后调用相应的接口服务完成特定的功能。

用户与linux系统的交互是通过shell终端,下文讲先分析shell命令行工具,再讲解最基础的linux命令

0、重要命令

可以查看文档

在这里插入图片描述

1、shell简介

计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务。因此,系统内核对计算机的正常运行至关重要,一般不建议直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机,以满足日常工作的需要。而shell就是这样一个客户端命令行工具,充当用户与系统内核沟通的桥梁。

Shell也称“终端”、“壳”,是一种用c语言写的命令行工具, 充当人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。

a. shell版本

以下列举几种shell版本

  • sh(Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用 。在shell编程方面做的很优秀,但是在处理与用户的交互方面做得不如其他几种shell。
  • bash(Bourne Again Shell):Linux默认,是Bourne Shell的扩展。完全兼容Bourne Shell,并在他基础上增加了很多特性如命令补全、命令历史等。它还包含了很多C Shell和Korn Shell中的优点,有灵活和强大的编辑接口,同时有很友好的用户界面。
  • csh(C Shell):一种比Bourne Shell更适合的变种Shell,语法与C语言很相似。
  • Tcsh:Linux提供的C Shell的一个扩展版本。 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数 。
  • ksh(Korn Shell): 集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
  • pdksh: Linux 系统提供的 ksh 的扩展。 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。
    现在包括红帽系统在内的许多主流 Linux 系统默认使用的终端是 Bash(Bourne-Again SHell)解释器 。 主流 Linux 系统选择 Bash 解释器作为命令行终端主要有以下 4 项优势

通过上下方向键来调取过往执行过的 Linux 命令;
命令或参数仅需输入前几位就可以用 Tab 键补全;
具有强大的批处理脚本;
具有实用的环境变量功能。

我们装好的centos7默认也是采用的bash终端,当采用远程连接工具连接到centos7,默认开启的终端就是bash,可以通过在终端中输入命令:echo $SHELL 进行查看,得到的结果为:/bin/bash。

  • 如何判断当前终端的类型?
    通过"echo $SHELL" 命令或通过"evn"终端命令

  • 如何更改登录的终端类型?
    通过终端命令chsh,如:chsh -s /bin/bash将登录终端改为bash

b. shell命令类型

shell是一个程序,用于用户和操作系统进行交互,相当于是一个命令解析器。

作为用户和内核交互的接口,既是一种命令语言又是一种程序设计语言。shell命令又分为内置命令和外部命令。

  • 内置命令

内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等 。

  • 外部命令

外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存*。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的*。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin…等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等

如何区分是内部命令还是外部命令?

  • 通过type命令,如:type cd 可以看到是内部命令;type mkdir可以看到是外部命令。
  • 通过man命令,如:man cd,会提示是bash的内置命令;man ls,会提示是外部命令。

内部命令和外部命令最大的区别之处就是性能。内部命令由于构建在shell中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。

2、最常用命令

linux 命令文档
https://github.com/jaywcjlove/linux-command

00.Linux中文乱码问题

在这里插入图片描述

echo 'LANG="en_US.UTF-8"' >> /etc/profile
source /etc/profile

在这里插入图片描述

既然 Linux 系统中已经有了 Bash 这么好用的“翻译官”,那么接下来就有必要好好学习怎么跟它沟通了。要想准确、高效地完成各种任务,仅依赖于命令本身是不够的,还应该根 据实际情况来灵活调整各种命令的参数 。

linux执行命令一般格式:命令名称 [命令参数] [命令对象]

命令名称、命令参数、命令对象之间用空格键分隔。命令对象一般是指要处理的文件、目录、用户等资源 ,命令参数则可以用长格式(–)或短格式(-)

长格式:man --help
短格式:man -h

linux命令很多,最重要的是各种参数的搭配使用,新手记住所有参数是不可能的,需要经常通过帮助命令进行查阅

特别说明:在终端中,有时候显示的内容很多,可以通过快捷键进行翻看。
shift+PgUp:向上翻页
shift+PgDn:向下翻页

1. 帮助命令

帮助命令主要有2个:man、help。平时要多于帮助命令,遇到不清楚的命令就用帮助命令查看,无须死记硬背,熟能生巧。

1.1 man命令

语法:man [命令或配置文件]

作用:获取帮助信息

案例:

[root@heimatengyun ~]# man date

比如欲查看date命令的用法,输入命令man date之后出现下图信息

由于帮助信息比较多,需要翻页才能看完,因此先说明一下本界面可能需要用到按键及用途。

按键用途
空格键 向下翻页
PgDn(page down) 向下翻页
PgUp(page up) 向上翻页
home前往首页
end前往页尾
/从上至下搜索关键字,如“/linux”
从下至上搜索关键字,如“?linux”
n定位到下一个搜索到的关键词
N定位到上一个搜索到的关键词
q退出帮助文档

初学者一看,这么多的帮助信息反而感到困惑了,其实很简单的,我们来理一下帮助信息的结构(上图中圈红线的部分)。

结构名称说明
NAME命令的名称
SYNOPSIS命令的基本语法格式
DESCRIPTION详细说明语法格式对应的选项和参数的用法
EXAMPLES如何使用命令的示例
OVERVIEW概述
DEFAULTS默认功能
OPTIONS具体的可用选项
ENVIRONMENT环境变量
SEE ALSO相关的资料,通常是手册页

通过这些帮助信息,就可以轻松的掌握各个命令的用法

1.2 help命令

语法:help 命令

作用:获取shell内置命令的帮助信息

案例:

[root@heimatengyun ~]# help cd

在正式进入命令学习之前,再介绍几个linux常用的快捷键

快捷键作用
ctrl+l清屏
ctrl+q退出
ctrl+c停止进程
上下键查找曾今执行过的命令
tab命令补全,多用不仅提高效率还能防止敲错

既然linux一切皆文件,了解万能的帮助命令后,我们就从目录文件命令开始学习

2. 目录相关命令

目录可以对文件进行分类管理,因此在讲解文件命令之前先讲解目录相关命令

2.1 pwd

语法:pwd

功能描述:显示当前工作目录的绝对路径

案例:

[root@heimatengyun ~]# pwd
/root

在这里插入图片描述

2.2 ls

语法:ls [选项] [目录或文件]

功能描述:列出目录下的文件
在这里插入图片描述

选项:

  • -a(–all):显示全部文件,包括隐藏文件(以.开头的文件)
    在这里插入图片描述
-d:directory,列出目录本身
  • -l:long长数据串列出,包含文件的属性和权限等。每行列出的信息依次为:文件类型与权限、链接数、文件属性、文件属组、文件大小(byte)、创建或最近修改时间、名字

案例:
在这里插入图片描述

ls -l 命令和 ll 命令效果一样

在这里插入图片描述

[root@heimatengyun test]# ls -al
total 12
drwxr-xr-x.  2 root root   37 Nov 24 10:43 .
dr-xr-x---. 16 root root 4096 Nov 24 00:02 ..
-rw-r--r--.  1 root root   26 Nov 23 20:40 test1.txt
-rw-r--r--.  1 root root   66 Nov 23 21:56 test.txt
2.3 cd

语法:cd [选项][目录名称]

功能描述:切换到指定目录

案例:

  • cd 绝对路径或相对路径 (跳转到指定目录)
    在这里插入图片描述

  • cd 或cd ~ (返回当前用户家目录)

在这里插入图片描述

  • cd - (返回上一次所在的目录)
    在这里插入图片描述

  • cd … (返回当前目录的上一级目录)
    在这里插入图片描述

  • …/ 上一级目录
    在这里插入图片描述

  • ./ 当前目录
    在这里插入图片描述

  • ~ 用户的home家目录
    在这里插入图片描述

2.4 mkdir

语法:mkdir [选项] 目录名称

功能描述:创建指定目录

选项:

创建 文件夹test 并查看

在这里插入图片描述

  • -p :parents,创建多层目录

案例:

创建多层目录 cao/you

在这里插入图片描述

 [root@heimatengyun ~]# mkdir test
 [root@heimatengyun ~]# mkdir -p test1/test1
2.5 rmdir

语法: rmdir [选项] 目录名称

功能描述:删除空目录

删除空文件夹 test

在这里插入图片描述

选项:

  • -p:删除多级目录

案例:

删除多级目录 cao/you

在这里插入图片描述

 [root@heimatengyun ~]# rmdir test
 [root@heimatengyun ~]# rmdir -p test1/test1/ (如果不指定-p参数,则只删除最后一级不为空的目录)
2.6 cp

语法:cp 源目录或文件 目标目录或文件

功能描述:复制目录或文件

将文件anaconda-ks.cfg 文件复制到 cao文件夹中并命名为a.cfg

在这里插入图片描述

选项:

  • -r:recursive,递归复制整个文件夹

将 文件夹cao 复制到文件夹qin中并命名为cao2

可以发现使用-r复制文件夹(该文件夹中的文件也会一并复制)
在这里插入图片描述

[root@localhost ~]# ls
anaconda-ks.cfg  cao  qin
[root@localhost ~]# cp -r cao/ qin/cao2
[root@localhost ~]# cd qin/
[root@localhost qin]# ls
cao2
[root@localhost qin]# cd cao2/
[root@localhost cao2]# ls
a.cfg
2.7 mv

语法:mv [选项] 源 目标

将文件夹cao 移动到文件夹qin中

在这里插入图片描述

[root@localhost ~]# ls
anaconda-ks.cfg  cao  qin
[root@localhost ~]# mv cao/ qin/
[root@localhost ~]# ls
anaconda-ks.cfg  qin
[root@localhost ~]# cd qin/
[root@localhost qin]# ls
cao  cao2

功能描述:移动文件或重命名文件

将文件夹cao重命名为cao1

在这里插入图片描述

[root@localhost qin]# ls
cao  cao2
[root@localhost qin]# mv cao cao1
[root@localhost qin]# ls
cao1  cao2
[root@localhost qin]# 

2.8 rm

语法:rm [选项] 文件

功能描述:删除文件及目录

选项:

  • -f:force强制执行

  • -r:recursive递归执行

案例:

删除文件a.cfg

在这里插入图片描述

使用 rm - f 强制删除 不需要确认

使用 rm -r 删除文件夹

在这里插入图片描述

使用 rm -rf 删除文件夹 强制删除 不需要确认

在这里插入图片描述

通配符 *

此命令慎用 ~rm -rf * 会删除所有的文件 系统会崩掉

3. 文件相关命令

linux一切皆文件,在连接目录相关命令后,本节学习文件相关命令

3.1 touch

语法:touch [选项] 文件名

功能描述:touch 创建文件

创建一个文件 test.txt

在这里插入图片描述

[root@localhost qin]# cd ..
[root@localhost ~]# ls
anaconda-ks.cfg  qin
[root@localhost ~]# touch test.txt
[root@localhost ~]# ls
anaconda-ks.cfg  qin  test.txt
[root@localhost ~]# 
3.11 echo

语法:echo 字符串或变量

功能描述:输出字符串或变量值,还可以搭配从定向符将内容存储到文件

打印 hello Linux

[root@localhost ~]# echo hello Linux
hello Linux
[root@localhost ~]# 

在这里插入图片描述`

hello Linux 输出到文件test.txt

[root@localhost ~]# echo hello Linux >> test.txt 
[root@localhost ~]# vi test.txt 
[root@localhost ~]# vi test.txt 
[root@localhost ~]# 

在这里插入图片描述

3.2 cat

语法:cat [选项] 文件名

功能描述:查看文件内容,从第一行开始显示

选项:

  • -A:列出特殊字符而非空白

  • -b:列出行号,空白行不算行号

  • -n:列出行号,空白行也会有行号

  • -v:列出一些看不出来的特殊字符

使用cat 命令查看文件test.txt

**加粗样式**

我们使用 vi 编辑器在 test.txt 中多添加一个内容

在这里插入图片描述

-A:列出特殊字符而非空白

在这里插入图片描述

-b:列出行号,空白行不算行号

在这里插入图片描述
等 参数 此处不再记录

3.3 more

语法:more [选项] 文件

功能描述:查看文件内容,一页一页的显示

使用说明:

  • 空格键(space):向下翻一页

  • enter:向下翻一行

  • q:退出more,不在显示文件内容

  • ctrl+f:向下滚动一屏

  • ctrl+b:返回上一屏

  • =:输出当前行的行号

  • :f:输出文件名和当前行号

使用 more 命令查看 anaconda-ks.cfg文件

在这里插入图片描述
在这里插入图片描述
其余指令不在记录

3.4 head

语法:head [选项] 文件

功能描述:查看文件内容,只看头几行

选项:

  • -n:查看头n行

查看test.txt 文件的前三行

[root@localhost ~]# ls
anaconda-ks.cfg  qin  test.txt
[root@localhost ~]# head -3 test.txt 
hello Linux

d
[root@localhost ~]# 

在这里插入图片描述

3.5 tail

语法:tail [选项] 文件

功能描述:查看文件内容,只查看文件末尾几行

选项:

  • -n:末尾几行

  • -f:follow输出文件修改的内容,用于追踪文件修改

查看test.txt 文件的后三行

[root@localhost ~]# ls
anaconda-ks.cfg  qin  test.txt
[root@localhost ~]# tail -3 test.txt 
asd
f

[root@localhost ~]# 

在这里插入图片描述

3.6 wc

语法:wc [选项] 文本

功能描述:统计指定文本的行数、字数、字节数

选项:

  • -l:lines显示行数

  • -w:显示单词数

  • -c:显示字节数

查看test.txt文件

其余指令不在记录

3.7 stat

语法:stat [选项] 文件

功能描述:查看文件的具体存储信息和时间等信息

案例:

[root@heimatengyun test]# stat test.txt 
  File: ‘test.txt’
  Size: 60              Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 2160373     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-11-23 18:27:02.153101936 +0800
Modify: 2019-11-23 18:26:56.254259870 +0800
Change: 2019-11-23 18:26:56.254259870 +0800
 Birth: -
3.8 file

语法:file 文件名

功能描述:查看文件类型

案例:

[root@heimatengyun test]# file test.txt 
test.txt: ASCII text
3.9 wget

语法:wget [参数] [url地址]

功能:下载网络文件

参数:

-b:background后台下载

-P:directory-prefix下载到指定目录

-t:tries 最大尝试次数

-c:continue断点续传clear

-p:page-requisites下载页面所有内容,包括图片、视频等

-r:recursive递归下载

在使用wget 指令之前确保安装了wget指令

若没有安装使用以下指令安装

 yum install wget

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在百度上找一个图片复制链接

[root@localhost ~]# wget  https://cn.bing.com/images/search?q=%E5%9B%BE%E7%89%87&FORM=IQFRBA&id=1C8280D2D75B8653FE4F87817387F57189B5AA41

在这里插入图片描述
可以 使用其他参数将图片下载到别的目录中 等~

4.查找命令

有时候需要从大量文件中找出需要的文件或者从指定文件中查找特定内容,这就需要用到查找相关的命令。

4.1 find

语法:find [搜索范围] [匹配条件]

功能描述:查找文件或目录

参数说明

  • -name:按文件名称查找

  • -user:按文件拥有者查找

  • -size:根按文件大小查找文件(+n大于,-n小于,n等于)

查找test.txt文件在哪里

在这里插入图片描述

案例

在test目录下查找test1.txt文件

[root@heimatengyun ~]# find test/ -name test1.txt
test/test1.txt

查找test目录下查找用户root的文件

[root@heimatengyun ~]# find test/ -user root
test/
test/test.txt

在test目录下查找小于100M的文件

[root@heimatengyun ~]# find test/ -size -102400
test/
test/test.txt
4.2grep

语法:grep [参数] 查找内容 源文件

功能描述:在文件内搜索字符串匹配的行并输出

参数:

  • -c:count只输出匹配行的计数

  • -n:line-number

查找 hello 在文件test.txt 中哪一行

在这里插入图片描述

案例:

[root@heimatengyun test]# grep -n who test.txt 
3:who are you
[root@heimatengyun test]# grep -c who test.txt 
1
4.3 which

语法:which [选项] 命令

功能描述:搜索命令所在目录及别名信息

搜索 cd命令在那个目录下

在这里插入图片描述

搜索 mkdir命令在那个目录下

在这里插入图片描述

案例:

搜索cd命令所在的目录

[root@heimatengyun test]# which cd
/usr/bin/cd

5. 压缩解压

为了便于传输或节省存储空间有时候文件是以压缩包的形式存在,因此就需要了解压缩与解压相关命令。

5.1 tar 和 tar.gz

语法:tar [参数] 包名.tar.gz 待打包的内容

功能描述:打包目录,压缩后的文件格式为.tar.gz

参数:

  • -c:create生成.tar打包文件

  • -x:extract解包.tar文件

  • -v:verbose显示详细信息

  • -f:file指定压缩后的文件名

  • -z:打包同时压缩

  • -C:解压到指定目录

a. tar

tar格式(该格式仅仅打包,不压缩)

打包: tar -cvf [目标文件名].tar [原文件名/目录名]

解包: tar -xvf [原文件名].tar

注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名

将文件test2.txt文件打包为test02.tar

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test2.txt  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# tar -cvf test02.tar test2.txt 
test2.txt
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test2.txt  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# 

在这里插入图片描述

将刚刚打包好的test02.tar文件进行解包

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test2.txt  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# rm -f test2.txt 
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# tar -xvf test02.tar 
test2.txt
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test2.txt  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# 

在这里插入图片描述

b. tar.gz

tar.gz格式

方式一:利用前面已经打包好的tar文件,直接用压缩命令。

压缩:gzip [原文件名].tar
解压:gunzip [原文件名].tar.gz

将打包好的test02.tar文件进行压缩

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# gzip test02.tar 
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar.gz  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# 

在这里插入图片描述

将压缩文件 test02.tar.gz进行解压

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar.gz  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# gunzip test02.tar.gz 
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# 

在这里插入图片描述

方式二一次性打包并压缩、解压并解包

打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
解压并解包: tar -zxvf [原文件名].tar.gz

注:z代表用gzip算法来压缩/解压。

空文件夹2进行打包并压缩

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# tar -zcvf 空2.tar.gz 空文件夹2
空文件夹2/
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test.txt  空2.tar.gz  空文件夹1  空文件夹2
[root@localhost ~]# 

在这里插入图片描述

空2.tar.gz压缩文件解压并解包

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test.txt  空2.tar.gz  空文件夹1  空文件夹2
[root@localhost ~]# rm -rf 空文件夹2
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test.txt  空2.tar.gz  空文件夹1
[root@localhost ~]# tar -zxvf 空2.tar.gz 
空文件夹2/
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test02.tar  test.txt  空2.tar.gz  空文件夹1  空文件夹2
[root@localhost ~]# 

在这里插入图片描述

压缩目录

[root@heimatengyun ~]# tar -zcvf test.tar.gz test/

解压到当前目录

[root@heimatengyun test]# tar -zxvf test.tar.gz 
5.2 zip和unzip

zip格式
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
注:-r参数代表递归

功能描述:压缩文件和目录,windows和linux通用且可以压缩目录并保留源文件

出现 zip: 未找到命令时需要安装zip 同时安装unzip

在这里插入图片描述

[root@localhost ~]# yum install zip
[root@localhost ~]# yum install unzip

在这里插入图片描述
在这里插入图片描述

压缩空文件夹1空1.zip

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test.txt  空文件夹1  空文件夹2
[root@localhost ~]# zip -r 空1.zip 空文件夹1
  adding: 空文件夹1/ (stored 0%)
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test.txt  空1.zip  空文件夹1  空文件夹2
[root@localhost ~]# 

在这里插入图片描述

解压空1.zip

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test.txt  空1.zip  空文件夹1  空文件夹2
[root@localhost ~]# rm -rf 空文件夹1
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test.txt  空1.zip  空文件夹2
[root@localhost ~]# unzip 空1.zip 
Archive:1.zip
   creating: 空文件夹1/
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test.txt  空1.zip  空文件夹1  空文件夹2
[root@localhost ~]# 

在这里插入图片描述

5.3 gzip和gunzip

压缩:gzip [参数] 文件

解压:gunzip [参数] 文件.gz

功能描述:

  • 压缩:压缩文件,只能将文件压缩为.gz文件。只能压缩文件不能压缩目录,压缩解压后不保留原来的文件。对单个文件压缩

  • 解压:解压文件

压缩test2.txt

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test2.txt  test.txt  空1.zip  空文件夹1
[root@localhost ~]# gzip test2.txt 
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test2.txt.gz  test.txt  空1.zip  空文件夹1
[root@localhost ~]# 

在这里插入图片描述

解压test2.txt.gz

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test2.txt.gz  test.txt  空1.zip  空文件夹1
[root@localhost ~]# gunzip test2.txt.gz 
[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test2.txt  test.txt  空1.zip  空文件夹1
[root@localhost ~]# 

在这里插入图片描述

6. 日期命令

日期相关命令用于设置或获取系统日期

6.1 date

1. 作用: 显示或设置系统时间与日期

2. 概要

  • date [OPTION]… [+FORMAT]
  • date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]

3. 主要用途

  • 转换时间到选定的格式,默认为当前。
  • 设置系统时间。

4. 参数

  • format:输出的时间格式。

  • format可用的转义序列如下:

%%      百分号
%a      当地缩写的工作日名称(例如,Sun)
%A      当地完整的工作日名称(例如,Sunday)
%b      当地缩写的月份名称(例如,Jan)
%B      当地完整的月份名称(例如,January)
%c      当地的日期和时间(例如,Thu Mar  3 23:05:25 2005)
%C      世纪,和%Y类似,但是省略后两位(例如,20)
%d      一月中的一天(例如,01)
%D      日期,等价于%m/%d/%y
%e      一月中的一天,格式使用空格填充,等价于%_d
%F      完整的日期;等价于%+4Y-%m-%d
%g      ISO标准计数周的年份的最后两位数字
%G      ISO标准计数周的年份,通常只对%V有用
%h      等价于%b
%H      小时,范围(00..23)
%I      小时,范围(00..23)
%j      一年中的一天,范围(001..366)
%k      小时,使用空格填充,范围(0..23),等价于%_H
%l      小时,使用空格填充,范围(1..12),等价于%_I
%m      月,范围(01..12)
%M      分钟,范围(00..59)
%n      换行符
%N      纳秒,范围(000000000..000000000)
%p      用于表示当地的AM或PM,如果未知则为空白
%P      类似于%p,但用小写表示
%q      季度,范围(1..4)
%r      当地以12小时表示的时钟时间(例如,11:11:04 PM)
%R      24小时每分钟;等价于%H:%M
%s      自协调世界时1970年01月01日00时00分以来的秒数
%S      秒数,范围(00..60)
%t      水平制表符
%T      时间;等价于%H:%M:%S
%u      一周中的一天(1..7),1代表星期一
%U      一年中的第几周,周日作为一周的起始(00..53)
%V      ISO标准计数周,该方法将周一作为一周的起始(01..53)
%w      一周中的一天(0..6),0代表星期天
%W      一年中的第几周,周一作为一周的起始(00..53)
%x      当地的日期表示(例如,12/31/99)
%X      当地的时间表示(例如,23:13:48)
%y      年份后两位数字,范围(00..99)
%Y      年份
%z      +hhmm格式的数值化时区格式(例如,-0400)
%:z     +hh:mm格式的数值化时区格式(例如,-04:00)
%::z    +hh:mm:ss格式的数值化时区格式(例如,-04:00:00)
%:::z   数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30)
%Z      时区缩写(如EDT)

默认情况下,日期用零填充数字字段;以下可选的符号可以跟在'%'后面:

  • -(连字符) 不要填充相应的字段。
  • _ (下划线) 使用空格填充相应的字段。
  • 0 (数字0) 使用数字0填充相应的字段。
  • +用数字0填充,未来年份大于4位数字则在前面加上’+'号。
  • ^允许的情况下使用大写。

允许的情况下将默认的大写转换为小写,默认的小写转换为大写

在任何标志之后都有一个可选的字段宽度,如小数;然后是一个可选的修饰符,在可用的情况下,使用E来使用当地语言环境的替代表示,使用O来使用当地语言环境的替代数字符号。

选项 长选项与短选项等价

-d, --date=STRING          解析字符串并按照指定格式输出,字符串不能是'now'--debug                    注释已解析的日期,并将有疑问的用法发送到标准错误。
-f, --file=DATEFILE        类似于--date; 一次从DATEFILE处理一行。
-I[FMT], --iso-8601[=FMT]  按照ISO 8601格式输出,FMT可以为'date'(默认)'hours''minutes''seconds''ns'。
                           例如:2006-08-14T02:34:56-06:00
-R, --rfc-email            按照RFC 5322格式输出,例如: Mon, 14 Aug 2006 02:34:56 -0600
--rfc-3339=FMT             按照RFC 3339格式输出,FMT可以为'date', 'seconds','ns'中的一个,
                           例如:2006-08-14 02:34:56-06:00
-r, --reference=FILE       显示文件的上次修改时间。
-s, --set=STRING           根据字符串设置系统时间。
-u, --utc, --universal     显示或设置世界协调时(UTC)--help                     显示帮助信息并退出。
--version                  显示版本信息并退出。

返回值
返回状态为成功除非给出了非法选项或非法参数。

例子

1. 格式化输出:

[root@localhost ~]# date
2022年 04月 24日 星期日 08:12:30 CST
[root@localhost ~]# date +"%Y-%m-%d"
2022-04-24
[root@localhost ~]# 

在这里插入图片描述

2. 输出昨天日期:

[root@localhost ~]# date
2022年 04月 24日 星期日 08:47:25 CST
[root@localhost ~]# date -d "1 day ago" +"%Y-%m-%d"
2022-04-23
[root@localhost ~]# 

在这里插入图片描述

3. 2秒后输出:

[root@localhost ~]# date
2022年 04月 24日 星期日 08:50:07 CST
[root@localhost ~]# date -d "2 second" +"%Y-%m-%d %H:%M:%S"
2022-04-24 08:50:11
[root@localhost ~]#

在这里插入图片描述

4. 传说中的 1234567890 秒:date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%M:%S"
或者 "date -d@1234567890 +"%F %T"

[root@localhost ~]# date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%M:%S"
2009-02-13 23:31:30
[root@localhost ~]# date -d@1234567890 +"%F %T"
2009-02-14 07:31:30
[root@localhost ~]# 

在这里插入图片描述

%F 和 %T

[root@localhost ~]# date +"%F"
2022-04-24
[root@localhost ~]# date +"%T"
08:53:58
[root@localhost ~]# 

在这里插入图片描述

5. 时间格式转换:date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"

[root@localhost ~]# date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00
[root@localhost ~]# 

在这里插入图片描述

6. apache格式转换:date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S

[root@localhost ~]# date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
2009-12-05 00:00.37
[root@localhost ~]# 

在这里插入图片描述

*7. 格式转换后时间游走:date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"

输出结果
[root@localhost ~]# date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37
[root@localhost ~]# 

在这里插入图片描述

8. 时间加减操作:

date +%Y%m%d                   # 显示年月日
date -d "+1 day" +%Y%m%d       # 显示前一天的日期
date -d "-1 day" +%Y%m%d       # 显示后一天的日期
date -d "-1 month" +%Y%m%d     # 显示上一月的日期
date -d "+1 month" +%Y%m%d     # 显示下一月的日期
date -d "-1 year" +%Y%m%d      # 显示前一年的日期
date -d "+1 year" +%Y%m%d      # 显示下一年的日期

9. 设定时间:

date -s                         # 设置当前时间,只有root权限才能设置,其他只能查看
date -s 20120523                # 设置成20120523,这样会把具体时间设置成00:00:00
date -s 01:01:01                # 设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23"   # 这样可以设置全部时间
date -s "01:01:01 20120523"     # 这样可以设置全部时间
date -s "2012-05-23 01:01:01"   # 这样可以设置全部时间
date -s "20120523 01:01:01"     # 这样可以设置全部时间

10.有时需要检查一组命令花费的时间:

start=$(date +%s)
nmap wangchujiang.com &> /dev/null
end=$(date +%s)
difference=$(( end - start ))

11.显示执行时间

echo $difference seconds.

12.当你考虑输出带有时间的字符串时,例如(Current time: 2019/05/19):

  1. 通常使用的方法:
echo "Current time: $(date +"%Y/%m/%d")"
  1. 另一种方法:
suffix='Current time:'

13. 注意如果换成单引号就不能替换变量了。

date +"${suffix} %Y/%m/%d"

注意 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 date或info coreutils 'date invocation'。

7. 进程线程命令

ps 报告当前系统的进程状态

1. 补充说明
ps命令 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

2. 语法

 ps (选项)

3.选项

-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
a:显示现行终端机下的所有程序,包括其他用户的程序。
-A:显示所有程序。
-c:显示CLS和PRI栏位。
c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。
-d:显示所有程序,但不包括阶段作业领导者的程序。
-e:此选项的效果和指定"A"选项相同。
e:列出程序时,显示每个程序所使用的环境变量。
-f:显示UID,PPIP,C与STIME栏位。
f:用ASCII字符显示树状结构,表达程序间的相互关系。
-g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。
g:显示现行终端机下的所有程序,包括群组领导者的程序。
-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。
h:不显示标题列。
-H:显示树状结构,表示程序间的相互关系。
-j或j:采用工作控制的格式显示程序状况。
-l或l:采用详细的格式来显示程序状况。
L:列出栏位的相关信息。
-m或m:显示所有的执行绪。
n:以数字来表示USER和WCHAN栏位。
-N:显示所有的程序,除了执行ps指令终端机下的程序之外。
-p<程序识别码>:指定程序识别码,并列出该程序的状况。
p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。
r:只列出现行终端机正在执行中的程序。
-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
s:采用程序信号的格式显示程序状况。
S:列出程序时,包括已中断的子程序资料。
-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。
t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。
-T:显示现行终端机下的所有程序。
-u<用户识别码>:此选项的效果和指定"-U"选项相同。
u:以用户为主的格式来显示程序状况。
-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
U<用户名称>:列出属于该用户的程序的状况。
v:采用虚拟内存的格式显示程序状况。
-V或V:显示版本信息。
-w或w:采用宽阔的格式来显示程序状况。 
x:显示所有程序,不以终端机来区分。
X:采用旧式的Linux i386登陆格式显示程序状况。
-y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。
-<程序识别码>:此选项的效果和指定"p"选项相同。
--cols<每列字符数>:设置每列的最大字符数。
--columns<每列字符数>:此选项的效果和指定"--cols"选项相同。
--cumulative:此选项的效果和指定"S"选项相同。
--deselect:此选项的效果和指定"-N"选项相同。
--forest:此选项的效果和指定"f"选项相同。
--headers:重复显示标题列。
--help:在线帮助。
--info:显示排错信息。
--lines<显示列数>:设置显示画面的列数。
--no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。
--group<群组名称>:此选项的效果和指定"-G"选项相同。
--Group<群组识别码>:此选项的效果和指定"-G"选项相同。
--pid<程序识别码>:此选项的效果和指定"-p"选项相同。
--rows<显示列数>:此选项的效果和指定"--lines"选项相同。
--sid<阶段作业>:此选项的效果和指定"-s"选项相同。
--tty<终端机编号>:此选项的效果和指定"-t"选项相同。
--user<用户名称>:此选项的效果和指定"-U"选项相同。
--User<用户识别码>:此选项的效果和指定"-U"选项相同。
--version:此选项的效果和指定"-V"选项相同。
--widty<每列字符数>:此选项的效果和指定"-cols"选项相同。
7.1 ps

语法:ps [选项]

功能描述:查看系统中所有进程

参数:

  • -a:all 显示现行终端机下的所有程序,包括其他用户的程序(比如多克隆几个会话执行不同命令,也会列出来)

  • -u:userlist 以用户为主的格式来显示程序状况

  • -x: 显示所有程序,不以终端机来区分 (前面讲过终端有很多类型,不仅显示当前终端)

由于ps命令能够支持的系统类型相当的多,所以选项多的离谱!

可以使用管道命令筛选

ps -aux | grep xxx

4.实例

ps axo pid,comm,pcpu # 查看进程的PID、名称以及CPU 占用率
ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序
ps aux | sort -nk 3  # 按 CPU 资源的使用量对进程进行排序
ps -A # 显示所有进程信息
ps -u root # 显示指定用户信息
ps -efL # 查看线程数
ps -e -o "%C : %p :%z : %a"|sort -k5 -nr # 查看进程并按内存使用大小排列
ps -ef # 显示所有进程信息,连同命令行
ps -ef | grep ssh # ps 与grep 常用组合用法,查找特定进程
ps -C nginx # 通过名字或命令搜索进程
ps aux --sort=-pcpu,+pmem # CPU或者内存进行排序,-降序,+升序
ps -f --forest -C nginx # 用树的风格显示进程的层次关系
ps -o pid,uname,comm -C nginx # 显示一个父进程的子进程
ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm # 重定义标签
ps -e -o pid,comm,etime # 显示进程运行的时间
ps -aux | grep named # 查看named进程详细信息
ps -o command -p 91730 | sed -n 2p # 通过进程id获取服务名称

5.将目前属于您自己这次登入的 PID 与相关信息列示出来

ps -l
UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
501   566   559     4006   0  31  0  4317620    228 -      Ss                  0 ttys001    0:00.05 /App...cOS/iTerm2 --server /usr/bin/login -fpl kenny /Ap...s/MacOS/iTerm2 --launch_shel
501   592   577     4006   0  31  0  4297048     52 -      S                   0 ttys001    0:00.63 -zsh
F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID !
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍
NI 这个是 Nice 值,在下一小节我们会持续介绍
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何

在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l 的时候,只有三个 PID。

6.列出目前所有的正在内存当中的程序

ps aux
USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
kenny             6155  21.3  1.7  7969944 284912   ??  S    二03下午 199:14.14 /Appl...OS/WeChat
kenny              559  20.4  0.8  4963740 138176   ??  S    二03下午  33:28.27 /Appl...S/iTerm2
_windowserver      187  18.0  0.6  7005748  95884   ??  Ss   二03下午 288:44.97 /Syst...Light.WindowServer -daemon
kenny             1408  10.7  2.1  5838592 347348   ??  S    二03下午 138:51.63 /Appl...nts/MacOS/Google Chrome
kenny              327   5.8  0.5  5771984  79452   ??  S    二03下午   2:51.58 /Syst...pp/Contents/MacOS/Finder
USER:该 process 属于那个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令

7.列出类似程序树的程序显示

ps -axjf
USER               PID  PPID  PGID   SESS JOBC STAT   TT       TIME COMMAND            UID   C STIME   TTY
root                 1     0     1      0    0 Ss     ??   10:51.90 /sbin/launchd        0   0 二03下午 ??
root                50     1    50      0    0 Ss     ??    0:10.07 /usr/sbin/syslog     0   0 二03下午 ??
root                51     1    51      0    0 Ss     ??    0:29.90 /usr/libexec/Use     0   0 二03下午 ??

8.找出与 cron 与 syslog 这两个服务有关的 PID 号码

ps aux | egrep '(cron|syslog)'
root                50   0.0  0.0  4305532   1284   ??  Ss   二03下午   0:10.08 /usr/sbin/syslogd
kenny            90167   0.0  0.0  4258468    184 s007  R+    9:23下午   0:00.00 egrep (cron|syslog)

9.把所有进程显示出来,并输出到test2.txt文件

ps -aux > test2.txt
7.2 top

语法:top [选项]

功能描述:查看系统健康状态

参数:

-d 秒数:Delay-time,指定top命令每隔几秒更新,默认是3秒。

-i:Idle-process,使top命令不显示任何闲置或者僵死进程

-p:Monitor-PIDs ,通过指定监控进程ID来仅仅监控某个进程的状态

-s:Secure-mode,使top在安全模式运行,去除交互命令所带来的潜在危险

案例:

查看非僵死进程,一秒钟刷新一次

[root@heimatengyun test]# top -i -d 1
top - 12:39:19 up 1 day, 14:31,  3 users,  load average: 0.04, 0.04, 0.05
Tasks: 395 total,   1 running, 391 sleeping,   3 stopped,   0 zombie
%Cpu(s):  0.0 us,  1.0 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   1870784 total,   720520 used,  1150264 free,      880 buffers
KiB Swap:  2097148 total,        0 used,  2097148 free.   238616 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND              
 29987 root      20   0  123936   1868   1160 R   2.0  0.1   0:08.32 top 
 ...省略部分内容

在此界面可以通过如下相应按键进行排序操作

操作键说明
shift+n以PID排序
shift+m以内存排序
shift+p以cpu使用率排序,默认选项
q退出top

命令结果解释

第一行:任务队列信息

内容说明
12:20:42当前系统时间
up 1 day, 14:12系统运行时间
3 users当前登录用户数
load average: 0.08,0.01, 0.05系统在之前1分钟、5分钟、15分钟的平均负载,一般认为小于1时,负载较小,如果大于1说明系统已经超出负载

第二行:进程信息

内容说明
Tasks: 395 total系统中的总进程数
1 running正在运行的进程数
391 sleeping睡眠的进程
3 stopped正在停止的进程
0 zombie僵尸进程,如果不是0,需要手工检查僵尸进程

第三行:cpu信息

内容说明
%Cpu(s): 0.0 us用户模式占用的cpu百分比
1.0 sy系统模式占用的cpu百分比
0.0 ni改变过优先级的用户进程占用的cpu百分比
99.0 id空闲cpu的百分比
0.0 wa等待输入、输出的进程占用cpu的百分比
0.0 hi硬中断请求服务占用的cpu百分比
0.0 si软中断请求服务占用的cpu百分比
0.0 ststeal time虚拟世界百分比,当有虚拟机时,虚拟cpu等待时机cpu的时间百分比

ps:如果服务器有多个cpu,将显示多行

第四行:物理内存信息

内容说明
KiB Mem: 1870784 total物理内存的总量,单位KB
720520 used已使用的物理内存数量
1150264 free空闲的物理内存数量
880 buffers作为缓冲的内存数量

第五行:交换分区信息

内存说明
KiB Swap: 2097148 total交换分区(虚拟内存)的总大小
0 used已经使用的交换分区的大小
2097148 free空闲交换分区的大小
238616 cached Mem作为缓存的交换分区的大小

第六行:空行

第七行:表头信息

内容说明
PID进程id
USER进程所有者
PR进程优先级
NI负值表示高优先级,正值表示低优先级
VIRT进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR共享内存大小,单位kb
S进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU上次更新到现在的CPU时间占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间总计,单位1/100秒
COMMAND进程名称(命令名/命令行)
7.3 pidof

语法:pidof [参数] 服务名称

功能描述:查询某个指定服务进程的pid值

案例:

查看sshd服务的进程id

[root@heimatengyun test]# pidof sshd
2962 2247
7.4 pstree

语法:pstree [选项]

功能描述:查看进程树

选项:

-p:显示进程的PID

案例:

[root@heimatengyun test]# pstree -p
systemd(1)─┬─ModemManager(948)─┬─{ModemManager}(1004)
           │                   └─{ModemManager}(1031)
           ├─NetworkManager(1123)─┬─{NetworkManager}(1284)
           │                      └─{NetworkManager}(1312)
           ...省略部分内容
7.5 kill 常用

语法:kill [选项] 进程id

功能描述:终止某个指定pid的服务进程

选项:

-9:强迫进程立即停止

案例:

[root@heimatengyun test]# kill -9 20385

7.6 killall

语法:killall [选项] 服务名

功能描述:终止某个指定名称的服务对应的所有进程

下面是常用的信号。
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。

HUP     1    终端挂断
INT     2    中断(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
KILL    9    强制终止
TERM   15    终止
CONT   18    继续(与STOP相反,fg/bg命令)
STOP   19    暂停(同 Ctrl + Z)

案例:

# 以下发送KILL信号的形式等价。当然还有更多的等价形式,在此不一一列举了。
[user2@pc] kill -s SIGKILL PID
[user2@pc] kill -s KILL PID
[user2@pc] kill -n 9 PID
[user2@pc] kill -9 PID

[user2@pc] sleep 90 &
[1] 178420

# 终止作业标识符为1的作业。
[user2@pc] kill -9 %1

[user2@pc] jobs -l
[1]+ 178420 KILLED                  ssh 192.168.1.4

[user2@pc] sleep 90 &
[1] 181357

# 发送停止信号。
[user2@pc] kill -s STOP 181357

[user2@pc] jobs -l
[1]+ 181537 Stopped (signal)        sleep 90

# 发送继续信号。
[user2@pc] kill -s CONT 181357

[user2@pc] jobs -l
[1]+ 181537 Running                 sleep 90 &

终止httpd服务的所有进程

[root@heimatengyun test]# killall httpd

8. 系统状态检测命令

通过相关命令检查系统状态以及资源耗用情况,保证系统健康稳定运行

8.1 ifconfig

CentOS 7 安装 ifconfig 管理命令,通过yum 安装,运行 yum install net-tools.x86_64 即可安装
详细文档查看:网址

语法:ifconfig [网络设备] [参数]

功能描述:获取网卡配置和网络状态信息

案例:

[root@localhost ~]# ifconfig

在这里插入图片描述

主要查看内容:网卡名称(eno16777736 )、ip地址(inet之后)物理网卡地址即mac地址(ether)、TX和TX接收和发送数据包的个数和累计流量

8.2 netstat 重要

语法:netstat [参数]

功能描述:显示整个系统目前网络情况,比如目前的链接、数据包传递数据、路由表内容等

[root@localhost ~]# netstat

在这里插入图片描述

netstat -nplt 来查看

[root@localhost ~]# netstat -nplt

在这里插入图片描述

8.3 uname

语法:uname [选项]

功能描述:查看系统内核和系统版本等信息

参数

  • -a:all显示系统完整信息

  • -s:kernel-name系统内核名称

  • -n:nodename节点名称

  • -r:kernel-release内核发行版

  • -v:kernel-version内核版本

  • -m:machine硬件名称

  • -i:hardware-platform硬件平台

  • -p:processor处理器类型

  • -o:operating-system操作系统名称

案例:

uname -a 查看系统信息

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# 

在这里插入图片描述
显示信息依次为:内核名称(Linux)、主机名(heimatengyun)、内核发行版(3.10.0-123.el7.x86_64)、内核版本(#1 SMP Mon Jun 30 12:09:22 UTC 2014)、硬件名称(x86_64)、硬件平台(x86_64)、处理器类型(x86_64)及操作系统名称(GNU/Linux)。

如果要查看单签系统版本的详细信息,通过查看/etc/redhat-release文件

[root@heimatengyun test]# cat /etc/redhat-release 
CentOS Linux release 7.0.1406 (Core)
8.4 uptime

语法:uptime [选项]

功能描述:查看系统的负载信息,可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指系统在最近1分钟、5分钟、15分钟内的压力情况,负载值越低越好,尽量不要长期超过1,生产环境不要超过5.

[root@localhost ~]# uptime
 11:55:21 up  4:13,  2 users,  load average: 0.06, 0.08, 0.08
[root@localhost ~]# 

在这里插入图片描述

8.5 free

语法:free [选项]

功能描述:显示当前系统中内存的使用信息

选项:

  • -m:megabytes以兆字节显示

  • -h:human带单位输出

案例:

[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        174M        3.2G         11M        346M        3.2G
Swap:          3.9G          0B        3.9G
[root@localhost ~]# 

在这里插入图片描述

8.5 who

语法:who [参数]

功能描述:查看当前登入主机的用户终端信息

案例

[root@heimatengyun test]# who
root     pts/0        2019-11-22 22:10 (192.168.78.1)
root     pts/1        2019-11-23 11:53 (192.168.78.1)
8.6 last

语法:last [参数]

功能描述:查看所有的系统登录记录。但是要注意,这些信息是以日志文件保存的,因此黑客可以很容易进行修改,所以不能单纯以该命令来判断是否有黑客入侵。

案例

[root@heimatengyun test]# last
root     pts/2        192.168.78.1     Sun Nov 24 13:09 - 13:36  (00:26) 
root     pts/1        192.168.78.1     Sat Nov 23 11:53   still logged in 
... 省略部分内容
8.7 history

语法:history [参数]

功能描述:显示历史执行过的命令

选项:

  • -c:清除所有历史记录,但是.bash_history文件内容不会删除

案例:

[root@heimatengyun test]# history
    1  history
    2  ll
    3  ls
    4  history
[root@heimatengyun test]# !2
ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt

可以用“!编号”执行某一次曾经执行过的命令
默认可以查看1000条历史记录,但可以在/etc/profile中修改HISTSIZE的值
历史命令保存在一个农户家目录的.bash_history文件中(.开头为隐藏文件通过ls或ll -a列出),可以用cat命令查看

9. 关机命令

linux一般用在服务器上,很少遇到关机的情况,毕竟关机服务就会中断,除非特殊情况不得已才会关闭。

正确的关机流程:sync>shutdown或reboot或halt

无论重启还是关机,都需要先sync将内存数据同步到硬盘中,避免数据丢失

9.1 reboot

语法:reboot [ 选项]

功能描述:重启系统,等同于shutdown -r now

案例:

[root@heimatengyun ~]# reboot
9.2 poweroff

**语法:**poweroff [选项]

功能描述:关闭系统

案例

[root@heimatengyun ~]# poweroff
9.3 halt

语法:halt [选项]

功能描述:关闭系统,等同于shutdown -h now和poweroff

案例

[root@heimatengyun ~]# halt
9.4 shutdown

语法:shutdown [选项] [关机时间] [提示内容]

功能描述:关机

选项

  • -h:关机

  • -r:重启

关机时间:

  • hh:mm:指定24小时制的小时和分钟后关机

  • +m:m分钟后关机(+1:默认值,1分钟后关机; +0:now,立刻关机)

案例:

1分钟后关机并提示所有已登录系统的用户

[root@localhost ~]# shutdown -h 1 "一分钟后关机"

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
用户及文件相关权限命令将在以后的文章中讲解,还有很多其他的命令,由于篇幅所限不在此讨论。下一篇文章文章将分享“linux入门系列6–软件包管理之rpm和yum仓库”。

10. >> 和 >
>> 追加
> 覆盖

将当前日期追加到test2.txt文档中

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test2.txt  test.txt  空1.zip  空文件夹1
[root@localhost ~]# date >> test2.txt 
[root@localhost ~]# cat test2.txt 

在这里插入图片描述

将当前日期写到test2.txt文档中并覆盖文档中的其他内容

[root@localhost ~]# ls
1.png  anaconda-ks.cfg  cao1  qin  test2.txt  test.txt  空1.zip  空文件夹1
[root@localhost ~]# date > test2.txt 
[root@localhost ~]# cat test2.txt 
2022年 04月 24日 星期日 09:07:06 CST
[root@localhost ~]# 

在这里插入图片描述

11.查看磁盘容量

显示磁盘的相关信息

补充说明

  • df命令 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法

  • df (选项) (参数)

选项

-a或--all:包含全部的文件系统;
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-k或--kilobytes:指定区块大小为1024字节;
-l或--local:仅显示本地端的文件系统;
-m或--megabytes:指定区块大小为1048576字节;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
-P或--portability:使用POSIX的输出格式;
--sync:在取得磁盘使用信息前,先执行sync指令;
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type:显示文件系统的类型;
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
--help:显示帮助;
--version:显示版本信息。

参数

  • 文件:指定文件系统上的文件。

  • 大小格式
    显示值以 --block-size 和 DF_BLOCK_SIZE,BLOCK_SIZE 和 BLOCKSIZE 环境变量中的第一个可用 SIZE 为单位。 否则,单位默认为 1024 个字节(如果设置 POSIXLY_CORRECT,则为512)。

  • SIZE是一个整数和可选单位(例如:10M是10 * 1024 * 1024)。 单位是K,M,G,T,P,E,Z,Y(1024的幂)或KB,MB,…(1000的幂)。

实例

查看系统磁盘设备,默认是KB为单位:

[root@LinServ-1 ~]# df
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda2            146294492  28244432 110498708  21% /
/dev/sda1              1019208     62360    904240   7% /boot
tmpfs                  1032204         0   1032204   0% /dev/shm
/dev/sdb1            2884284108 218826068 2518944764   8% /data1

使用-h选项以KB以上的单位来显示,可读性高:

[root@LinServ-1 ~]# df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/sda2             140G   27G  106G  21% /
/dev/sda1             996M   61M  884M   7% /boot
tmpfs                1009M     0 1009M   0% /dev/shm
/dev/sdb1             2.7T  209G  2.4T   8% /data1

查看全部文件系统:

[root@LinServ-1 ~]# df -a
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda2            146294492  28244432 110498708  21% /
proc                         0         0         0   -  /proc
sysfs                        0         0         0   -  /sys
devpts                       0         0         0   -  /dev/pts
/dev/sda1              1019208     62360    904240   7% /boot
tmpfs                  1032204         0   1032204   0% /dev/shm
/dev/sdb1            2884284108 218826068 2518944764   8% /data1
none                         0         0         0   -  /proc/sys/fs/binfmt_misc

显示 public 目录中的可用空间量,如以下输出中所示:

df public
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/loop0      18761008 15246924   2554392  86% /d Avail
[root@localhost ~]# df -h

在这里插入图片描述

第三章 权限管理

0、 连接别人的Linux系统

端口转发


在这里插入图片描述
在这里插入图片描述

查询本机IP地址

在这里插入图片描述

关闭本机防火墙

在这里插入图片描述

新建连接

在这里插入图片描述

连接成功

在这里插入图片描述

1、权限简介

  • Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。
  • Linux下文件的权限类型一般包括读,写,执行。对应字母为 r(read)、w(write)、x(execute)。
  • Linux下权限的粒度有 拥有者 、群组 、其它组 三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。
  • Linux上通常使用chmod命令对文件的权限进行设置和更改

2、创建用户和组

语法

usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]

参数说明:

  • -c<备注>  修改用户帐号的备注文字。
  • -d<登入目录>  修改用户登入时的目录。
  • -e<有效期限>  修改帐号的有效期限。
  • -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
  • -g<群组>  修改用户所属的群组。
  • -G<群组>  修改用户所属的附加群组。
  • -l<帐号名称>  修改用户帐号名称。
  • -L  锁定用户密码,使密码无效。
  • -s  修改用户登入后所使用的shell。
  • -u  修改用户ID。
  • -U  解除密码锁定。

https://www.jianshu.com/p/5c393e414736

更改登录目录

usermod -d /home/hnlinux root

改变用户的uid

usermod -u 777 root

永久性删除用户账号

userdel testuser 
groupdel testgroup
usermod –G testgroup testuser  //(强制删除该用户的主目录和主目录下的所有文件和子目录)

显示用户信息

id user
cat /etc/passwd

1.创建一个用户名为cyg 并修改用户密码为12345678

[root@localhost ~]# useradd cyg
[root@localhost ~]# passwd cyg
更改用户 cyg 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# 

在这里插入图片描述

2. 切换到用户cyg·

[root@localhost ~]# su cyg
[cyg@localhost root]$ 

在这里插入图片描述

3. 查看cyg用户的信息

[cyg@localhost root]$ id cyg
uid=1000(cyg) gid=1000(cyg) 组=1000(cyg)
[cyg@localhost root]$ 

在这里插入图片描述

4. 创建一个组名为kf6bu

[root@localhost ~]# groupadd kf6bu
[root@localhost ~]# 

在这里插入图片描述

5.将用户cyg添加到kf6bu中

[root@localhost ~]# usermod -g kf6bu cyg
[root@localhost ~]# id cyg
uid=1000(cyg) gid=1001(kf6bu) 组=1001(kf6bu)
[root@localhost ~]# 

在这里插入图片描述

6.在创建一个用户qtt 创建的同时将该用户也加入到kf6bu

[root@localhost ~]# useradd -g kf6bu qtt
[root@localhost ~]# id qtt
uid=1001(qtt) gid=1001(kf6bu) 组=1001(kf6bu)
[root@localhost ~]# 

在这里插入图片描述

7.修改用户名字cygcaoyougen

[root@localhost ~]# usermod -l caoyougen cyg
[root@localhost ~]# id caoyougen
uid=1000(caoyougen) gid=1001(kf6bu) 组=1001(kf6bu)
[root@localhost ~]# 

在这里插入图片描述

8.创建组kf5bu并将kf6bu中的caoyougen调到kf5bu

[root@localhost ~]# groupadd kf5bu
[root@localhost ~]# id caoyougen
uid=1000(caoyougen) gid=1001(kf6bu) 组=1001(kf6bu)
[root@localhost ~]# usermod -g kf5bu caoyougen
[root@localhost ~]# id caoyougen
uid=1000(caoyougen) gid=1002(kf5bu) 组=1002(kf5bu)
[root@localhost ~]# 

在这里插入图片描述

9.将kf6bu添加到用户caoyougen的附属组中

[root@localhost ~]# id caoyougen
uid=1000(caoyougen) gid=1002(kf5bu) 组=1002(kf5bu)
[root@localhost ~]# usermod -G kf6bu caoyougen
[root@localhost ~]# id caoyougen
uid=1000(caoyougen) gid=1002(kf5bu) 组=1002(kf5bu),1001(kf6bu)
[root@localhost ~]# 

在这里插入图片描述

3、基础权限

Linux文件一共有三种身份:

  • u:文件的拥有者(user)
  • g:文件所属的群组(group)
  • o:其他用户(other)

对于每个身份,又有四种权限:

  • r:读取文件的权限(read)
  • w:写入文件的权限(write)
  • x:执行的权限(execute)
  • s:特殊权限(special)

4、如何查询文件权限属性

通过ls -al 文件名 指令来查询文件的属性

[root@localhost ~]# ls -al

在这里插入图片描述
以上7项依次表示【文件的属性-rw-r–r–】、【连接数1】、【文件的拥有者xyz】、【文件所属的群组staff】、【文件大小】、【文件创建时间】和【文件名称】

5、文件属性解释

在Linux系统中,文件的属性由10个字符来表示。 第一个字符表示文件的类型,其余9个字符分为三组,每组三个,分别表示文件的拥有者、群组以及其他人对该文件的访问权限。

每组依次表示读取、写入、和执行的权限,如果没有该权限,则以**-**显示。

对于-rw-r--r-- 分别为:

文件类型文件拥有者的权限群组的权限其他人的权限
-rw-r–r–

文件类型:

-    一般文件
d    文件夹(或者叫目录)
l    符号链接文件(类似windows下的快捷方式一样的东西)
b    磁盘设备文件
c    字符设备文件((和磁盘设备文件,主要是和周边硬件连接,作为系统和硬件之间的接口))
s    Socket文件((内部进程通信的一种特殊文件,也可作为和远程主机通信的管道))
p    连接文件(是一种内部进程通信的机制,一个进程把数据写入Pipe中,另一个进程则由Pipe读取数据,数据采用先进先出(FIFO)的次序,称为管道)

6、chmod以字符形式改变文件

给三种身份都赋予执行的权限

chmod +x 文件名

等价于

chmod a+x 文件名

也拆开写,a表示all所有人分别用u、g、o替换
对应: 去掉某个身份的某个权限,只需要将+变为-即可。比如

chmod u-r 文件名
  1. 创建一个脚本文件HelloWord,并在脚本中添加打印程序echo "HelloLinux"

注:使用 vi HelloWord.sh 可直接创建该文件并进入编辑

[root@localhost ~]# vi HelloWord.sh
[root@localhost ~]# 

在这里插入图片描述
在这里插入图片描述

2.查看文件的类型

[root@localhost ~]# ll

在这里插入图片描述

3.将HelloWord文件添加可执行权限(所有人)

[root@localhost ~]# chmod +x HelloWord.sh 

在这里插入图片描述

4.执行HelloWord文件

[root@localhost ~]# ./HelloWord.sh 
Hello Linux
[root@localhost ~]# 

在这里插入图片描述

5.去掉文件HelloWord所有人的可执行权限

[root@localhost ~]# chmod -x HelloWord.sh 

在这里插入图片描述

6.只给文件拥有者添加HelloWord可执行权限

[root@localhost ~]# chmod u+x HelloWord.sh 

在这里插入图片描述>7.给附属组成员添加HelloWord可执行权限

[root@localhost ~]# chmod o+x HelloWord.sh 

在这里插入图片描述

8.使用=号设置文件的权限(所有人拥有所有的权限)

  • u:文件的拥有者(user)
  • g:文件所属的群组(group)
  • o:其他用户(other)
[root@localhost ~]# chmod u=rwx,g=rwx,o=rwx HelloWord.sh 

在这里插入图片描述

7、chmod以数字形式改变文件

  • 读取权限:r 或者4
  • 写入权限:w或者2
  • 执行权限:x或者1
  • 可读写可执行:rwx = 4 + 2 + 1 = 7
  • 可读写不可执行:rw- = 4 + 2 = 6
  • 可读不可写可执行:r-x = 4 +1 = 5

常见权限形式

  • -rw------- (600) 只有拥有者有读写权限。

  • -rw-r–r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。

  • -rwx------ (700) 只有拥有者有读、写、执行权限。

  • -rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。

  • -rwx–x–x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。

  • -rw-rw-rw- (666) 所有用户都有文件读、写权限。

  • -rwxrwxrwx (777) 所有用户都有读、写、执行权限。

范例:

#设置所有人可以读写及执行
chmod 777 file  (等价于  chmod u=rwx,g=rwx,o=rwx file 或  chmod a=rwx file)

#设置拥有者可读写,其他人不可读写执行
chmod 600 file (等价于  chmod u=rw,g=---,o=--- file )

8、权限提升

8.1 修改文件的所有用户长度

chown命令:一般用于更改一个文件或者目录所属的用户和用户组

主要参数:

  • -R 子目录所属的用户和用户组对应发生改变

语法:

  • chown [-R] 用户[:用户组] 文件或者目录
chown -R user:group file...

1.我们切换到普通用户下,创建文件发现无法创建权限不足

[root@localhost ~]# su caoyougen
[caoyougen@localhost root]$ mkdir test
mkdir: 无法创建目录"test": 权限不够
[caoyougen@localhost root]$ 

在这里插入图片描述

2.切换到root用户并且创建一个文件夹demo进入该文件夹,并创建文件夹test

[root@localhost ~]# mkdir demo
[root@localhost ~]# cd demo/
[root@localhost demo]# mkdir test
[root@localhost demo]# ls
test
[root@localhost demo]# 

在这里插入图片描述

3.改变test目录的拥有者将开发5部caoyougen加入进来

[root@localhost demo]# chown caoyougen test
[root@localhost demo]# 

在这里插入图片描述

4.我们再次切换到caoyouegn账户下,并进入到test目录下创建文件和文件夹

[root@localhost demo]# su caoyougen
[caoyougen@localhost demo]$ ll
总用量 0
drwxr-xr-x. 2 caoyougen root 6 4月  24 15:22 test
[caoyougen@localhost demo]$ cd test/
[caoyougen@localhost test]$ mkdir cao
[caoyougen@localhost test]$ touch aa.txt
[caoyougen@localhost test]$ ll
总用量 0
-rw-r--r--. 1 caoyougen kf5bu 0 4月  24 15:25 aa.txt
drwxr-xr-x. 2 caoyougen kf5bu 6 4月  24 15:25 cao
[caoyougen@localhost test]$ 

在这里插入图片描述

5.我们回到上一级目录发现又不能创建文件了

[caoyougen@localhost test]$ pwd
/root/demo/test
[caoyougen@localhost test]$ cd ..
[caoyougen@localhost demo]$ mkdir aa
mkdir: 无法创建目录"aa": 权限不够
[caoyougen@localhost demo]$ 

在这里插入图片描述

8.2 sudo( 提升权限)

除了切换用户

比如在caoyougen用户下新增用户不被允许:

[caoyougen@localhost demo]$ useradd cyg
bash: /usr/sbin/useradd: 权限不够
[caoyougen@localhost demo]$ 

使用sudo命令

[caoyougen@localhost demo]$ sudo useradd cyg

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] caoyougen 的密码:
caoyougen 不在 sudoers 文件中。此事将被报告。
[caoyougen@localhost demo]$ 

在这里插入图片描述

需要修该sudoers

sudo 命令的配置文件为 /etc/sudoers。(注意,/etc/sudoers 的配置内容十分丰富,我们仅做简单的介绍。要了解更多信息,请参考 man sudoers。) 编辑这个文件是有单独的命令的 visudo(这个文件我们最好不要使用 vim 命令来打开),是因为一旦你的语法写错会造成严重的后果,这个工具会替你检查你写的语法,这个文件的语法遵循以下格式: who where whom command 说白了就是哪个用户在哪个主机以谁的身份执行那些命令,那么这个 where, 是指允许在那台主机 ssh 连接进来才能执行后面的命令,文件里面默认给 root 用户定义了一条规则:

root    ALL=(ALL:ALL)       ALL
  • root    表示 root 用户。
  • ALL     表示从任何的主机上都可以执行,也可以这样 192.168.100.0/24。
  • (ALL:ALL)   是以谁的身份来执行,ALL:ALL 就代表 root 可以任何人的身份来执行命令。
  • ALL     表示任何命令。

那么整条规则就是 root 用户可以在任何主机以任何人的身份来执行所有的命令。

sudo 组中的所有用户都具有通过 root 权限执行命令的能力!

1.切换到root用户并进入到etc目录下

在这里插入图片描述
在这里插入图片描述

2.将caoyougen添加到wheel组中 即可提升权限

[root@localhost etc]# usermod -G wheel caoyougen
[root@localhost etc]# id caoyougen
uid=1000(caoyougen) gid=1002(kf5bu) 组=1002(kf5bu),10(wheel)
[root@localhost etc]# 

在这里插入图片描述

3.切换到caoyougen账户,并进入到demo目录中,使用touch aa.txt创建文件

[root@localhost cyg]# cd /root/demo/
[root@localhost demo]# su caoyougen
[caoyougen@localhost demo]$ touch aa.txt
touch: 无法创建"aa.txt": 权限不够
[caoyougen@localhost demo]$ 

在这里插入图片描述

4.我们需要使用 sudo touch aa.txt命令

[caoyougen@localhost demo]$ sudo touch aa.txt
[caoyougen@localhost demo]$ ls
aa.txt
[caoyougen@localhost demo]$ 

在这里插入图片描述
再看个例子:

nick  192.168.10.0/24=(root) /usr/sbin/useradd

上面的配置只允许 nick 在 192.168.10.0/24 网段上连接主机并且以 root 权限执行 useradd 命令。

设置 sudo 时不需要输入密码

执行 sudo 命令时总是需要输入密码事件很不爽的事情(抛开安全性)。有些应用场景也需要在执行 sudo 时避开输入密码的交互过程。 那么需要如何设置呢?其实很简单,只需要在配置行中添加 NOPASSWD: 就可以了:

第四章 安装软件(更换阿里yum)

在这里插入图片描述

1、CentOS更换阿里yum源

1、备份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

在这里插入图片描述

2、下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

CentOS 6

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo

CentOS 7

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

CentOS 8

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[root@localhost yum.repos.d]# cat CentOS-Base.repo 查看

在这里插入图片描述

3. 运行 yum makecache 生成缓存

运行以下命令生成缓存

[root@localhost yum.repos.d]# yum clean all   先清楚以前的缓存

[root@localhost yum.repos.d]# yum makecache   在生成缓存

4. 其他

非阿里云ECS用户会出现 Couldn’t resolve host ‘mirrors.cloud.aliyuncs.com’ 信息,不影响使用。用户也可自行修改相关配置: eg:

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentO

安装一个vim试试

yum install vim -y

2、安装jdk,配置环境变量

1、下载jdk8

登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
选择对应jdk版本下载。(可在Windows下下载完成后,通过文件夹共享到Linux上)

文件包中有。

网盘链接:
链接:https://pan.baidu.com/s/13Djlbnqb8OHSWTsrLNBSlw
提取码:Coke

2. 在usr目录下建立jdk安装目录

cd /usr
mkdir jdk

在这里插入图片描述

3.将jdk-8u60-linux-x64.tar.gz拷贝到java目录下

cp /mnt/hgfs/linux/jdk-8u60-linux-x64.tar.gz /usr/java/

或者

在这里插入图片描述

4.解压jdk到当前目录

tar -zxvf jdk-8u60-linux-x64.tar.gz
得到文件夹 jdk1.8.0_152

在这里插入图片描述
在这里插入图片描述

5.安装完毕为他建立一个链接以节省目录长度

  • 可有可无,就是创建一个快捷键
[root@localhost jdk]# ln -s /usr/jdk/jdk1.8.0_152/ java8
[root@localhost jdk]# ls
java8  jdk1.8.0_152
[root@localhost jdk]# 

在这里插入图片描述
在这里插入图片描述

6.编辑配置文件,配置环境变量

该命令可以安装vim指令

[root@localhost java8]# yum install vim -y
vim /etc/profile

JAVA_HOME=/usr/jdk/jdk1.8.0_152
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin

在这里插入图片描述

7.执行命令 :

重新加载环境变量

source /etc/profile

8.查看安装情况

[root@localhost java8]# java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
[root@localhost java8]# 

在这里插入图片描述

五、Linux中安装mysql

网盘链接
链接:https://pan.baidu.com/s/1ro7QyM0-Ds0WXNAuqUgN1w
提取码:Coke

①:下载MySQL安装包 并上传到Linux

1.在root目录下创建software文件夹

[root@localhost ~]# cd /root
[root@localhost ~]# mkdir software
[root@localhost ~]# ls
anaconda-ks.cfg  cao1  demo  HelloWord.sh  qin  software  test  test.txt
[root@localhost ~]# 

在这里插入图片描述

2.上传mysql安装包
在这里插入图片描述

3.查看上传成功

在这里插入图片描述

②:解压安装

1.解包

[root@localhost software]# tar -xvf mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar 

在这里插入图片描述

2. 安装依赖包

[root@localhost software]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel net-tools

在这里插入图片描述
在这里插入图片描述

3.由于Centos7开始自带的数据库是mariadb,所以需要卸载系统中的mariadb组件,才能安装mysql的组件

先查看是否已经安装

[root@localhost software]# rpm -qa | grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
[root@localhost software]# 

在这里插入图片描述
删除 mariadb-libs

[root@localhost software]# yum -y remove mariadb-libs

在这里插入图片描述

4.安装mysql 一定要按照顺序

在这里插入图片描述
第一步: 先安装 mysql-community-common-5.7.35-1.el7.x86_64.rpm

[root@localhost software]# rpm -ivh mysql-community-common-5.7.35-1.el7.x86_64.rpm 

在这里插入图片描述
第二步:安装 mysql-community-libs-5.7.35-1.el7.x86_64.rpm

[root@localhost software]# rpm -ivh mysql-community-libs-5.7.35-1.el7.x86_64.rpm 

在这里插入图片描述
第三步:安装 mysql-community-libs-compat-5.7.35-1.el7.x86_64.rpm

[root@localhost software]# rpm -ivh mysql-community-libs-compat-5.7.35-1.el7.x86_64.rpm 

在这里插入图片描述
第四步:安装mysql-community-client-5.7.35-1.el7.x86_64.rpm

[root@localhost software]# rpm -ivh mysql-community-client-5.7.35-1.el7.x86_64.rpm 

在这里插入图片描述
第五步:安装mysql-community-server-5.7.35-1.el7.x86_64.rpm

[root@localhost software]# rpm -ivh mysql-community-server-5.7.35-1.el7.x86_64.rpm 

在这里插入图片描述

③:启动MySQL服务

1.启动服务

mysql服务相关命令:

  • systemctl start mysqld 启动服务

  • systemctl enable mysqld 加入到开机启动

  • systemctl status mysqld 查看当前服务状态

  • systemctl stop mysqld 停止服务

  • systemctl restart mysqld 重启服务

  • systemctl disable mysqld 删除自动启动

防火墙相关命令(firewalld)

  • systemctl start firewalld 启动服务

  • systemctl enable firewalld 加入到开机启动

  • systemctl status firewalld 查看当前服务状态

  • systemctl stop firewalld 停止服务

  • systemctl restart firewalld 重启服务

  • systemctl disable firewalld 删除自动启动

[root@localhost software]# systemctl start mysqld
[root@localhost software]# systemctl enable mysqld
[root@localhost software]# 

在这里插入图片描述
查看mysql服务状态

[root@localhost software]# systemctl status mysqld

在这里插入图片描述

④:重置密码

1.重置密码

注意:5.6的密码使用 cat/root/.mysql_secret查询

第一步:前往日志文件查找临时密码

[root@localhost software]# grep "password" /var/log/mysqld.log 

在这里插入图片描述
第二步:登录mysql

[root@localhost software]# mysql -uroot -p"3HdyuXJBv5#r"

在这里插入图片描述
第三步:进行相关设置

1. 由于mysql中设置简单密码会报错,所以要进行相关设置后才可设置简单密码

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述
2. 注意:需要先修改一个比较复杂的密码

mysql> alter user 'root'@'localhost' identified by 'root1234ABCD!@#$';
Query OK, 0 rows affected (0.00 sec)

mysql> 

在这里插入图片描述
3.刷新权限

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 

在这里插入图片描述
4.exit退出登录

mysql> exit
Bye
[root@localhost software]# 

在这里插入图片描述
5.再次登录mysql

[root@localhost software]# mysql -u root -p'root1234ABCD!@#$'

在这里插入图片描述
6.重新设置密码 密码设置为root

mysql> set password for root@localhost = password('root');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 

在这里插入图片描述
7.退出从新登录测试一下

[root@localhost software]# mysql -uroot -proot 

在这里插入图片描述

⑤:Navicate链接MySQL

01. 连接失败

在这里插入图片描述

02. 解决方法

1.开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

2.重新载入防火墙使设置生效
firewall-cmd --reload

3.查看是否开放端口
firewall-cmd --zone=public --query-port=3306/tcp

4.关闭已开放端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent

1. 开启Linux端 3306 端口 并重新加载
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
在这里插入图片描述

2. 查看端口是否开放
firewall-cmd --zone=public --query-port=3306/tcp
在这里插入图片描述

3. 再次连接(失败)
在这里插入图片描述

4. 解决方案
1、连接服务器: mysql -u root -p
2、看当前所有数据库:show databases;
3、进入mysql数据库:use mysql;
4、查看mysql数据库中所有的表:show tables;
5、查看user表中的数据:select Host, User,Password from user
6、修改user表中的Host:update user set Host=‘%’ where User=‘root’;
7、最后刷新一下:flush privileges;

1. 连接服务器: mysql -u root -proot
在这里插入图片描述
2. 看当前所有数据库
命令:show databases;
在这里插入图片描述
3. 进入mysql数据库
命令:use mysql;
在这里插入图片描述
4.查看mysql数据库中所有的表
命令:show tables;
在这里插入图片描述
5. 查看user表中的数据
命令:select Host,User from user;
在这里插入图片描述
6. 修改user表中的Host
命令:update user set Host='%' where User='root';
在这里插入图片描述
7. 最后刷新一下
命令:flush privileges;
在这里插入图片描述
8. 再次查看
命令:select Host,User from user;
在这里插入图片描述
9. 连接测试
在这里插入图片描述在这里插入图片描述

六、Linux中安装Tomcat

网盘链接:
链接: https://pan.baidu.com/s/1Y2EnqIIMdIc9UTY2-IKkfQ
提取码: Coke

在这里插入图片描述

①:上传二进制包到Linux中

1. 在opp目录下创建tomcat目录
在这里插入图片描述
2. 上传
在这里插入图片描述

②:安装并启动Tomcat服务

1. 解压安装
在这里插入图片描述
2. 启动tomcat服务
进入到该路径下:/usr/oop/tomcat/apache-tomcat-7.0.57/bin
启动服务:sh startup.sh
在这里插入图片描述
3. 查看日志 检查tomcat是否启动成功
进入到该路径下://usr/oop/tomcat/apache-tomcat-7.0.57/logs
查看日志文件:tail -10 catalina.out
在这里插入图片描述

4. 查看进程 tomcat是否运行
查看进程:ps -ef | grep tomcat
在这里插入图片描述

5. windows中访问Linux中tomcat
在这里插入图片描述

③:Linxu防火墙(开启/关闭)端口

在这里插入图片描述

01. 查看防火墙状态

1. 查看防火墙状态 (方式一)
命令:systemctl status firewalld
在这里插入图片描述
2. 查看防火墙状态 (方式二)
命令:firewall-cmd --state
在这里插入图片描述

02. 暂时/永久关闭(开启)防火墙

1. 暂时关闭防火墙
暂时关闭命令:systemctl stop firewalld
查看状态: firewall-cmd --state
在这里插入图片描述
2. 永久关闭防火墙
命令:systemctl disable firewalld
在这里插入图片描述
3.开启防火墙
命令:systemctl start firewalld
在这里插入图片描述

03. 开放 关闭 指定端口并查看

在这里插入图片描述

1. 开放指定端口 8080
命令:firewall-cmd --zone=public --add-port=8080/tcp --permanent
立即生效:firewall-cmd --reload
在这里插入图片描述
2. 关闭指定端口 8080
命令:firewall-cmd --zone=public --remove-port=8080/tcp --permanent
立即生效: firewall-cmd --reload
在这里插入图片描述
3. 查看开放的端口
命令:firewall-cmd --zone=public --list-ports
在这里插入图片描述
4. 开放指定端口 8080 再次访问服务
命令:firewall-cmd --zone=public --add-port=8080/tcp --permanent
立即生效:firewall-cmd --reload
在这里插入图片描述

④:停止Tomcat服务

1.方式一:使用tomcat提供的脚本文件
进入到该路径下:/usr/oop/tomcat/apache-tomcat-7.0.57/bin
运行停止脚本sh shutdown.sh
在这里插入图片描述

2. 方式二:结束Tomcat进程
查看Tomcat进程:ps -ef | grep tomcat
执行命令结束进程:kill -9 79385
在这里插入图片描述

七、Linux安装lrzsz

在这里插入图片描述

1. 搜索lrzsz安装包
命令:yum list lrzsz
在这里插入图片描述
2. 使用yum命令在线安装
命令:yum install lrzsz.x86_64
在这里插入图片描述
3. 使用rz命令会弹出一个框 上传文件
在这里插入图片描述

八、项目部署(手工部署)

①:IDEA中开发SpringBoot项目并打成jar包

1. 开发一个spingboot项目(任意)
在这里插入图片描述
2. 将本地项目打成Jar包
在这里插入图片描述

②:手工部署项目

01. 上传jar包

1. 在 Java路径下创建springBoot目录用于存储springBoot程序
在这里插入图片描述
2. 将刚刚打的jar包上传到springBoot目录中
在这里插入图片描述

02.启动程序

1. 启动程序
命令: java -jar springboot_03_demo-0.0.1-SNAPSHOT.jar
在这里插入图片描述

03. 访问测试

1. 开放8088端口 并在windows下访问
命令:firewall-cmd --zone=public --add-port=8088/tcp --permanent
立即生效:firewall-cmd --reload
在这里插入图片描述

③:改为后台运行SpringBoot程序

在这里插入图片描述

1. 关闭直接的终端窗口后 程序就中断了
2. 后台运行程序,并将日志输出到日志文件
命令: nohup java -jar springboot_03_demo-0.0.1-SNAPSHOT.jar &> hello.log &
在这里插入图片描述
3. 查看日志文件
在这里插入图片描述
4. 访问服务
在这里插入图片描述

九、项目部署(自动部署)

①:shell脚本自动部署项目

在这里插入图片描述

1. 开发一个spingboot项目(任意)
在这里插入图片描述
2. 创建一个远程仓库与idea关联
在这里插入图片描述
3. 将本地项目代码推送到远程仓库
在这里插入图片描述

②:在Linux中安装Git

01. 在线安装Git

1. 列出Git安装包
命令: yum list git
在这里插入图片描述
2. 在线安装Git
命令:yum install git
在这里插入图片描述

02. 将远程仓库代码克隆到本地

1. 在 /usr/oop/java/目录下创建git目录用于存储git文件
在这里插入图片描述
2. 将远程仓库代码克隆到本地
命令:git clone https://gitee.com/c-coke/hello-world.git
在这里插入图片描述

③:在Linux中安装Maven

在这里插入图片描述

网盘链接:
链接:https://pan.baidu.com/s/1FStuRN2FCoBqW138RmgZ6w
提取码:Coke

01. 上传maven安装到Linux中

1. 在/usr/oop/java目录下创建maven目录用于存储maven文件
在这里插入图片描述
2. 上传
在这里插入图片描述

02.解压 配置 环境变量

1. 解压
在这里插入图片描述在这里插入图片描述
2. 配置环境变量
vim /etc/profile      修改配置文件,加入如下内容
export MAVEN_HOME=/usr/oop/java/maven/apache-maven-3.5.4
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH 

在这里插入图片描述

3. 重现加载配置文件
命令:``
在这里插入图片描述
4. 测试
命令:mvn -version
在这里插入图片描述

03.配置Maven本地仓库和阿里云镜像

1. 在Maven目录中创建repo目录用于存储maven依赖
在这里插入图片描述
2. 修改配置文件
vim /usr/oop/java/maven/apache-maven-3.5.4/conf/settings.xml
修改配置文件内容如下:
<localRepository>/usr/oop/java/maven/repo</localRepository>

在这里插入图片描述

3. 配置Maven阿里云镜像
vim /usr/oop/java/maven/apache-maven-3.5.4/conf/settings.xml
修改配置文件内容如下:
<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror> 
    <id>aliyun-maven</id>
    <mirrorOf>*</mirrorOf> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

在这里插入图片描述

④:创建bootStart.sh自动部署脚本

在这里插入图片描述

1. 在Java目录下创建sh目录并在sh目录中创建 bootStart.sh 脚本文件
在这里插入图片描述
2. 编辑 bootStart.sh文件内容
#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================

echo 停止原来运行中的工程
APP_NAME=hello-world

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

echo 准备从Git仓库拉取最新代码
cd /usr/oop/java/git/hello-world

echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成

echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`

cd target

echo 启动项目
nohup java -jar springboot_03_demo-0.0.1-SNAPSHOT.jar &> helloworld.log &
echo 项目启动完成

1. 修改内容(一)
在这里插入图片描述

2. 修改内容(二)
在这里插入图片描述

3. 修改内容(三)
在这里插入图片描述

3. 直接将内容复制到 bootStart.sh文件中
在这里插入图片描述

⑤:为用户授权

在这里插入图片描述在这里插入图片描述

1. 查看当前权限
在这里插入图片描述
2. 为了方便直接赋予全部权限
命令:chmod 777 bootStart.sh
在这里插入图片描述

⑥:执行自动部署脚本

1. 执行脚本
命令:./bootStart.sh
在这里插入图片描述
2. 第一次执行会下载很多依赖包,可以到maven仓库查看
目录: cd /usr/oop/java/maven/repo
在这里插入图片描述
3. 启动成功后(查看一下日志文件)
搜索日志:find / -name helloworld.log
目录:/usr/oop/java/git/hello-world/target/helloworld.log
查看日志:``
在这里插入图片描述
4. 访问
在这里插入图片描述
5. 修改代码重新提交推送 并重新执行脚本文件
在这里插入图片描述在这里插入图片描述
6. 如果没有成功 (方法一)缺点:每次都要修改
在这里插入图片描述
7. 如果没有成功 (方法二) 优点只需修改一次
在这里插入图片描述
8. 问题修改后 我们在来测试一下
在这里插入图片描述在这里插入图片描述

⑦:将LinuxIp改为静态Ip

参考:上面第一章 第四节 b.连接linux系统

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: zynq-linux移植学习笔记应包含以下内容: 1. 对zynq架构和硬件资源的理解,包括PS和PL部分的特点。 2. 如何使用Xilinx SDK来编译和配置u-boot和Linux内核。 3. 如何在硬件平台上运行和调试Linux系统。 4. 怎样在Linux系统中配置和使用各种硬件资源,如DMA、Ethernet、Flash等。 5. 如何在Linux系统中移植和运行应用程序,并与硬件资源进行交互。 6. 如何进行系统优化和资源管理,以提高系统性能和稳定性。 ### 回答2: Zynq是一款Xilinx公司开发的一种嵌入式系统芯片,其使用了双核Cortex-A9处理器和可编程逻辑器件(FPGA)的组合。移植Linux到Zynq芯片中,可以使其具备无限的扩展能力,极大地拓展了其应用领域,因此掌握Zynq-Linux移植技术是非常重要的。 Zynq-Linux移植分为四个主要步骤: 第一,准备工作 在移植前,需要确认硬件平台是否支持Linux运行,并且需要对硬件进行配置,最好使用Zynq开发板的官方配置; 第二,内核移植 内核移植是整个移植过程中最关键的一步。需要根据硬件平台的特性对内核进行选择和配置。可以从内核源代码库中获取内核代码,然后进行交叉编译。移植内核的过程中需要注意内核配置参数的设置,同时也要确保内核模块和驱动程序的编写。 第三,文件系统移植 在移植Linux的过程中,文件系统也是非常重要的。可以使用开发板官方Linux镜像,也可以自己编译镜像。移植文件系统还涉及到root文件系统的配置、挂载方式、网络配置和各种服务的配置等问题。 第四,驱动移植 驱动程序是连接硬件和软件的关键部分,需编写相应的驱动程序来实现对硬件的控制。移植驱动程序的过程中需要关注各种硬件接口和设备驱动API的使用,确保驱动程序与硬件配合良好。 总结来说,Zynq-Linux移植技术的掌握需要具备较强的Linux基础知识、驱动开发经验和交叉编译工具链的使用能力。同时,还需要有耐心和细心,对每个步骤进行仔细的分析和处理。 在学习中,需要结合实际开发项目,多进行实践操作才能更好地掌握Zynq-Linux移植技术,为后续项目的开发和应用提供更好的支持。 ### 回答3: Zynq-7000系列是一种由Xilinx开发的SoC(系统级芯片),它将双ARM Cortex-A9处理器和可编程逻辑(FPGA)集成在一起。这使得开发人员可以使用硬件加速加速器来加速运行在Linux上的各种应用。然而,实现这个目标需要进行移植。 在开始Zynq Linux移植学习笔记之前,需要一些基本的知识。首先,需要了解Linux内核的基本工作原理和Linux驱动程序的编写技术。然后,需要了解FPGA和SoC体系结构。 在开始移植之前,需要为SoC开发板选择正确的Linux发行版。这通常需要考虑处理器体系结构,内存大小和设备驱动程序的可用性。另外,还需要考虑是否需要自定义内核或驱动程序以满足应用程序的需求。 接下来,需要编写设备树文件(DT)来描述SoC架构。设备树文件是一种描述硬件配置信息的特殊语言。它会告诉内核有哪些设备可用以及如何访问这些设备。 接下来,需要配置Linux内核以支持Zynq-7000处理器。这可能包括启用适当的内核配置选项,编写设备驱动程序以及配置启动过程。 最后,需要启动Zynq板并验证Linux系统稳定运行。这些步骤包括在启动过程中将设备树文件加载到内存中,以及启动用户空间应用程序。 总之,移植Zynq Linux是一项复杂的任务,需要广泛的专业知识和技术。但是,它可以为开发人员提供强大的硬件加速支持,使他们能够加速处理一系列计算密集型应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欣慰的三叶草(● ̄(エ) ̄●)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值